Не удается запустить службу при запуске установщика со сценарием из удаленного пространства выполнения Powershell - PullRequest
0 голосов
/ 30 сентября 2010

Я запускаю установщик на удаленном компьютере, используя 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 могло запускать службы в программе установки?

Спасибо, Гэвин

Ответы [ 2 ]

0 голосов
/ 01 ноября 2011

Сервис 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  

Если все настройки верны, вам следует запустить службу.

Кстати, мне кажется, что вы выполняете относительно простую задачу очень сложным способом.

0 голосов
/ 30 сентября 2010

Похоже, что WinRM работает под учетной записью NETWORK SERVICE, которая, вероятно, не имеет разрешения на запуск / остановку служб Windows ...

Я не могу изменить удаленное управление Windows для запуска в качестве локальной системы, поскольку другие службы (HTTP, RPCSS) зависят от него и, очевидно, работают под тем же процессом)

Есть ли способ предоставить службе NETWORK возможность запускать / останавливать службы?

...