使用远程Powershell运行空间中的脚本启动安装程序时无法启动服务

时间:2010-09-30 16:31:58

标签: powershell powershell-v2.0

我正在使用带有远程运行空间的powershell在远程计算机上启动安装程序:

隐藏了一些代码,但是你得到了这个jist ......

我在C#中创建了我的PSCredential:

PSCredential pwd = new PSCredential(cred.UserName,PowerShellEngine.GenerateSecurePassword(cred.Password)); ConnectionInfo =新的WSManConnectionInfo( false,cred.HostName,5985,“/ wsmanman”,“http://schemas.microsoft.com/powershell/Microsoft.PowerShell”,pwd); ConnectionInfo.AuthenticationMechanism = AuthenticationMechanism.Default;

创建运行空间,然后执行脚本

        //Load the script
        string script = System.IO.File.ReadAllText(scriptFileName);

        using (Runspace runspace = CreateRunSpace())
        {
            runspace.Open();
            Pipeline pipeline = runspace.CreatePipeline();
            pipeline.Commands.AddScript(script);

            if (parameters != null)
            {
                foreach (KeyValuePair<string, string> parm in parameters)
                {
                    pipeline.Commands[0].Parameters.Add(parm.Key, parm.Value);
                }
            }

            pipeline.Commands.Add("out-default");
            pipeline.Invoke();
        }

脚本......(重要的部分)

$ installStatement = [System.Diagnostics.Process] :: Start($ App,$ Switches) $ installStatement.WaitForExit() “处理退出代码:$ LastExitCode”

这个过程开始很好..最后得到:

MSI(s)(3C:18)[21:06:18:923]:产品:xxxx - 错误1920.Service xxxx无法启动。验证您是否具有足够的权限来启动系统服务。

我已经验证过程运行,因为本地管理员在命令提示符下工作正常使用PSExec。我认为这必须与WSMAN权限或运行空间本身的安全性有关吗?

是否需要设置策略或某些内容以允许powershell运行空间能够在安装程序中启动服务?

谢谢,加文

2 个答案:

答案 0 :(得分:0)

出现WinRM在NETWORK SERVICE帐户下运行,该帐户可能没有启动/停止Windows服务的权限...

我无法将Windows远程管理更改为以本地系统身份运行,因为其他服务(HTTP,RPCSS)依赖于它,并且显然在同一进程下运行)

有没有办法让NETWORK服务能够启动/停止服务?

答案 1 :(得分:0)

WinRM服务应该在网络服务下运行。它将模拟您在运行脚本时设置的任何人。您能否检查一下您是否已应用您创建的凭据,该用户(来自凭证)是否能够启动服务?只需以此用户身份登录并尝试启动一些。

你也可以简化一些事情。使用代码编写Test.ps1以启动服务并运行此代码:

$pass = ConvertTo-SecureString "password" -AsPlainText -Force
$credentials = new-object -typename System.Management.Automation.PSCredential -argumentlist "domain\username", $pass 


Invoke-Command -ComputerName "remoteMachine" -FilePath "Test.ps1" -Credential $credentials -ArgumentList $parameters  

如果所有设置都正确,您应该开始服务。

另一方面,我认为你以非常复杂的方式完成相对简单的任务。