worker26
Goto Top

PowerShell Datei mit Doppelklick als Admin ausführen

Guten Tag face-smile

Wie kann ich eine PowerShell Datei mit Doppelklick als Administrator ausführen?
Es geht darum, dass andere, welche dieses Programm Doppelklicken, es automatisch mit Adminrechten ausführen.

mfg
Worker26

Content-Key: 665319

Url: https://administrator.de/contentid/665319

Ausgedruckt am: 28.03.2024 um 10:03 Uhr

Mitglied: schicksal
schicksal 01.04.2021 um 10:25:21 Uhr
Goto Top
Mitglied: TK1987
Lösung TK1987 01.04.2021 aktualisiert um 10:45:22 Uhr
Goto Top
Moin,

Powershell-Skripte ausführen geht am einfachsten folgendermaßen:

1) Datei als .ps1-Datei abspeichern.
2) Von der Datei eine Verknüpfung machen (Rechtsklick > kopieren und dann Rechtsklick > Verknüpfung einfügen)
3) In den Verknüpfungseigenschaften sollte bei "Ziel" bereits der Pfad zum ps1-Skript stehen. Vor diesem musst du noch powershell -EP ByPass -File ergänzen. Vollständig sollte die Zeile dann so aussehen:
powershell -EP ByPass -File "C:\Pfad\zum\Skript.ps1"
Zudem kannst du in den Eigenschaften unter Registerkarte Verknüpfung dann unter "Erweitert..." auch "Als Administrator ausführen" anhaken.
Ausgeführt wird dann immer die Verknüpfung

Gruß Thomas
Mitglied: chkdsk
chkdsk 01.04.2021 um 10:38:23 Uhr
Goto Top
Einfach an den Anfang deines Skripts einfügen
param([switch]$Elevated)

function Test-Admin {
    $currentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent())
    $currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
}

if ((Test-Admin) -eq $false)  {
    if ($elevated) {
        # tried to elevate, did not work, aborting
    } else {
        Start-Process powershell.exe -Verb RunAs -ArgumentList ('-noprofile -noexit -file "{0}" -elevated' -f ($myinvocation.MyCommand.Definition))  
    }
    exit
}

write-host "running with full privileges" -foreground "green"  
Mitglied: Worker26
Worker26 01.04.2021 um 10:51:00 Uhr
Goto Top
Hi,
Wenn ich das mit der Verknüpfung mache, kommt immer noch der selbe Fehler.

Hacke ich "als Admin ausführen" in der Verknüpfung an, wird es nicht einmal ausgeführt. Dann schließt sich das Fenster direkt.

Gruß Worker26
unbenannt
Mitglied: Worker26
Worker26 01.04.2021 um 10:53:57 Uhr
Goto Top
Hallo @chkdsk,

auch wenn ich das einfüge, schließt sich das Fenster direkt, nachdem ich akzeptiert habe das Änderungen vorgenommen werden dürfen.
Mitglied: chkdsk
chkdsk 01.04.2021 um 10:55:17 Uhr
Goto Top
Dann zeige doch mal deinen Code her, den du schon hast.
Mitglied: Worker26
Worker26 01.04.2021 um 10:58:24 Uhr
Goto Top
param([switch]$Elevated)

function Test-Admin {
    $currentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent())
    $currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
}

if ((Test-Admin) -eq $false)  {
    if ($elevated) {
        # tried to elevate, did not work, aborting
    } else {
        Start-Process powershell.exe -Verb RunAs -ArgumentList ('-noprofile -noexit -file "{0}" -elevated' -f ($myinvocation.MyCommand.Definition))  
    }
    exit
}

write-host "running with full privileges" -foreground "green"  

$testverzeichnis = "C:\FLS"  
If (Test-Path $testverzeichnis)
{
    Write-Host -BackGroundColor Green "Die Datei $($testverzeichnis) existiert."  
    Remove-Item -Path $testverzeichnis -Recurse
    Write-Host -BackGroundColor Red "Ordner wurde gelöscht"  
}
copy-item -Path \\srv-fls\FLS_Vistour_Client -Destination C:\FLS\ -Recurse
Write-Host -BackGroundColor Green "FLS Ordner wurde erstellt!"  

