【问题标题】:Using sc.exe to manage remote host services with explicit user account?使用 sc.exe 管理具有显式用户帐户的远程主机服务?
【发布时间】:2015-01-13 10:39:25
【问题描述】:

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

sc \\hostname query service_name

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

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

sc username:password \\hostname query service_name

这可能吗? sc 似乎隐式使用当前的 Windows 身份验证,我不确定如何轻松切换,或者实际上是什么在进行此身份验证(因此在哪里可以找到如何更改当前用户为单个具体命令)。

感谢您的帮助

【问题讨论】:

    标签: windows powershell cmd windows-authentication


    【解决方案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
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用 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 = gwmi win32_service -computername hostname | ? { $_.name -eq "service_name" } 也需要对某些描述进行身份验证?从那行我得到了响应NotSpecified: (:) [Get-WmiObject], UnauthorizedAccessException,所以它甚至没有使用所需的用户名/密码到达 .change 方法。不过谢谢
      • 您需要使用在远程计算机上具有管理员权限的帐户在管理员提升的控制台中运行脚本才能工作
      • 啊,这就是它的症结所在 - '使用在远程计算机上具有管理员权限的帐户' - 你的意思是我登录到本地 Windows 的帐户(并从中运行 powershell)对?我想说“对于这个命令,我想以 X:Y 身份登录到本地 Windows”,其中 X:Y 对远程计算机具有管理员访问权限,但我通常使用的本地 Windows 帐户没有..
      • tbh 你在远程使用sc 时会遇到同样的问题,你仍然需要以正确的权限运行它。如果您想以具有远程计算机权限的其他用户身份登录,同时在本地使用其他用户,您可以尝试使用runas.exe
      • runas.exesc 的组合是我一直在寻找的,我现在可以在我的域中以不同用户的身份管理远程服务 - 谢谢!
      【解决方案3】:

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

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

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

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

      谢谢

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-09
        • 2017-04-29
        • 2020-05-22
        • 1970-01-01
        • 2016-08-05
        • 2014-06-23
        • 1970-01-01
        • 2018-11-08
        相关资源
        最近更新 更多