У меня есть скрипт Powershell, который требует повышения прав администратора для настройки общего файлового ресурса Azure, среди прочего. Последняя команда скрипта использует New-PSDrive
для сопоставления общего файлового ресурса с буквой диска. Я ожидаю, что новая буква диска будет доступна из проводника Windows. Я знаю, что использование New-PSDrive
из повышенного контекста сопоставляет диск только в этом контексте, поэтому он недоступен для моей учетной записи пользователя.
Как выполнить скрипт/процесс Powershell от имени текущего пользователя из скрипта с повышенными привилегиями?
решение1
Вы не можете изменить контекст пользователя, не предоставив учетные данные пользователя. Вы можете получить вошедшего в систему пользователя достаточно легко, но вы никогда не получите его пароль, пока он его не введет.
Invoke-Command -FilePath "yourPath\yourScript.ps1" -ComputerName yourServer -Credential Get-Credential
Во-вторых, если вы запускаете приложение удаленно, пользователь никогда этого не увидит, поскольку оно может быть запущено только в исходном контексте, в котором вы находитесь.
PowerShell изначально не позволяет вам сделать это, поскольку это граница безопасности Windows. Если вам действительно нужно это сделать, попробуйте использовать MS SysInternals PSExec.
Или попробуйте выполнить что-то из запланированной задачи.
решение2
Я думал об этом неправильно, так как по умолчанию я запускаю все как администратор. Я разделил скрипт на два отдельных скрипта, один для кода, требующего прав администратора, и один, требующий прав пользователя. Я вызываю скрипт прав пользователя, который проверяет и выдает ошибки, если он находится в контексте администратора. Затем я могу выполнить скрипт администратора из пользовательского скрипта в его собственном приглашении с повышенными привилегиями, подождать, и я вернусь в контекст пользователя.