Ignorieren Sie das ausgeführte Skript "Sicherheitswarnung" über die Befehlszeile


74

Ich versuche, ein Skript aus einem freigegebenen Ordner auszuführen, dem ich vertraue:

PowerShell -file "\\server\scripts\my.ps1"

Aber ich bekomme eine Sicherheitswarnung und muss 'R' drücken, um fortzufahren

Sicherheitswarnung Führen Sie nur Skripte aus, denen Sie vertrauen. Während Skripte aus dem Internet nützlich sein können, kann dieses Skript möglicherweise Ihren Computer beschädigen. Möchten Sie \ server \ scripts \ my.ps1 ausführen? [D] Nicht ausführen [R] Einmal ausführen [S] Anhalten [?] Hilfe (Standard ist "D"): d

Kann ich diese Warnung ignorieren? Der gewünschte Pseudocode, den ich möchte, ist:

PowerShell -IGNORE_SECURITY_WARNING -file "\\server\scripts\my.ps1"

Antworten:


86

Dies wird in "PowerShell-Ausführungsrichtlinien in Standardabbildern" in Lee Holmes 'Blog und "PowerShells Sicherheitsleitlinien" im Windows Power Shell-Blog angesprochen .

Zusammenfassung Einige Computer behandeln UNC-Pfade als das große schlechte Internet, daher behandelt PowerShell sie als Remote-Dateien. Sie können diese Funktion entweder auf diesen Servern deaktivieren ( UncAsIntranet = 0,) oder die Remotecomputer Ihren vertrauenswürdigen Hosts hinzufügen.

Wenn Sie beides nicht möchten, unterstützt PowerShell v2 einen -ExecutionPolicyParameter, der genau das tut, was Ihr Pseudocode will. PowerShell -ExecutionPolicy Bypass -File (...).


4
Vielen Dank! -ExecutionPolicy Bypass ist genau das, wonach ich gesucht habe.
Alex2k8

1
@ LeeHomes Ich habe nach etwas anderem gesucht, aber -ExecutionPolicy ByPassmein Problem behoben. Du hast mir viel googeln und Zeit gespart. Danke
Suhas

2
Nur zur Verdeutlichung: "Zu vertrauenswürdigen Hosts hinzufügen" bedeutet, dass die Internetoptionen des Systems über das Bedienfeld oder den Internet Explorer verfügbar sind. Der Name scheint eine Zeichenfolgenübereinstimmung zu sein. Mein Aktienname ist \\foo-files. Das Hinzufügen des Namens foo-files.example.comzu vertrauenswürdigen Hosts funktionierte nicht, ich musste nur den Namen hinzufügen foo-files.
Dan Pritts

Betreff: -ExecutionPolicyDieser Befehl listet das Skript nur für die Instanz auf, in der es ausgeführt wird, und bietet den ausgeführten Skripten keine Hilfe. Verwenden Sie dazu die Schaltfläche "Ausführen" in PowerShell ISE. Gibt es eine Möglichkeit, dieser Datei global zu vertrauen, dass 1. dauerhaft ist - und - 2. das Skript nicht ausgeführt wird. Weitere Vorsicht ... Das Ändern der lokalen Intranetzone und / oder der vertrauenswürdigen Zonen in einer Domain kann unbeabsichtigte Nebenwirkungen auf Websites haben, deren Funktion auf bestimmten Browserfunktionen beruht. Beispielsweise kann der ActiveX-, http- und ws-Verkehr je nach Ursprung und Zone offensichtlich blockiert werden.
Tresf

Wo lege ich dieses UncAsIntranet ab?
McVitas

48

Um Warnungen zu vermeiden, können Sie:

Set-ExecutionPolicy bypass

4
Warnung: Dadurch wird ExecutionPolicy auf dem gesamten Computer festgelegt, was ein großes Sicherheitsrisiko darstellt. Die oben beschriebene @ LeeHolmes-Lösung legt ExecutionPolicy nur für diese Sitzung fest, was ein geringeres Risiko darstellt.
JamesQMurphy

Ich finde die Auswirkungen auf die Sicherheit grausam, aber dies ist die einzige Möglichkeit, eine Remote-Datei mit PowerShell ISE zu bearbeiten und nicht jedes Mal ein Popup zu haben, wenn auf die Schaltfläche "Ausführen" geklickt wird ... zumindest ohne die Einstellungen für die Internetsicherheit zu ändern, die - - im Fall der Zielumgebung - würde ActiveX-Inhalte sowie einige schlecht ausgewählte, aber benötigte domänenübergreifende Sicherheitseinstellungen beschädigen, die nur in der standardmäßigen lokalen Intranetzone funktionieren.
Tresf

43

Wenn dieser Fehler von einem heruntergeladenen Powershell-Skript auftritt, können Sie das Skript folgendermaßen entsperren:

  1. Klicken Sie mit der rechten Maustaste auf die .ps1betreffende Datei und wählen Sie Eigenschaften

  2. Klicken Sie in den Dateieigenschaften auf Blockierung aufheben

    Geben Sie hier die Bildbeschreibung ein

  3. Klicken Sie auf OK


2
Vielen Dank!! Dies funktionierte für mich, ich wurde bei jedem Start aufgefordert, auch mit Set-ExecutionPolicy Unrestricted
Choco Smith

