使用 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)
我建议使用 *-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 命令,但现在来自域中的用户帐户与我登录桌面时使用的帐户不同。
谢谢
我想使用 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)
我建议使用 *-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 命令,但现在来自域中的用户帐户与我登录桌面时使用的帐户不同。
谢谢