Benutzer mit den meisten Antworten
PowerShell: Pfad auf einer Datei auf USB-Stick ermitteln und in dieses Verzeichnis wechseln?

Frage
-
Hallo zusammen,
ich soll per PowerShell-Skript u.a. eine .exe-Datei ausführen. Jedoch sollen sowohl das Skript als auch die .exe auf einem USB-Stick von Rechner zu Rechner herumgereicht werden. Hinzu kommt, dass man für das ausführen der .exe-Datei Administrationsrechte benötigt. Deshalb würde ich am Anfang des Skripts
Start-Process powershell -Verb runAs
setzen, dies ändert jedoch den Pfad der PowerShell auf "C:\Windows\System32". Gibt es eine Möglichkeit ein Powershell-Skript als Administrator auszuführen ohne, dass sich der Pfad ändert (sodass ich das Skript und die .exe einfach zusammen auf dem USB-Stick lassen kann) oder dass ich ins Verzeichnis der .exe auf dem USB-Stick zurück wechseln kann?
Danke für eure Bemühungen.
MfG
- Typ geändert Denniver ReiningMVP, Moderator Freitag, 30. Juni 2017 10:28 ....
- Typ geändert Denniver ReiningMVP, Moderator Freitag, 30. Juni 2017 10:43 .....
Antworten
-
Hallo Hawk,
das dürfte glaube ich mit
split-path $SCRIPT:MyInvocation.MyCommand.Path -parent
Machbar sein, du holst dir hiermit die Location deines Scripts :)
Gruß
Carsten
http://www.ms-fabric.de/ Wenn Dir eine Forenantwort weiter geholfen hat dann markiere sie doch bitte als Antwort, dies hilft anderen bei der Lösung von Problemen! LG Carsten
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Dienstag, 11. Juli 2017 09:21
- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 11. Juli 2017 09:22
-
Hallo Hawk,
probiere es mal hiermit und füge das an den Anfang deines Scripts:
#### Get UserID and security principal of the current user $CurrentWindowsID = [System.Security.Principal.WindowsIdentity]::GetCurrent() $CurrentWindowsPrincipal = New-Object System.Security.Principal.WindowsPrincipal($CurrentWindowsID) #### Get administrator role security principal $LocalAdminRole = [System.Security.Principal.WindowsBuiltInRole]::Administrator #### Check for elevated rights if ($CurrentWindowsPrincipal.IsInRole($LocalAdminRole)) { #### Currently running with elevated rights $Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Elevated)" Write-Host "Currently running with elevated rights" -ForegroundColor Green Clear-Host } else { ### Currently NOT running with elevated rights $ElevatedProcess = New-Object System.Diagnostics.ProcessStartInfo "PowerShell" $ElevatedProcess.Arguments = "-WindowStyle Hidden & '" + $script:MyInvocation.MyCommand.Path + "'" $ElevatedProcess.Verb = "runas" $ElevatedProcess.WorkingDirectory = $Script:myInvocation.MyCommand.Path try { [System.Diagnostics.Process]::Start($ElevatedProcess); } catch { Write-Host "Could not start PowerShell with elveated rights" -ForegroundColor Red $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") } Exit } ############################################################################ # # # Enter your code to execute with elevated rights below # # # ############################################################################
Das Script ruft sich dann selbst mit Administrationsrechten wieder auf. Als Workingdirectory wird der Pfad zum Script mitgegeben, somit solltest du mit deiner .exe kein Problem mehr haben.
Gruß
Tim
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Dienstag, 11. Juli 2017 09:21
- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 11. Juli 2017 09:22
Alle Antworten
-
Hallo Hawk,
das dürfte glaube ich mit
split-path $SCRIPT:MyInvocation.MyCommand.Path -parent
Machbar sein, du holst dir hiermit die Location deines Scripts :)
Gruß
Carsten
http://www.ms-fabric.de/ Wenn Dir eine Forenantwort weiter geholfen hat dann markiere sie doch bitte als Antwort, dies hilft anderen bei der Lösung von Problemen! LG Carsten
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Dienstag, 11. Juli 2017 09:21
- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 11. Juli 2017 09:22
-
Hallo Hawk,
probiere es mal hiermit und füge das an den Anfang deines Scripts:
#### Get UserID and security principal of the current user $CurrentWindowsID = [System.Security.Principal.WindowsIdentity]::GetCurrent() $CurrentWindowsPrincipal = New-Object System.Security.Principal.WindowsPrincipal($CurrentWindowsID) #### Get administrator role security principal $LocalAdminRole = [System.Security.Principal.WindowsBuiltInRole]::Administrator #### Check for elevated rights if ($CurrentWindowsPrincipal.IsInRole($LocalAdminRole)) { #### Currently running with elevated rights $Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Elevated)" Write-Host "Currently running with elevated rights" -ForegroundColor Green Clear-Host } else { ### Currently NOT running with elevated rights $ElevatedProcess = New-Object System.Diagnostics.ProcessStartInfo "PowerShell" $ElevatedProcess.Arguments = "-WindowStyle Hidden & '" + $script:MyInvocation.MyCommand.Path + "'" $ElevatedProcess.Verb = "runas" $ElevatedProcess.WorkingDirectory = $Script:myInvocation.MyCommand.Path try { [System.Diagnostics.Process]::Start($ElevatedProcess); } catch { Write-Host "Could not start PowerShell with elveated rights" -ForegroundColor Red $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") } Exit } ############################################################################ # # # Enter your code to execute with elevated rights below # # # ############################################################################
Das Script ruft sich dann selbst mit Administrationsrechten wieder auf. Als Workingdirectory wird der Pfad zum Script mitgegeben, somit solltest du mit deiner .exe kein Problem mehr haben.
Gruß
Tim
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Dienstag, 11. Juli 2017 09:21
- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 11. Juli 2017 09:22
-
Ich vermute mal, weil der Stick, wie in ganz oben geschildert, von Rechner zu Rechner herumgereicht werden soll.
Vielleicht wäre ja auch eine andere "Transportmethode" als ein USB-Stick wesentlich zielführender und leichter zu kontrollieren!? ;-)
Grüße - Best regards
PS:> (79,108,97,102|%{[char]$_})-join''