$h = "host1.example.com"
$code = {
$(Get-WmiObject -Class "Win32_ComputerSystem" -Namespace "root\cimv2" -ComputerName $h)
}
$timeout = 5
$jobstate = $(Wait-Job -Job ($job = $(Start-Job -ScriptBlock $code)) -Timeout $timeout)
$wmicomobj = $(Receive-Job -Job $job)
Run Code Online (Sandbox Code Playgroud)
为什么上面的代码块会引发以下错误?
无法验证参数“ ComputerName”上的参数。参数为null或
空的。提供一个不为null或为空的参数,然后尝试命令
再次。
+ CategoryInfo:InvalidData:(:) [Get-WmiObject],ParameterBindingValidationException
+ FullyQualifiedErrorId:ParameterArgumentValidationError,Microsoft.PowerShell.Commands.GetWmiObjectCommand
+ PSComputerName:本地主机
在循环获取多个主机的WMI对象时,我想用它来实现超时。但是首先我需要通过作业执行来获得结果。
在脚本的全局范围内定义的变量在脚本块内不可用,除非您使用using限定符:
$code = {
Get-WmiObject -Class "Win32_ComputerSystem" -Namespace "root\cimv2" -ComputerName $using:h
}
Run Code Online (Sandbox Code Playgroud)
或将它们作为参数传递,如下所示:
$code = {
Param($hostname)
Get-WmiObject -Class "Win32_ComputerSystem" -Namespace "root\cimv2" -ComputerName $hostname
}
$jobstate = Wait-Job -Job ($job = $(Start-Job -ScriptBlock $code -ArgumentList $h)) -Timeout $timeout
Run Code Online (Sandbox Code Playgroud)
或像这样:
$code = {
Get-WmiObject -Class "Win32_ComputerSystem" -Namespace "root\cimv2" -ComputerName $args[0]
}
$jobstate = Wait-Job -Job ($job = $(Start-Job -ScriptBlock $code -ArgumentList $h)) -Timeout $timeout
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
154 次 |
| 最近记录: |