【发布时间】:2011-03-17 04:27:34
【问题描述】:
我有两个脚本。一个以服务器列表作为参数调用另一个。第二个查询旨在执行 WMI 查询。当我手动运行它时,它完美地做到了这一点。当我尝试将其作为作业运行时,它会永远挂起,我必须将其删除。
为了篇幅,这里是调用脚本的相关部分:
ProcessServers.ps1
Start-Job -FilePath .\GetServerDetailsLight.ps1 -ArgumentList $sqlsrv,$destdb,$server,$instance
GetServerDetailsLight.ps1
param($sqlsrv,$destdb,$server,$instance)
$password = get-content C:\SQLPS\auth.txt | convertto-securestring
$credentials = new-object -typename System.Management.Automation.PSCredential -argumentlist "DOMAIN\MYUSER",$password
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO')
$box_id = 0;
if ($sqlsrv.length -eq 0) {
write-output "No data passed"
break
}
function getinfo {
param(
[string]$svr,
[string]$inst
)
"Entered GetInfo with: $svr,$inst"
$cs = get-wmiobject win32_operatingsystem -computername $svr -credential $credentials -authentication 6 -Verbose -Debug |
select Name, Model, Manufacturer, Description, DNSHostName, Domain, DomainRole, PartOfDomain,
NumberOfProcessors, SystemType, TotalPhysicalMemory, UserName, Workgroup
write-output "WMI Results: $cs"
}
getinfo $server $instance
write-output "Complete"
作为作业执行,它将永远显示为“正在运行”:
PS C:\sqlps> Start-Job -FilePath .\GetServerDetailsLight.ps1 -ArgumentList DBSERVER,LOGDB,SERVER01,SERVER01
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
21 Job21 Running True localhost param($sqlsrv,$destdb,...
GAC Version Location
--- ------- --------
True v2.0.50727 C:\WINDOWS\assembly\GAC_MSIL\Microsoft.SqlServer.Smo\10.0.0.0__89845dcd8080cc91\Microsoft.SqlServer.Smo.dll
getinfo MSDCHR01 MSDCHR01
Entered GetInfo with: SERVER01,SERVER01
我得到的最后一个输出是“Entered GetInfo with: SERVER01,SERVER01”。如果我像这样手动运行它:PS C:\sqlps> .\GetServerDetailsLight.ps1 DBSERVER LOGDB SERVER01 SERVER01
WMI 查询按预期执行。
我正在尝试确定这是为什么,或者至少是一种从作业中捕获错误的有用方法。
谢谢!
【问题讨论】:
-
您使用的是 Windows XP 吗?后台作业中的 WMI 存在一个已知问题。我在好几个地方都看到过。此外,仅供参考,后台作业不支持 NTLM 以外的任何身份验证。
-
我正在使用 XP。我不知道 WMI 特定问题。我确实遇到了 all 后台作业挂起的问题,但通过删除 SCOM 解决了这个问题。这个已知问题是否记录在任何地方?
-
不确定这是否记录在任何地方。我正在尝试在键入此内容时找到它。
标签: powershell