Я создаю сценарий PowerShell, который выполняет автоматическую настройку развертывания новых компьютеров. Я в ситуации, когда я хочу запустить исполняемый файл как обычный пользователь без прав администратора из экземпляра консоли PowerShell с повышенными правами. Причина в том, что если я запускаю из командной строки / сценария с повышенными правами, исполняемый файл генерирует ошибку. Вот структура команды:
Start-Process -FilePath (${Env:CommonProgramFiles(x86)} + "\sample.exe") -ArgumentList "/PRODUCT:sample", "/VERSION:2.0", "/MODE:1"
Я немного поискал и нашел здесь противоположность тому, что мне нужно (не администратор для администратора) https://technet.microsoft.com/en-us/library/hh849848.aspx но я только видел RunAs
поднять до администратора.
Настроить:
поскольку psexec
не предлагал решения для подавления входа в систему, в итоге я начал процесс следующим образом:
$username = Read-Host "Please enter in a valid username "
$password = Read-Host "Please enter in a the account password " -AsSecureString
Start-Process -Credential (New-Object System.Management.Automation.PSCredential($username, $password)) -FilePath (${Env:CommonProgramFiles(x86)} + "\sample.exe") -ArgumentList "/PRODUCT:sample", "/VERSION:2.0", "/MODE:1"
Это не решает проблему полностью, но, по крайней мере, пользователь может оставаться в скрипте.
В своих скриптах я использую psexec в тех ситуациях.
Вы должны указать имя пользователя и пароль для другой учетной записи, а также исполняемый файл, который затем запускается от имени указанного пользователя.
Это не чистый PowerShell, но мне достаточно. Возможно, сценарий PowerShell сделает то же самое psexec
делает. Но если вы не узнаете, это должно решить вашу проблему.
Это зависит от того, в чем проблема. Если вы вообще не работаете в контексте пользователя, например, под учетной записью SYSTEM, вам может потребоваться запуск от имени конкретного пользователя, что обычно означает указание имени пользователя и пароля, что часто является проблематичным.
Если проблема в том, что в настоящее время у вас есть права администратора, но вам нужно запустить что-то без этих прав администратора, это должно быть возможно с помощью PSExec или аналогичные методы без необходимости ввода имени пользователя и пароля.
psexec -accepteula -l <CMD>
-l
Запустить процесс как ограниченный пользователь (удаляет группу администраторов и разрешает только права, назначенные группе пользователей). В Windows Vista процесс выполняется с низким уровнем целостности.
Должна быть возможность вызвать PSExec в PowerShell и заставить PSExec вызывать исходное приложение. Это также можно сделать напрямую через PowerShell.
Это также можно сделать с помощью PSExec без необходимости ввода имени пользователя и пароля, выполнив что-то в сеансе целевого пользователя, если он уже вошел в систему.
psexec -accepteula -i <session> <CMD>