2014-09-23 6 views
0

Есть 2 сценария PowerShell, которые запускаются при запуске, 1 находится в моем контроле, а другой - вне моего контроля.PowerShell: еще один экземпляр Start-Process уже запущен

В обоих наших сценариях используется Start-Process. Странный вопрос, если оба нашего 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 как байпас.

+0

Я не уверен, что это проблема другой сессии с использованием Start-Process, поскольку две сессии пытаются одновременно запустить службу. Каков ваш старт-процесс? Не могли бы вы показать соответствующий код? – TheMadTechnician

+0

Спасибо за комментарий. Обновлено сообщение, чтобы включить мой код. – Vippy

ответ

1

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

На закладке Общие

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

На Триггеры Tab

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

На Actions Вкладка

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

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

+0

Хорошая идея, я попробую и отправлю отчет. Благодарю. – Vippy

+0

Спасибо, это отличная альтернатива. Еще хотелось бы знать, почему 2 «Start-Process» не могут одновременно запускаться из Run reg-ключа. – Vippy

+0

Я все еще не убежден, что они не могут и подозревают, что именно этот процесс вы пытаетесь начать, и это проблема. – TheMadTechnician