2017-01-30 6 views
2

Ich brauche ein Symbol, um auf den Desktop zu klicken, der eine PowerShell-Konsole startet, die als ein anderer Benutzer zur Eingabe eines Kennworts in einer erhöhten Shell ausgeführt wird.PowerShell-Desktop-Symbol zum Ausführen von erhöhten anderen Benutzer Shell

Hier ist, was ich versucht habe:

#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 

All das, wenn ich das Icon mit dem Namen something.ps1 klicken bringt einen Blitz einer Konsole mit einem Fehler und schließt.

Ich habe Pause hinzugefügt, um zu versuchen und den Fehler abzufangen, aber das Fenster wird durch Klicken auf das Symbol nicht pausieren. Aber wenn einer von diesen in ISE ausgeführt wurde, gibt es keinen Fehler und eine Konsole wird ordnungsgemäß im Kontext der anderen Benutzer angezeigt, wenn ich whoami ausführen.

Ich vermute, das Problem ist in UAC, da die Befehle in ISE arbeiten, aber nicht vom Desktop? Oder ist ein klickbares Icon für dieses Wunschdenken?

+0

Wrap es in "versuchen, fangen, endlich", Host-Druckbefehle in "fangen" und Pause in "endlich". Du wirst deine Ausnahme bekommen. Ihre Pause hat nicht funktioniert, da die Ausnahme die Ausführung des Threads beendet, bevor Sie sie anhalten. – ArtK

+0

'psexec.exe' aus Sysinternal Suite ist in der Regel die beste Wette, wenn Sie versuchen, als andere Benutzer zu laufen. – BenH

Antwort

3

Ihr Skript schlägt fehl, weil -Verb runAs und -Credential nicht zusammenarbeiten (-Verb und -Credential in verschiedenen Parametersätzen). Sie können ähnliche Probleme finden, die here erwähnt werden.

Sie können so etwas wie dies versuchen, wenn Sie dies in Powershell erreichen wollen sich aber die UAC Prompt wird dies angezeigt (eingecheckt 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 }' 

oder können Sie psexec verwenden mit -h Parameter für erhöhten Zugriff.

1

Nun, ich habe tatsächlich das zu arbeiten, obwohl es nicht konventionell ist und ohne die try/catch Anweisung funktioniert es aus irgendeinem Grund nicht. Auch musste ich eine Verknüpfung erstellen, die auf die Datei ps1 zeigt.

script.ps1:

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

Und die Verknüpfung auf C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -command "& pathToPs1\script.ps1" (Start in: C:\Windows\System32\WindowsPowerShell\v1.0)

Mit diesen beiden gekoppelt alles funktionierte und -Credential und -Verb zusammen arbeiten, das war Problem nicht - probieren Sie es in ISE - keine Fehler. Es scheint eine Pause in UAC und klicken Sie auf einen Link vom Desktop, obwohl das ist spekulativ nur eine fundierte Schätzung, wie die Auflösung funktioniert.

Es ist nicht schön, aber hoffe, das hilft jemand anderem.

Kredit für meine Antwort war eine Kombination aus this link und this link und einem Kommentar zu try und catch der Fehler, dank Ihnen auch für die Aussage try/catch hindeutet.

Verwandte Themen