使用WMI和Start-Job启动和停止远程服务

时间:2014-02-28 20:29:43

标签: powershell wmi

为什么这样做:

$bits = Get-WmiObject -Class win32_service -ComputerName computer -Credential $creds | 
? name -Like "bits*"

$bits.StopService()

但是有了这个

$bits = Get-WmiObject -Class win32_service -ComputerName computer -Credential $creds | 
? name -Like "bits*"

$stopbits = Start-Job {$bits.StopService()}

我收到错误“你无法在空值表达式上调用方法”

我正在尝试编写一个脚本,它将按设定的顺序停止一组服务。我只有WMI可供我使用。通过使用Start-Job我想使用

$stopbits = Start-Job {$bits.StopService()}
Wait-Job -Id $stopbits.id 

在进入下一个服务之前。我是一名知识渊博的初学者,所以我可能会把这一切都搞错了。我很感激任何帮助让这个工作。谢谢!

2 个答案:

答案 0 :(得分:0)

您需要调用名为StopService的WMI方法来执行作业。 这样的事情。

$stopbits = Start-Job {$bits.InvokeMethod("StopService",$null)}

再想一想,上面的代码也不会起作用,因为$ bits对象没有在本地范围内定义。 所以你需要这样做。

$global:creds = Get-credential
$stopbits = Start-Job {
$bits = Get-WmiObject -Class win32_service -ComputerName $computer -Credential $global:creds | ? name -Like "bits*"
$bits.StopService()
}

答案 1 :(得分:0)

$ bits变量未在后台作业的范围内定义。