我有一个PowerShell模块在PowerShell窗口中运行良好,但是当我将相同的确切代码放入SQL Server代理作业步骤并尝试执行它时,它失败并显示以下消息。SQL代理 - PowerShell步骤“语法错误”
Date 27.6.2015 1:00:00
Log Job History (JobName)
Step ID 1
Server ServerName
Job Name JobName
Step Name Step1
Duration 00:00:00
Sql Severity 0
Sql Message ID 0
Operator Emailed
Operator Net sent
Operator Paged
Retries Attempted 0
消息
无法启动的步骤1的执行(原因:线路(46):语法错误)。 该步骤失败。
下面是有问题的代码
$text = $table | Where-Object {$_.Pending_Messages -gt $threshold} | Out-String
$html = "<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Strict//EN"" ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd""><html xmlns=""http://www.w3.org/1999/xhtml""><head>$style</head><body>$name <br />$warning<br /><br /><table><tr><td>Pending_Messages</td><td>Transaction Profile ID</td><td>Description</td><td>name</td><td>Last Activity</td><td>Address</td><td>Minimum Sent Time</td><td>Awake</td></tr>"
foreach ($Row in $table.Rows) {
if ($($Row[0]) -gt $threshold) { # <--- This is line 46
$ToSend = 1
write-host "value is : $($Row[0])"
$html += "<tr><td>" + $row[0] + "</td><td>" + $row[1] + "</td><td>" + $row[2] + "</td><td>" + $row[3] + "</td><td>" + $row[4] + "</td><td>" + $row[5] + "</td><td>" + $row[6] + "</td><td>" + $row[7] + "</td></tr>"
#break
}
}
出了什么问题?
@authprivate:请不要编辑并将非代码文本清晰地更改为“此表单”。例如,代码刻度应该仅用于代码,不适用于'powershell'。 – usr2564301
怀疑是有问题的东西,但是如果($($ Row $ [$] $ threshold)''可能只是'if($ Row [0] -gt $ threshold)''。可能'$ Row [0]'被视为一个字符串? 'if([int]($ Row [0])-gt $ threshold)' – Matt
我推荐使用'$ table.Rows |其中{$ _ [0] -gt $ threshold} | Foreach-Object {$ Row = $ _; <#循环迭代代码#>}'。不知道它是否可以解决问题,但是'foreach'关键字是同步的,而管道不是。 – Eris