SQL已安装,但PowerShell不拾取SQLPS命令(例如Indoke-SQLCMD)



我用巧克力安装了MS SQL Server:

choco install SQLServer2012DeveloperEditionWithSP1 -y -f -source 'http://choco.developers.tcpl.ca/chocolatey' -c "$env:WINDIRtemp"

SQL似乎已安装,并且在PowerShell之外不起作用,并且在不起作用的情况下运行良好。我可以看到:

看到SQLPS模块
Get-Module -listavailable

...

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Manifest   1.0        SQLASCMDLETS
Manifest   1.0        SQLPS

命令似乎缺少。从理论上讲,我没有Invoke-SQLCMD等。如果我安装模块,我应该可以访问它们,但是当我尝试导入Module SQLPS,但是我会发现没有SQLServer驱动器的错误:

PS C:WINDOWSsystem32> Import-Module SQLPS
Set-Location : Cannot find drive. A drive with the name 'SQLSERVER' does not exist.
At C:Program Files (x86)Microsoft SQL Server110ToolsPowerShellModulesSQLPSSqlPsPostScript.ps1:1 char:1
+ Set-Location SQLSERVER:
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : ObjectNotFound: (SQLSERVER:String) [Set-Location], DriveNotFoundException
+ FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.SetLocationCommand

我认识我的小组中的几个人,他们经历了这些步骤,并且确实获得了正确的SQL PS设置。

任何提示或想法都会非常有帮助。谢谢。

美好的一天,

我猜您正在使用SQL Server 2017,因为这是2017年的常见问题,正如我将在下面解释的那样。我不确定使用了哪种版本,因为这个问题有些旧,并于17年5月2日在22:58

您获得的错误包括基本问题

设置安置:找不到驱动器。没有名称" SQLServer"的驱动器。

它不说模块" sqlps"不存在,而是模块" sqlserver"不存在

的解释是,直到2016年SQLPS模块已包含在SQL Server安装中,但是我们使用的PowerShell模块是" SQLServer"模块。SQL Server Management Studio(SSMS(16.x包含" SQLServer"模块,但是如果您使用的是SSMS 2017(17.X(,则必须从PowerShell画廊安装" SQLServer"模块。

安装它的过程是执行命令:

Install-Module -Name SqlServer

如果您遇到了诸如PackageManagementInstall-Package : The following commands are already available on this system:...

之类的错误

然后您可以使用参数执行安装:-Force–AllowClobber

由于我不熟悉您的系统,我不会建议您该怎么做或说您是否应该执行安装,但这是我在大多数情况下可能会做的解决方案这(根据我在此线程中注意到的信息(

Install-Module -Name SqlServer -Force –AllowClobber

为了确认模块是相反,您可以执行以下命令:

Get-Module -Name SqlServer -listAvailable | select Name, ModuleType, Version

使用上面命令检查安装版本,并在以下命令中使用它以导入最新版本(当时我编写此答案时,版本为21.0.17279(:

Import-Module SqlServer -Version 21.0.17279

这就是全部...如果一切顺利,那么您应该能够使用所有SQL Server PowerShell命令

只是对未来读者的旁注,我试图通过PowerShell创建SQL备份。CMDLET在Administrator帐户下应运行,但是在常规用户帐户下运行脚本,我收到以下错误:

Cannot find a provider with the name 'SqlServer'

谷歌搜索这个问题将我带到这里,但是我的问题的答案是在这里的论坛上:https://social.technet.microsoft.com/forums/windowsserver/en-us/626bb81a-00ba-00ba-4239-ad0a-d0a-fec32546350a/check-fec3546350a/check-if-if-if-fiv-if-drive-drive-drive-exists-exists-exists-exists-exists-exists-exists-exists-if-not-if-not-forum = forum = forum = winservorpowerpowerpowerpow/pp>

我遇到了一个奇怪的问题,希望有人可以解决这个问题。

Microsoft SQL Server 2014(SP2 -GDR((KB4505217(-12.0.5223.6(x64((是的,我知道...这是Dev Server(

Windows 2012 R2

psversion 4.0

我在PS脚本中加载SQL组件

[System.Reflection.sembly] :: LoadWithPartialName(Microsoft.sqlserver.smo(|北极

[System.Reflection.sembly] :: loadWithPartialName(Microsoft.sqlserver.smoextended&quort&quot''(|北极

如果我在加载程序集后立即运行

,以下会失败

Get-Childitem SQLServer: sql $ env:computername

Get-Childitem:找不到驱动器。没有名称" SQLServer"的驱动器。

如果我先运行以下,我很好。

Indoke -sqlcmd -query'从sys.sysobjects中选择顶部1 *|北极

Get-Childitem SQLServer: sql $ env:computername

我只是想修改我只需要运行

Indoke-SQLCMD |北极

这似乎随后将组件完全加载到内存中,并且一切都可以。

所以我将其添加到脚本中:

# SQL cmdlets below need some dll imports from system
# These do not get loaded sometime when running under an non-admin account (Cannof find a provider with the name 'SqlServer')
# Running this dummy command seems to load all needed dlls
# Also see: https://www.sqlservercentral.com/forums/topic/unable-access-sql-provider-in-powershell-without-running-an-invoke-sqlcmd-first
Invoke-Sqlcmd | Out-Null

似乎不应该丢失的宝贵信息,所以我认为我会以最高的速度发布它,因此在搜索特定错误时。

一个人可能会说安装模块而不是这种虚拟方法会更干净。

正如指向的,这是您现在应该引用的链接。

msdn链接

运行SQL Server PowerShell

找不到路径'sqlserver'问题

Jarret给出了答案。简单地加载模块实际上无济于事。这些命令必须在此之后运行。

Push-Location
cd $sqlpsPath
Add-PSSnapin SqlServerCmdletSnapin100
Add-PSSnapin SqlServerProviderSnapin100
Update-TypeData -PrependPath SQLProvider.Types.ps1xml 
update-FormatData -prependpath SQLProvider.Format.ps1xml 
Pop-Location

希望它有帮助。

相关内容

  • 没有找到相关文章

最新更新