Get-WMIObject
接受-Credential
参数。您不应该在脚本中以纯文本形式保存凭据,因此您需要提示输入它们。
$creds = get-credential;
(Get-WmiObject -Computer myCompName Win32_Service -Filter "Name='myServiceName'" -credential $creds).InvokeMethod("Stop-Service",$null)
如果您在远程系统上启用了 PSRemoting,则可以在没有 WMI 的情况下执行此操作。
$creds = get-credential;
Invoke-Command -computername myCompName -credential $creds -scriptblock {(get-service -name myServiceName).Stop()};
根据评论更新
由于您将此作为计划作业运行,因此您根本不应该存储或提示输入凭据。将计划作业本身(通过计划任务)配置为在所需的用户帐户下运行,那么以下任一操作应该可以工作:
# Your original code
(Get-WmiObject -Computer myCompName Win32_Service -Filter "Name='myServiceName'").InvokeMethod("Stop-Service",$null)
# If you have remoting enabled
Invoke-Command -computername myCompName -scriptblock {(get-service -name myServiceName).Stop()};