PowerShell: уже запущен другой экземпляр Start-Process

Есть 2 сценария PowerShell, которые запускаются при запуске, 1 находится под моим контролем, а другой — вне моего контроля.

Оба наших скрипта используют Start-Process. Странная проблема заключается в том, что если оба наших процесса запуска выполняются одновременно, я получаю следующую ошибку из своего сценария:

Start-Process : This command cannot be run due to the error: An instance of the service is already running.

Есть ли способ узнать, запущен ли уже другой «Start-Process»? Я знаю о «Get-Process», но показывает только работу PowerShell, а не то, какой командлет запущен в данный момент.

Я не сторонник НЕ использования Start-Process.

В качестве временного обходного пути я сказал своему скрипту спать в течение 60 секунд, но предпочел бы ЗНАТЬ, когда другой процесс запуска будет выполнен.

Вот мой код:

$pw = ConvertTo-SecureString -AsPlainText -Force -String "myPassword"
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "Administrator",$pw

$psArgList = "-ExecutionPolicy Bypass","-file"
$psArgList += $args

Start-Process powershell.exe -Wait -Credential $cred -ArgumentList $psArgList

Это позволяет мне запускать другой сценарий PowerShell с полными привилегиями: от имени администратора с ExecutionPolicy в качестве обхода.


person Vippy    schedule 23.09.2014    source источник
comment
Я не уверен, что это проблема другого сеанса, использующего Start-Process, поскольку два сеанса пытаются запустить службу одновременно. Что пытается сделать ваш стартовый процесс? Не могли бы вы показать соответствующий код?   -  person TheMadTechnician    schedule 24.09.2014
comment
Спасибо за комментарий. Обновлен пост, чтобы включить мой код.   -  person Vippy    schedule 24.09.2014


Ответы (1)


Я хотел бы предложить альтернативу. Если вы запускаете это при входе в систему, почему бы не запустить его из планировщика заданий и не запустить его как учетную запись, для которой вы хотите использовать учетные данные? При создании задачи вы захотите установить несколько вещей.

На вкладке «Общие»

  • выберите учетную запись, под которой вы хотите запустить задачу
  • скажите ему «Запускать независимо от того, вошел ли пользователь в систему или нет»
  • выберите «Выполнить с наивысшими привилегиями»

На вкладке «Триггеры»

  • Создайте триггер, чтобы даже происходило «При входе в систему», и выберите, какие пользователи, или оставьте это для любого пользователя (по умолчанию)

На вкладке Действия

  • Создать действие
  • Для приложения просто введите powershell.exe (используйте полный путь, если хотите)
  • Введите свои аргументы в поле аргументов, например "-ExecutionPolicy Bypass -File"

Затем просто нажмите ОК. Вам будет предложено ввести пароль для учетной записи, под которой вы пытаетесь запустить сценарий, и Windows будет управлять им оттуда.

person TheMadTechnician    schedule 23.09.2014
comment
Хорошая идея, попробую и отчитаюсь. Спасибо. - person Vippy; 24.09.2014
comment
Спасибо, это отличная альтернатива. Все еще хотел бы я знать, почему 2 Start-Process не могут запускаться одновременно с помощью ключа Run reg. - person Vippy; 24.09.2014
comment
Я все еще не уверен, что они не могут, и подозреваю, что проблема заключается в процессе, который вы пытаетесь запустить. - person TheMadTechnician; 24.09.2014