0

我想使用 powershell 2.0 版(Windows Server 2008)在远程机器上启动/停止 apache 和 mysql 服务。我发现远程执行的语法如下:

(Get-WmiObject -Computer myCompName Win32_Service -Filter "Name='myServiceName'").InvokeMethod("Stop-Service",$null)

但是我还必须为此执行提供凭据(DOMAIN_NAME\USERNANE 和 PASSWORD)。我是 powershell 新手,需要正确语法的帮助(示例将易于理解和实现)。

4

1 回答 1

3

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()};
于 2013-09-05T13:21:26.927 回答