使用PowerShell SqlServer模块时Invoke-Sqlcmd报错求助
解决Invoke-Sqlcmd无法加载Microsoft.SqlServer.BatchParser.dll的问题
根据你提供的模块信息,存在两个SqlServer模块实例(一个有效版本21.0.17099,一个无效的0.0版本),加上依赖DLL缺失或位数不匹配的可能,按以下步骤排查:
清理重复模块并指定版本导入
- 强制卸载所有已加载的SqlServer模块:
Get-Module SqlServer | Remove-Module -Force - 查看所有已安装的SqlServer模块位置:
Get-Module SqlServer -ListAvailable - 找到版本为0.0的Script类型模块对应的文件夹,手动删除该无效模块。
- 重新导入指定版本的有效模块:
Import-Module SqlServer -Version 21.0.17099 -Force
之后再尝试执行
Invoke-Sqlcmd。- 强制卸载所有已加载的SqlServer模块:
检查PowerShell位数与模块匹配
SqlServer模块的依赖DLL分32位和64位版本,如果你当前使用的PowerShell位数与模块不匹配,会导致DLL加载失败:- 关闭当前PowerShell,打开对应位数的版本(比如64位的Windows PowerShell),重新导入模块并测试。
重新安装SqlServer模块
如果模块文件损坏,卸载后重新安装:- 卸载所有版本的SqlServer模块:
Uninstall-Module SqlServer -AllVersions -Force - 重新安装指定版本:
Install-Module SqlServer -Version 21.0.17099 -Force -AllowClobber - 导入模块后执行
Invoke-Sqlcmd测试。
- 卸载所有版本的SqlServer模块:
补充系统依赖组件
Microsoft.SqlServer.BatchParser.dll属于SQL Server SMO(Shared Management Objects)组件的一部分,若系统缺失该组件:- 安装最新版的SQL Server Management Studio (SSMS),它会自动包含所需的SMO及依赖DLL。
内容的提问来源于stack exchange,提问作者Casey
相关产品推荐
相关产品推荐

