我有一个Powershell脚本,该脚本可以接收CSV数据并将其加载到SQL Server中,但是似乎在连接服务器时出现了一些问题,因此我要退后一步,尝试在没有脚本其余部分的情况下建立连接。我的脚本使用Windows身份验证,当我调用“导入模块SQLServer”时,出现以下错误:
PS C:\Users\Student> import-module sqlserver
add-type : Could not load file or assembly 'Microsoft.SqlServer.ConnectionInfo, Version=9.0.242.0, Culture=neutral,
PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The system cannot find the file specified.
At C:\Users\Student\Documents\WindowsPowerShell\Modules\sqlserver\SQLServer.psm1:17 char:8
+ catch {add-type -AssemblyName "Microsoft.SqlServer.ConnectionInfo"}
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Add-Type], FileNotFoundException
+ FullyQualifiedErrorId : System.IO.FileNotFoundException,Microsoft.PowerShell.Commands.AddTypeCommand
add-type : Could not load file or assembly 'Microsoft.SqlServer.Smo, Version=9.0.242.0, Culture=neutral,
PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The system cannot find the file specified.
At C:\Users\Student\Documents\WindowsPowerShell\Modules\sqlserver\SQLServer.psm1:20 char:8
+ catch {add-type -AssemblyName "Microsoft.SqlServer.Smo"; $smoVersion ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Add-Type], FileNotFoundException
+ FullyQualifiedErrorId : System.IO.FileNotFoundException,Microsoft.PowerShell.Commands.AddTypeCommand
WARNING: SMOExtended not available
PS C:\Users\Student> cd SQLSERVER:\SQL
cd : Cannot find drive. A drive with the name 'SQLSERVER' does not exist.
At line:1 char:1
+ cd SQLSERVER:\SQL
+ ~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (SQLSERVER:String) [Set-Location], DriveNotFoundException
+ FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.SetLocationCommand
前两个FileNotFoundExceptions仅在我第一次运行Import-Module命令时出现,但是我仍然从调用Set-Location时收到ObjectNotFound错误。更有趣的是,我有脚本的另一个有效版本,该版本使用SQL Server身份验证通过SqlConnection对象连接到数据库。当我运行此脚本,然后返回并运行Windows身份验证脚本时,我没有遇到以前的错误,并且能够毫无问题地连接到SQL Server。
我已经尝试过重新安装SQLServer模块以及通过.NET CLI安装Microsoft.SqlServer.SqlManagementObjects,如https://www.nuget.org/packages/Microsoft.SqlServer.SqlManagementObjects
所示。知道Microsoft.SqlServer.ConnectionInfo.dll和Microsoft.SqlServer.Smo.dll都位于C:\ Program Files(x86)\ Microsoft SQL Server \ 120 \ SDK \ Assemblies中也是一个好信息。
感谢您的帮助。
编辑:
我发现Microsoft.SqlServer.Smo位于C:\ Program Files \ Microsoft SQL Server \ 140 \ SDK \ Assemblies(请注意是Program Files而不是Program Files(x86)),但是ConnectionInfo程序集却没有。我正在使用SQL Server 2017,并验证我正在运行x64版本,因此我认为这可能是问题所在。没有ConnectionInfo程序集还会导致我得到的Smo加载失败吗?
答案 0 :(得分:0)
尝试使用
Set-Location -Path $PSHOME
Add-Type -AssemblyName *sqlserver* -PassThru