我遇到一个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
答案 0 :(得分:0)
在您的脚本中途,$scripts
是否正确填充了Invoke-Sqlcmd
变量?
如果是这样,我认为你应该能够在最后两个命令上取消Where-Object {$_}
。 Where-Object
用作过滤器,在这两种情况下,它似乎不会过滤任何内容。您应该可以直接将$instanceName
和$results
直接导出到csv。