$quelldatei = "C:\FLS\FLS*.exe"  
$quellordner = "C:\FLS"  
$zielpfad = "C:\Users\Public\Desktop"  

New-Item -Value $quelldatei -Path $zielpfad\FLS_Visitour.lnk -ItemType SymbolicLink
pause
Mitglied: TK1987
TK1987 01.04.2021 aktualisiert um 11:04:00 Uhr
Goto Top
Zitat von @Worker26:
Hacke ich "als Admin ausführen" in der Verknüpfung an, wird es nicht einmal ausgeführt. Dann schließt sich das Fenster direkt.
Bist du dir denn sicher, das er das Skript nicht schließt, weil er schon fertig ist?

Ergänze im Verknüpfungsziel mal -NoExit, so bleibt das Fenster weiter geöffnet.
powershell -EP ByPass -NoExit -File "C:\Pfad\zum\Skript.ps1"  
Erscheint dort eine Fehlermeldung?
Mitglied: chkdsk
chkdsk 01.04.2021 um 11:02:11 Uhr
Goto Top
Dann kopiere mal deinen Code in die ISE und schau dir die Fehlermeldung an
Mitglied: Worker26
Worker26 01.04.2021 um 11:02:42 Uhr
Goto Top
Das Fenster schließt sich leider trotzdem.
Ja, sonst würde ich eine Verknüpfung am Desktop haben, wenn es funktionieren würde.
Mitglied: Worker26
Worker26 01.04.2021 um 11:05:28 Uhr
Goto Top
Ich führe den Code im ISE aus, dann kommt einfach nichts
unbenannt
Mitglied: chkdsk
chkdsk 01.04.2021 um 11:10:27 Uhr
Goto Top
Das ist aber nicht die ISE
Mitglied: TK1987
Lösung TK1987 01.04.2021 um 11:11:02 Uhr
Goto Top
Zitat von @Worker26:

Das Fenster schließt sich leider trotzdem.
Dann stimmt vermutlich der Pfad zum Skript nicht.
Machen wir es noch anders. Beim Verknüpfungsziel:
powershell -EP ByPass -NoExit -Command . "C:\Pfad\zum\Skript.ps1"  
Beachte auch den Punkt hinter -Command (Dot-Sourcing). Nun kann sich das Fenster definitiv nicht mehr schließen.
Welche Fehlermeldung kommt hier?
Mitglied: Worker26
Worker26 01.04.2021 um 11:20:23 Uhr
Goto Top
Es kommt dies Fehlermeldung, jedoch befindet sich meine PowerShell Datei in diesem Ordner
unbenannt
Mitglied: Worker26
Worker26 01.04.2021 um 11:23:26 Uhr
Goto Top
Das ist sie doch oder?
unbenannt
Mitglied: TK1987
Lösung TK1987 01.04.2021 aktualisiert um 11:28:12 Uhr
Goto Top
Damit ist schon mal klar, dass er die Datei bzw. den Pfad nicht findet.

Sind in dem Teil, den du unkenntlich gemacht hast, zufällig Dollarzeichen oder ähnliches vorhanden?
Ändere beim Pfad mal die Doubleqoutes auf Singlequotes ab.
Mitglied: Worker26
Worker26 01.04.2021 um 11:29:24 Uhr
Goto Top
Nein, da steht nur mein Name.
Mit Singlequotes klappt es auch nicht face-sad
Mitglied: Worker26
Worker26 01.04.2021 um 11:36:20 Uhr
Goto Top
Hab das Pfad Problem gefunden. Es handelt sich um einen UNC Pfad. Ich hab den Laufwerkbuchstaben durch das richtige ersetzt und nun klappts, danke für die Hilfe. Habt noch einen schönen Tag :D