SQL Server代理中的Powershell作业

时间:2014-09-25 13:14:23

标签: sql sql-server powershell smo

我遇到一个PowerShell作业在运行时返回结果集时遇到问题,它运行成功但没有结果。我正在对服务器列表运行它。如果我针对我知道可以连接的特定服务器运行脚本,它运行正常并给出结果。

这是运行powershell的sql server代理中的脚本。我使用SMO对象吗?我试过使用try / catch(作业失败),我试图添加-ErrorAction"继续"到脚本(作业失败),使用smo解析服务器名称以使用if语句(作业成功)但没有结果。这是脚本:

$ErrorActionPreference = "Continue";

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | Out-Null

$instanceNameList = Get-Content "c:\Scripts\InPutFiles\servers.txt";

$results = @()  

foreach($instanceName in $instanceNameList)
{
$serverObject = New-Object Microsoft.SqlServer.Management.Smo.Server($instanceName)
$serverName = $serverObject.ComputerNamePhysicalNetBIOS;

if($serverName -ne $null) {
$results += Invoke-Sqlcmd -Query "

(My Query is in here!)

" -ServerInstance $instanceName.Name}

$instanceName| Where-Object {$_} | Export-csv 'C:\scripts\HungJobs_UnabletoConnect.csv' -NoTypeInformation 
}
$results| Where-Object {$_} | Export-csv 'C:\scripts\HungJobs.csv' -NoTypeInformation

1 个答案:

答案 0 :(得分:0)

在您的脚本中途,$scripts是否正确填充了Invoke-Sqlcmd变量?

如果是这样,我认为你应该能够在最后两个命令上取消Where-Object {$_}Where-Object用作过滤器,在这两种情况下,它似乎不会过滤任何内容。您应该可以直接将$instanceName$results直接导出到csv。