【问题标题】:invoke-sqlcmd not recognized even though SqlPs loaded即使加载了 SqlP,invoke-sqlcmd 也无法识别
【发布时间】:2022-03-09 02:02:03
【问题描述】:

我正在尝试创建一个 shell 脚本来运行查询并存储输出,到目前为止,我的脚本看起来像这样:

push-location;
import-module SqlPs;
Pop-Location;
$myData = invoke-sqlcmd -InputFile "C:\<path>\blah.sql" -serverinstance dbatest -database testdb;
$mydata | out-file C:\Users\<path>\shelloutput.csv;
remove-module sqlps;

它可以很好地加载 SqlP,我可以使用 Get-Module -ListAvailable 生成 this 进行检查

但是当我执行invoke-sqlcmd 时,无法识别:

关于我还能做什么的任何想法?

编辑 1

当我添加选项-Verbose 时,我看到这个错误 说有些文件已经存在。这个错误是否会阻止我加载模块?当我执行Get-Module 时,它没有列出 SQLPS 模块。

编辑 2

加载 32 位版本的错误更少,但加载文件时仍然出错...现在只丢失了 2 个文件,而不是之前的 5 个文件

【问题讨论】:

  • Get-Module -ListAvailable 显示存在哪些模块,而不是加载了哪些模块。删除 -ListAvailable 以显示加载到当前会话中的内容。
  • @MikeShepard 进行了编辑以反映您的评论...我尝试使用 import-module sqlps -force 但这没有帮助
  • PowerShell 和 SQL Server 之间是否存在平台不匹配?如果您正在运行 32 位 SQL 服务器,请尝试从 C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe 启动 32 位版本的 PowerShell,看看是否可以加载 SQLPS
  • @briantist 进行了反映您的评论的编辑,它所做的只是删除已经存在的文件数

标签: powershell


【解决方案1】:

我在我的系统上发现,在 64 位路径之前,我在路径中有几个对 32 位(程序文件 (x86))路径的 sql bin 引用。我将所有 32 位路径移到 64 位路径下方,它解决了问题。

【讨论】:

    猜你喜欢
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2021-12-26
    • 2019-08-02
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    相关资源
    最近更新 更多