我正在使用带有远程运行空间的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运行空间能够在安装程序中启动服务?
谢谢,加文
答案 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
如果所有设置都正确,您应该开始服务。
另一方面,我认为你以非常复杂的方式完成相对简单的任务。