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

时间:2015-01-13 10:39:26

标签: windows powershell cmd windows-authentication

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

sc \\hostname query service_name

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

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

sc username:password \\hostname query service_name

这可能吗? sc似乎隐含地使用当前的Windows身份验证,并且我不确定如何轻松地切换它,或者实际上正在执行此身份验证(因此在哪里查找如何更改当前用户执行单个特定命令。)

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

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

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

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
}

答案 1 :(得分:0)

您可以使用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

答案 2 :(得分:0)

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

它似乎从不同的安全上下文运行.bat,所以在我的情况下我执行:

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

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

由于