【问题标题】:Powershell SQL Server Agent CmdExec job step multiple line codePowershell SQL Server 代理 CmdExec 作业步骤多行代码
【发布时间】:2018-03-19 09:18:45
【问题描述】:

为什么这样的代码会在 PowerShell ISE 中执行:

$var = 'dog';Invoke-SqlCmd -ServerInstance 'servername' -Query "insert into DB.dbo.tbl values ('$($var)')"

但不是在 SQL Server 代理中作为 CmdExec 作业步骤?尽管照常封闭它。我相信这是单个查询起作用的多个查询

powershell.exe -ExecutionPolicy Bypass -Command {$var = 'dog';Invoke-SqlCmd -ServerInstance 'servername' -Query "insert into DB.dbo.tbl values ('$($var)')"}

TL;DR;

我有一个带有 CmdExec 步骤的 SQL Server 代理作业。我希望分配一个变量,然后在插入语句中使用它。

到目前为止,以下插入将起作用:

powershell.exe -ExecutionPolicy Bypass -Command "Invoke-SqlCmd -ServerInstance 'servername' -Query 'insert into DB.dbo.tbl values (''cat'')'"

这会插入一只猫。现在我需要一条狗,类似于:

powershell.exe -ExecutionPolicy Bypass -Command "$var = 'dog'; Invoke-SqlCmd -ServerInstance 'servername' -Query ""insert into DB.dbo.tbl values (''$($var)'')"""

这里有两个问题,我在其他工作中成功使用的逗号终止符来分隔命令。第二个问题是转义双引号。我知道他们需要将变量处理成字符串。

我尝试过使用双引号以及其中一个 `.我还尝试将变量声明分离到一个服务器代理作业步骤中,并在另一个中使用该变量。

根据下面的@gvee 回答,我将代码放在一个脚本块中,该块在 PowerShell 中完美执行,但不是作为 SQL 代理 CmdExec 作业步骤

powershell.exe -ExecutionPolicy Bypass -Command {$var = '''dog'''; Invoke-SqlCmd -ServerInstance 'servername' -Query "insert into DB.dbo.tbl values ($($var))"}

请注意,我必须对变量进行三次转义,将其作为“狗”插入表中,并包含引号。我从插入语句中删除了单引号,但是我无法让它在服务器代理中作为 CmdExec 步骤运行

【问题讨论】:

  • 请不要用答案更新您的问题。而是将它们作为答案发布。谢谢。
  • 谢谢! 3个报价也对我有用!你拯救了我的一天!

标签: sql-server powershell sql-server-agent


【解决方案1】:

-Command 接受一个 ScriptBlock,所以试一试:

powershell.exe -ExecutionPolicy Bypass -Command {
    Invoke-SqlCmd -ServerInstance "servername" -Query "insert into DB.dbo.tbl values ('cat')"
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    相关资源
    最近更新 更多