2
Zumindest auf meinem Computer Unblock-Filescheint dies weder bei einem UNC-Pfad zu helfen, wie in der ursprünglichen Frage dargestellt, noch wird die UnblockSchaltfläche im Eigenschaftendialog der Datei angezeigt. Ich C:\...
gehe

1
Auf jeden Fall für mich geholfen. Aufgrund von Einschränkungen in unserer Umgebung mussten wir Module manuell installieren ( stackoverflow.com/a/37488195/74276 ) und dann auf dem Server installieren ( docs.microsoft.com/en-us/powershell/scripting/developer/module/… ). . Dann mussten wir "Get-ChildItem | Unblock-File" ausführen, um alle Dateien im Modulordner (unter dem Versionsnummernordner) zu entsperren.
Kirk Liemohn

13

Weisen Sie der Umgebungsvariablen SEE_MASK_NOZONECHECKS einfach 1 zu

$env:SEE_MASK_NOZONECHECKS = 1
Start-Process $msi_file_path /qn -Wait | out-null

2
Start-Processwird nicht unterstützt, -ExecutionPolicy Bypassdaher ist ein UNC-Pfad fehlgeschlagen, auch wenn die Benutzerkontensteuerung deaktiviert ist. Aber mit diesem Trick funktioniert es. Upvoting mit allen meinen Händen.
Laurent Caillette

Sie, Sir, gewinnen die Nacht.
Ojblass

3

Versuchen Sie dies, bearbeiten Sie die Datei mit:

notepad foo.ps1:Zone.Identifier

Und setze 'ZoneId = 0'


4
Oder in V3 Unblock-File(obwohl dieser Kommentar und diese Antwort beide nichts mit der Frage des IO zu tun haben)
Ruben Bartelink

Aus irgendeinem Grund konnte ich nicht Unblock-Fileeinmal mit Version 4 sehen , aber die Problemumgehung von Zone.Identifier hat das Problem gelöst. Die Datei wurde ebenfalls auf dem Host erstellt, aber immer noch die Eingabeaufforderung mit der Systemausführungsrichtlinie 'RemoteSigned'.
TrixM


3

Ich habe dieses Powershell-Skript erstellt, um alle Dateien auf einer Freigabe auf meinem Server zu entsperren

Get-ChildItem "\\ServerName\e$\MyDirectory\" -Recurse -File | % {
       Unblock-File -Path $_.FullName
}

Unblock-Filehat in meinen Tests nicht funktioniert (Windows 10, PowerShell ISE).
Tresf

2

Sie möchten die Ausführungsrichtlinie auf Ihrem Computer mit Set-ExecutionPolicy festlegen:

Set-ExecutionPolicy Unrestricted

Möglicherweise möchten Sie die verschiedenen Ausführungsrichtlinien untersuchen, um festzustellen, welche für Sie geeignet ist. help about_signingWeitere Informationen finden Sie unter " ".


Dadurch wird die Ausführungsrichtlinie dauerhaft geändert, was für eine einmalige Verwendung möglicherweise nicht erwünscht ist.
Joey

3
Wenn Sie ExecutionPolicy auf Uneingeschränkt setzen, wird die Ausführung von Netzwerkskripten ermöglicht, die Eingabeaufforderung wird jedoch nicht umgangen.
Jewgenij

2
Sie möchten "Bypass" anstelle von "uneingeschränkt" verwenden. "Bypass" ist sogar WENIGER einschränkend als "uneingeschränkt" und beseitigt die Sicherheitsabfrage.
Warren Stevens

1

Haben Sie das Skript aus dem Internet heruntergeladen?

Entfernen Sie dann den NTFS-Stream mit der Datei streams.exe von sysinternal in der Befehlszeile aus der Datei .

cmd> streams.exe .\my.ps1

Versuchen Sie nun erneut, das Skript auszuführen.


4
Oder in V3 Unblock-File(obwohl dieser Kommentar und diese Antwort nichts mit der Frage des IO zu tun haben)
Ruben Bartelink

0

Angenommen, Sie müssen das ps-Skript aus einem freigegebenen Ordner starten

copy \\\server\script.ps1 c:\tmp.ps1 /y && PowerShell.exe -ExecutionPolicy Bypass -File c:\tmp.ps1 && del /f c:\tmp.ps1

PS Googeln reduzieren)


0

Es ist sehr einfach, Ihre PowerShell zu öffnen und den folgenden Befehl zu schreiben, wenn Sie über eine Anzahl von ps1-Dateien verfügen. Hier müssen Sie den Pfad mit Ihrem Pfad ändern.

PS C:\Users> Get-ChildItem -Path "D:\downlod" -Recurse | Unblock-File

Nein. Die Dateien sind nicht blockiert und ich erhalte immer noch Eingabeaufforderungen, wenn ich sie von \\ tsclient \ h über ISE
McVitas

0

Versuchen Sie es mit dem Schalter "Policyname" -force-Schalter für die Ausführungspolitik, und das Popup-Fenster mit den Warnungen sollte nicht angezeigt werden.


0

Wenn Sie von einer bereits geladenen PowerShell-Sitzung aus auf eine Datei zugreifen möchten, verwenden Sie entweder Unblock-File , um die Datei als sicher zu markieren (obwohl Sie bereits eine entspannte Ausführungsrichtlinie festgelegt haben müssen, damit Unrestricteddies funktioniert), oder ändern Sie die Ausführungsrichtlinie Nur für die aktuelle PowerShell-Sitzung:

Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.