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

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

Оба наших скрипта используют 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 с полными привилегиями: как Admin с ExecutionPolicy, как Bypass.

1 ответ

Решение

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

На вкладке "Общие"

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

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

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

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

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

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

Другие вопросы по тегам