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 будет управлять им оттуда.