2017-01-30 6 views
2

Мне нужен значок, чтобы щелкнуть на рабочем столе, который запустит консоль PowerShell, запущенную как другой пользователь, запрашивающий пароль, в увеличенной оболочке.Значок рабочего стола PowerShell для запуска повышенной пользовательской оболочки

Вот что я пробовал:

#1 
Start-Process powershell.exe -Credential "domain\user" -verb runAs 

#2 
Start-Process powershell.exe -Credential "domain\user" -NoNewWindow -ArgumentList "Start-Process powershell.exe -Verb runAs" 

#3 
$username = "domain\user" 
$password = 'the real deal password' 

$securePassword = ConvertTo-SecureString $password -AsPlainText -Force 
$credential = New-Object System.Management.Automation.PSCredential $username, $securePassword 
Start-Process powershell.exe -Credential $credential -verb runAs 

Все это, когда я нажимаю на значок с именем something.ps1 вызывает вспышку консоли с ошибкой и закрывается.

Я добавил паузу, чтобы попытаться поймать ошибку, но окно не остановится, щелкнув значок. Но когда какой-либо из них выполнялся в ISE, ошибки нет, и консоль должным образом появляется в контексте других пользователей при запуске whoami.

Я предполагаю, что проблема в UAC, поскольку команды работают в ISE, но не с рабочего стола? Или это кликабельный значок для этого принятия желаемого за действительное?

+0

Оберните его в 'try, catch, finally', поместите команды печати на ходу в' catch' и остановитесь в 'finally'. Вы получите свое исключение. Ваша пауза не работала, потому что исключение убивает выполнение нити, прежде чем приостанавливать его. – ArtK

+0

'psexec.exe' из пакета Sysinternal обычно является лучшим выбором при попытке запуска в качестве других пользователей. – BenH

ответ

3

Ваш сценарий не удается, потому что -Verb runAs и -Credential не будут работать вместе (-Verb и -Credential находятся в разных наборах параметров). Вы можете найти похожие проблемы, упомянутые here.

Вы можете попробовать что-то вроде этого, если вы хотите сделать это в самом PowerShell, но UAC подсказка будет отображаться для этого (проверено на Win 10):

$securePassword = ConvertTo-SecureString '[email protected]' -AsPlainText -Force 
$credential = New-Object System.Management.Automation.PSCredential "username", $securePassword 
Start-Process powershell -Credential $credential -ArgumentList '-noprofile -command &{ Start-Process powershell -verb runas }' 

или вы можете использовать psexec с параметром -h для повышенного доступа.

1

Ну, я действительно получил это, чтобы работать, хотя это не является обычным явлением и без инструкции try/catch. По какой-то причине это не работает. Также мне пришлось создать ярлык, указывающий на файл ps1.

script.ps1:

try{ 
    Start-Process powershell.exe -Credential "domain\user" -ArgumentList “Start-Process powershell.exe -Verb runAs” 
} Catch { 
    Write-host "Hello" 
} 

И Сочетания указывает на C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command "& pathToPs1\script.ps1" (начало в: C:\Windows\System32\WindowsPowerShell\v1.0)

С этими двумя в сочетании все работало и -Credential и -Verb работают вместе, это не проблема - попробуйте в ISE - нет ошибок. Кажется, что это перерыв в UAC и щелчок по ссылке с рабочего стола, хотя это спекулятивное просто просвещенное предположение о том, как работает разрешение.

Это не очень, но надеюсь, что это поможет кому-то другому.

Кредит на мой ответ был комбинацией this link и this link и комментарий к try и catch ошибка, спасибо Вам, а также за предложение о try/catch.