Приложение PowerShell Remote Invoke-Command Start-Process сразу закрывается после запуска - PullRequest
0 голосов
/ 11 февраля 2012

Я работаю над сценарием для удаленного уничтожения двух процессов, удаления некоторых папок и запуска службы в качестве приложения. В конечном итоге это будет развернуто для работы на нескольких серверах, но в настоящее время я тестирую его на одном сервере. Все отлично работает, за исключением последнего шага, который заключается в запуске удаленного сервиса (который запускается как приложение с использованием аргумента -cl из-за некоторых проблем совместимости с ним, выполняющимся как сервис). Приложение запускается через сценарий, но сразу же выключается, когда сценарий переходит к следующему шагу. Я абсолютный новичок, так что я довольно много копал, но мне не повезло найти решение. Кажется, что мне может понадобиться запустить процесс в новом пространстве выполнения, но мне не повезло найти хорошее руководство по noob для этого.

Также скрипт работает так же, как и при локализации и запуске на компьютере.

Вот что у меня есть

$a = Get-ChildItem "\\TestMachine\c$\DataFiles"

$pass = cat "C:\cred.txt" | convertto-securestring 

$mycred = new-object -typename System.Management.Automation.PSCredential -argumentlist "username",$pass

if ($a.Count -gt 10)
{
Invoke-Command -ComputerName TestMachine -cred $mycred -scriptBlock {stop-process -name TestProcess -force -EA SilentlyContinue}

Invoke-Command -ComputerName TestMachine -cred $mycred -scriptBlock {stop-process -name Winword -force -EA SilentlyContinue}

Get-ChildItem -Path \\TestMachine\c$\WordDocs -Recurse -EA SilentlyContinue | Where-Object {$_.PsIsContainer} | Remove-Item -Recurse -Force -EA SilentlyContinue

Invoke-Command -ComputerName TestMachine -cred $mycred -scriptBlock {Start-Process "C:\Program Files (x86)\Test\TestUploadManager\TestUploadManager.exe" -Verb Runas -ArgumentList -cl}

echo "Success: TestMachine Was successfully reset"
}

else

{
echo "Failed: Reset was not necessary"
}

exit

Ответы [ 5 ]

1 голос
/ 13 февраля 2012

Вы можете попытаться открыть удаленный сеанс с Enter-PSSession, а затем использовать командлет Start-Process без Invoke-Command

Вы также можете запустить программу следующим образом & "C:\Program Files (x86)\Test\TestUploadManager\TestUploadManager.exe" -cl (в рамках удаленного сеанса)

Наконец, вы должны выйти из сеанса с Exit-PSSession

Другая возможность - запустить скрипт «локально». Напишите сценарий, как если бы вы запускали его на локальной машине. Скопируйте его в общедоступный ресурс. Затем используйте метод удаленного взаимодействия для запуска сценария на компьютере.

1 голос
/ 31 декабря 2014

Решение, предложенное Томом, работает для меня.Вот команды, которые я использовал:

  New-PSSession -computername TestMachine
  Start-Process yourservice.exe
  Exit-PSSession

Обязательно используйте Exit-PSSession, а не Remove-PSSession, чтобы процесс yourservice.exe оставался активным после выхода из сеанса.

0 голосов
/ 09 августа 2016

Это решение WMI лучше всего работает для меня: https://social.technet.microsoft.com/Forums/scriptcenter/en-US/ead19612-5e7b-4012-8466-0d650232c7a5/invokecommand-and-startprocess?forum=ITCG - Адам Дрисколл (указывает на ту же ссылку)

Использование:

([WMICLASS]"\\localhost\ROOT\CIMV2:win32_process").Create("something.exe argument1Here")

Вместо:

Start-Process
0 голосов
/ 28 января 2016

У меня была точно такая же проблема. Получил это, чтобы работать чисто, с комбинацией [WMICLASS] 's create() и Start-Process.

Проверьте мой ответ здесь

0 голосов
/ 11 февраля 2012

В вызове Start-Process попробуйте использовать параметр -Wait.

...