Starten Sie Powershell als Administrator, wenn Sie auf die ps1-Datei doppelklicken

2

Ich habe gelesen, wie eine Datei zur Bearbeitung im Administratormodus geöffnet wird.

Ich habe eine .ps1-Datei, die als Administrator ausgeführt werden muss. Ich bin froh, dass Powershell als Administrator ausgeführt wird, wenn ich auf eine .ps1-Datei doppelklicke.

Ich habe C:\Users\me\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShellbeide PowerShell-Verknüpfungen als Administrator ausgeführt

Wenn ich Powershell über das Startmenü öffne, werde ich gefragt, ob ich zulassen möchte, dass die App Änderungen vornimmt. Dies zeigt, dass sie als Admin ausgeführt wird. Wenn Powershell ausgeführt wird, wird Administrator in der Titelleiste angezeigt

Wenn ich jedoch auf eine .ps1-Datei doppelklicke, wird sie als normaler Benutzer (nicht als Administrator) geöffnet.

Was muss ich sonst noch tun?

MyDaftQuestions
quelle
Sie könnten so etwas if (([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) -eq $false){Start-Process powershell -ArgumentList "-NoProfile -ExecutionPolicy Bypass" -Verb RunAs; Exit;}in Ihr Skript einbinden $Profile- aus irgendeinem Grund Exitfunktioniert dies jedoch nicht. Daher bleibt das ursprüngliche Nicht-Admin-Terminal geöffnet .)
flolilo
Mit winaerotweaker können Sie ps1-Dateien als Administrator
ausführen
Ich kenne ein Registrierungsskript, das ein Kontextmenü hinzufügt, um das Powershell-Skript als Administrator auszuführen.
Biswapriyo

Antworten:

3

Dadurch wird das Skript nicht ausgeführt werden, wenn Sie darauf doppelklicken, aber das wird sich als ausführen erhöht , wenn Sie es starten. Sie können dies versuchen:

$principal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
if($principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
    # code here...
}
else {
    Start-Process -FilePath "powershell" -ArgumentList "$('-File ""')$(Get-Location)$('\')$($MyInvocation.MyCommand.Name)$('""')" -Verb runAs
}

Damit wird die nicht erhöhte Konsole beendet.

iTechieGamer
quelle
1

.ps1 ist standardmäßig mit Notepad.exe verknüpft. Ein Doppelklick öffnet einfach die .ps1 im Editor zur Überprüfung oder Bearbeitung. Dies war eine bewusste Sicherheitsentscheidung der MS.

Windows PowerShell Sichern der Shell https://technet.microsoft.com/en-us/library/2007.09.powershell.aspx

Natürlich können Sie diese Zuordnung in powershell.exe ändern, aber Sie setzen sich auch unnötigen Risiken aus. Wenn es sich um ein Unternehmen handelt, hat Ihr Sicherheitsteam möglicherweise Worte für Sie, oder dies könnte zum RPE (Resume Producing Event) werden.

Das alles gesagt. Es spielt keine Rolle, was Sie mit den Verknüpfungen tun, so würde ein Doppelklick nicht funktionieren.

Doppelklick, startet keine Verknüpfung, startet mit der zugehörigen App, in dem Fall ...

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe

Wenn Sie Skripte haben, für die Administratorrechte erforderlich sind, oder die Sie als Administrator ausführen möchten, müssen Sie im Skript Code eingeben, um sie als Administrator neu zu starten, sofern sie nicht auf diese Weise gestartet wurden. Das bedeutet, dass Sie in einer neuen PoSH-Sitzung landen, die der von Ihnen gestarteten entspricht, und dies ist beabsichtigt.

Das Ändern der Dateizuordnung in "Automatisch ausführen" ist nur eine schlechte Praxis und unterliegt denselben Risiken wie in früheren .vbscript-Tagen.

Postanote
quelle
0

Kopieren Sie die PowerShell-Verknüpfung, und fügen Sie sie an der Stelle ein, an der Sie das Skript starten möchten. Klicken Sie mit der rechten Maustaste auf die neue Verknüpfung, klicken Sie auf Eigenschaften und anschließend auf Erweitert, und stellen Sie sicher, dass sie als Administrator ausgeführt wird. Geben Sie dann im Feld Ziel den Pfad und den Namen des Skripts nach powershell.exe ein

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe c:\myscripts\my-awesome-script.ps1

Stellen Sie sicher, dass Sie "Anführungszeichen" um Ihren Zusatz verwenden, wenn der Pfad oder der Dateiname Leerzeichen wie folgt enthält:

"c:\my scripts\some script with spaces.ps1"

Dies startet eine neue Powershell als Administrator und startet das Skript automatisch in der neuen Shell.

Möglicherweise möchten Sie die Verknüpfung auch umbenennen, um anzuzeigen, dass es sich um ein bestimmtes Skript handelt, anstatt um eine reguläre Powershell-Sitzung. Rechtsklick, umbenennen.

Apokalyske
quelle
0

Erläuterung

Windows lässt die native Ausführung von PowerShell-Skripts nicht zu. Sie müssen die Ausführungsrichtlinie aktualisieren, damit der Benutzer oder ein ausgewählter Benutzer sie verwenden kann.

Antworten

  1. Öffnen Sie Ihre PowerShell (bei Bedarf im Administratormodus)
  2. Ändern Sie die Ausführungsrichtlinie Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
  3. Geben Sie ein Get-Execution -List, um alle Ausführungsrichtlinien anzuzeigen

            Scope    ExecutionPolicy
            -----    ---------------
    MachinePolicy    Unrestricted
    UserPolicy          Undefined
    Process             Undefined
    CurrentUser      RemoteSigned
    LocalMachine     Unrestricted
    

Wenn dies immer noch nicht funktioniert, können Sie Windows PowerShell ISE verwenden, bei dem es sich um die PowerShell-IDE handelt

  1. Klicken Sie mit der rechten Maustaste auf Ihre * .ps1-Datei
  2. Öffnen Sie mit → Windows PowerShell ISE

Oder öffnen Sie einfach zuerst ISE.

Sicherheit

Microsoft erlaubt Ihnen aus Sicherheitsgründen nicht , standardmäßig PowerShell-Skripte auszuführen. Es könnte leicht sein, dass jemand ein Skript auf Ihrem Computer ausführt und vollen Zugriff hat ! Um dies zu vermeiden, setzen Sie Ihre Ausführungsrichtlinie auf den ursprünglichen Wert zurück.

Microsoft-Dokumentation

DIDIx13
quelle