Powershell Script mit Benutzerabfrage
Hallo,
ich würde gerne ein Script als anderer Benutzer ausführen. Sodass beim Starten des Scripts eine Abfrage nach dem Benutzer kommt, wie bei Get-Credentials.
Ich möchte aber nicht eine Extra Verknüpfung oder sowas haben, sondern alles in einem Script.
Dieses hier habe ich schon gefunden, funktioniert nur nicht:
Oder könnte es damit zusammenhängen, dass kein Lokaler sondern ein Domänenbenutzer ist?
ich würde gerne ein Script als anderer Benutzer ausführen. Sodass beim Starten des Scripts eine Abfrage nach dem Benutzer kommt, wie bei Get-Credentials.
Ich möchte aber nicht eine Extra Verknüpfung oder sowas haben, sondern alles in einem Script.
Dieses hier habe ich schon gefunden, funktioniert nur nicht:
# --
$identity = [Security.Principal.WindowsIdentity]::GetCurrent()
$principal = new-object Security.Principal.WindowsPrincipal $identity
$elevated = $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
if ($elevated) {
write-warning "This script should be run elevated. Restarting..."
# restart script as admin, passing in any arguments to the new invocation
Start-Process -credential (get-credential) (join-path $pshome powershell.exe) -ArgumentList (@("-file",
(join-path $psscriptroot $myinvocation.mycommand)) + $args)
exit
}
"Hey, I'm admin. argc: {0}; argv: {1}" -f $args.Length, ($args -join ",")
"Press any key to exit..."
[console]::ReadKey()
#--
Oder könnte es damit zusammenhängen, dass kein Lokaler sondern ein Domänenbenutzer ist?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 267632
Url: https://administrator.de/contentid/267632
Ausgedruckt am: 22.11.2024 um 10:11 Uhr
9 Kommentare
Neuester Kommentar
Hi,
runas sollte deine Anforderung erfüllen.
https://www.google.de/?gws_rd=ssl#q=powershell+runas
Grüße,
Tiberius
runas sollte deine Anforderung erfüllen.
https://www.google.de/?gws_rd=ssl#q=powershell+runas
Grüße,
Tiberius
Hallo Bugger,
wenn es einfach nur darum geht das selbe Script mit "elevated" Rights zu starten geht das so:
Wenn du in einer Domäne bist und der aktuell verwendete User ist kein lokaler Admin bekommst du normalweise eine Eingabeaufforderung von der UAC in der du dich mit deinem gewünschten Account authentifizierst.
(Hinweis: Das Verb "runas" kann immer nur ohne Angabe von Credentials benutzt werden, man muss also eine Shell vorher mit den entsprechenden Rechten starten und darin dann die Powershell mit "runas" "elevaten" s. zweites Script)
Möchtest du bein Start eine extra Eingabeaufforderung bekommen (vor der UAC) mit welchem User das Script "elevated" gestartet werden soll ginge das z.B. so
Wurde hier beides in einer Domainumgebung getestet.
Grüße Uwe
wenn es einfach nur darum geht das selbe Script mit "elevated" Rights zu starten geht das so:
Wenn du in einer Domäne bist und der aktuell verwendete User ist kein lokaler Admin bekommst du normalweise eine Eingabeaufforderung von der UAC in der du dich mit deinem gewünschten Account authentifizierst.
(Hinweis: Das Verb "runas" kann immer nur ohne Angabe von Credentials benutzt werden, man muss also eine Shell vorher mit den entsprechenden Rechten starten und darin dann die Powershell mit "runas" "elevaten" s. zweites Script)
$myWindowsID=[System.Security.Principal.WindowsIdentity]::GetCurrent()
$myWindowsPrincipal=new-object System.Security.Principal.WindowsPrincipal($myWindowsID)
$adminRole=[System.Security.Principal.WindowsBuiltInRole]::Administrator
if (!$myWindowsPrincipal.IsInRole($adminRole)){
start-process "powershell" -Verb "runas" -ArgumentList "-File",$MyInvocation.MyCommand.Definition
exit
}
# Alles was hier kommt wird "elevated" ausgeführt
write-host "Das Script wird mit den erhöhten Rechten des Users: '$($env:USERDOMAIN + "\" + $env:USERNAME)' ausgeführt."
read-host "Drücken sie eine beliebige Taste um forzufahren"
Möchtest du bein Start eine extra Eingabeaufforderung bekommen (vor der UAC) mit welchem User das Script "elevated" gestartet werden soll ginge das z.B. so
param(
[switch]$invoked
)
if (!$invoked.IsPresent){
$cred = Get-Credential
Start-Process "powershell.exe" -Credential $cred -ArgumentList "-File",$MyInvocation.MyCommand.Definition,"-invoked"
exit
}else{
$myWindowsID=[System.Security.Principal.WindowsIdentity]::GetCurrent()
$myWindowsPrincipal=new-object System.Security.Principal.WindowsPrincipal($myWindowsID)
$adminRole=[System.Security.Principal.WindowsBuiltInRole]::Administrator
if (!$myWindowsPrincipal.IsInRole($adminRole)){
start-process "powershell" -Verb "runas" -ArgumentList "-File",$MyInvocation.MyCommand.Definition,"-invoked"
exit
}
}
# Alles was hier kommt wird "elevated" ausgeführt
write-host "Das Script wird mit den erhöhten Rechten des Users: '$($env:USERDOMAIN + "\" + $env:USERNAME)' ausgeführt."
read-host "Drücken sie eine beliebige Taste um forzufahren"
Grüße Uwe
sicher ...
param(
[switch]$invoked
)
if (!$invoked.IsPresent){
$cred = Get-Credential
Start-Process "powershell.exe" -Credential $cred -ArgumentList "-File",$MyInvocation.MyCommand.Definition,"-invoked"
exit
}
# Alles was hier kommt wird unter dem anderen User-Account ausgeführt
write-host "Das Script wird mit den Rechten des Users: '$($env:USERDOMAIN + "\" + $env:USERNAME)' ausgeführt."
read-host "Drücken sie die Enter-Taste um fortzufahren."