仅使用本地管理员用户(使用powershell或/和c#)控制远程计算机上的服务

时间:2014-09-04 14:36:42

标签: c# windows service wmi

我是活动目录中的用户,并且此活动目录外有一台远程计算机。 我想在这台电脑上启动和停止服务。 当然是拥有本地管理员的凭据。

var startService = new Process
{
    StartInfo =
    {
        FileName = "sc.exe",
        Arguments = String.Format("{0} {1} {2}", "\\192.168.0.5", "stop", "TestService"),
        UseShellExecute = false,
        RedirectStandardOutput = true,
        CreateNoWindow = true,
        UserName = "user",
        Password = securePassword,
        Domain = "localhost"
    }
};

try
{
    startService.Start();
}
catch (Exception e)
{
    return false;
}

它引发了一个例外,即瑕疵是错误的。

  

未知用户名或密码错误

我尝试将StartInfo.Domain设置为远程计算机名称,但这也不起作用。

需要一些帮助。

1 个答案:

答案 0 :(得分:0)

远程端

Enable-PSRemoting -Force

客户端

Invoke-Command -ComputerName ServerName -Credential Get-Credential -ScriptBlock {ls c:\}

在ScriptBlock中我可以使用例如Get-Service Command用于控制远程端的服务。

在C#中它会像这样锁定

// Install-Package System.Management.Automation 
var credential = new PSCredential("User", securePassword);

PowerShell ps = PowerShell.Create();
ps.AddCommand("Invoke-Command");
ps.AddParameter("ComputerName", "ComputerName");
ps.AddParameter("Credential", credential);
ps.AddParameter("ScriptBlock", ScriptBlock.Create("Get-Service -Name ServiceName"));

var result = ps.Invoke();

dynamic temp = result.First();
var status = temp.Status;