使用 sc.exe 来管理具有显式用户帐户的远程主机服务?

Using sc.exe to manage remote host services with explicit user account?

我想使用 sc 通过 cmd(或 powershell)管理远程机器上的服务,例如

sc \hostname query service_name

我需要使用特定的用户帐户来建立此连接,据我所知,我可以通过以用户身份登录我的工作站并从该上下文 运行 cmd 来实现。

但是,我想在命令行中指定要使用的帐户,例如:

sc username:password \hostname query service_name

这可能吗? sc 似乎隐含地使用了当前的 windows-authentication,我不确定如何轻松切换它,或者实际上不知道这个身份验证是做什么的(因此在哪里可以找到如何为单个特定命令更改当前用户)。

感谢您的帮助

您可以使用 PowerShell 和 WMI 远程执行此操作:

$service = gwmi win32_service -computername hostname | ? { $_.name -eq "service_name" }
$service.change($null,$null,$null,$null,$null,$false,"username","password",$null,$null,$null)

查看 msdn reference

我建议使用 *-Service cmdlet 而不是 sc.exe

PS C:\> <b>Get-Command -Noun Service | select Name</b>

Name
----
Get-Service
New-Service
Restart-Service
Resume-Service
Set-Service
Start-Service
Stop-Service
Suspend-Service

您可以使用 Invoke-Command 来 运行 它们在具有不同凭据的远程主机上:

$cred = Get-Credential

Invoke-Command -Computer server -Credential $cred -ScriptBlock {
  Get-Service
}

除了已经提供的很好的答案之外,我发现的另一种方法是使用优秀的工具 CPAU(它可能在幕后做一些类似于其他答案的事情)。

似乎 运行 来自不同安全上下文的 .bat,所以在我的例子中我执行:

.\CPAU\CPAU.exe -u DOMAIN\USERNAME-p PASSWORD -k -ex ".\restart_service.bat" > null

其中 restart_service.bat 使用常规 sc 命令,但现在来自域中的用户帐户与我登录桌面时使用的帐户不同。

谢谢