sqlcmd.exe 在本地工作,但不能通过 Azure 管道工作

sqlcmd.exe works locally but not through azure pipelines

提问人:Lucas 提问时间:9/26/2023 更新时间:9/26/2023 访问量:63

问:

我正在尝试在 azure pipelines 中运行一个旧脚本,该脚本很旧,但在本地运行时效果很好。但是,当我通过 Azure Pipelines 执行脚本时,它会返回错误。

运行自承载代理的环境是具有 PowerShell 5.1 的 Windows Server 2012 R2 设备。为了简单起见,我已将大部分代码简化为更小的版本,以便于复制。

原始格式

当地:Works - 管道:失败

$sql = "SELECT @@Version"
$sql | sqlcmd -S $server -U $username -P $env:PASSWORD_ENV -l 30 -d "master" -I -b -h -1 -W -j 2>&1

参数格式

当地:作品 - 管道:作品

$sql = "SELECT @@Version"
sqlcmd -Q $sql -S $server -U $username -P $env:PASSWORD_ENV -l 30 -d "master" -I -b -h -1 -W -j 2>&1

此命令输出的错误是

消息 2812,级别 16,状态 62,第 1 行 [Microsoft][适用于 SQL Server 的 ODBC 驱动程序 13][SQL 服务器]找不到存储过程 master.dbo.选择”。

现在有人可能会说,

好吧,只需更新脚本以使用参数方法即可!

这是一个有效的论点,尽管这些脚本很旧,而且不仅仅是这个命令遇到了问题。在管道中运行时存在某种环境问题,导致更广泛的问题。如果我安装最新版本的 PowerShell 并选中该命令的框,则它在其他地方会失败,因为脚本使用 WMI 的命令,该命令在更高版本中已替换为 Get-CIMInstance。但同样......所有原始脚本在本地运行时都可以正常工作,而不会出现问题。pwsh

环境

  • SQLCMD(本地):13.0.1601.5
  • SQLCMD(管道):13.0.1601.5
  • PSVersion(本地):5.1.14409.1005
  • PSVersion(管道):5.1.14409.1005
Azure PowerShell azure-devops azure-pipelines sqlcmd

评论


答: 暂无答案