Я запускаю установщик на удаленном компьютере, используя powershell с удаленным пространством выполнения:
некоторый код скрыт, но вы получите jist ...
Я создаю свой PSCredential в C #:
PSCredential pwd = новый PSCredential (cred.UserName, PowerShellEngine.GenerateSecurePassword (cred.Password));
ConnectionInfo = новый WSManConnectionInfo (
false, cred.HostName, 5985, "/ wsman", "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 (3C: 18) [21: 06: 18: 923]: Продукт: xxxx - Ошибка 1920. Служба xxxx не запустилась. Убедитесь, что у вас достаточно прав для запуска системных служб.
Я убедился, что процесс запускается, так как локальный администратор, который работает нормально из командной строки, использует PSExec. Я предполагаю, что это должно иметь отношение к разрешениям WSMAN или безопасности, обернутой вокруг самого пространства выполнения?
Существует ли какая-либо политика или что-то, что необходимо настроить, чтобы пространство выполнения PowerShell могло запускать службы в программе установки?
Спасибо, Гэвин