2009-04-08 8 views
53

Sto cercando di eseguire uno script dalla cartella condivisa che mi fido:Ignora 'Avviso di protezione' esecuzione di script da linea di comando

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

ma ho un avviso di protezione, e devono premere 'R' per continuare

Avviso di sicurezza Esegui solo gli script che si fidano di . Sebbene gli script della rete possano essere utili, questo script può potenzialmente danneggiare il computer. si desidera eseguire \ server \ scripts \ my.ps1? [?] [D] Non corsa [R] Esegui una volta [S] Sospendi Guida (di default è "D"): D

Posso ignorare questo avviso? Il codice pseudo desiderato che voglio è:

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

risposta

72

Questo viene toccato in "PowerShell Execution Policies in Standard Images" on Lee Holmes' Blog e "PowerShell’s Security Guiding Principles" on the Windows Power Shell Blog .

Sommario Alcune macchine trattano i percorsi UNC come il grande cattivo internet, in modo da PowerShell li tratta come file remoti. È possibile disabilitare questa funzione su tali server (UncAsIntranet = 0,) o aggiungere le macchine remote ai propri host affidabili.

Se non si desidera fare nulla, PowerShell v2 supporta un parametro -ExecutionPolicy che esegue esattamente ciò che richiede lo pseudocode. PowerShell -ExecutionPolicy Bypass -File (...).

+3

Grazie! -ExecutionPolicy Bypass è esattamente quello che stavo cercando. – alex2k8

+1

@LeeHomes Cercavo qualcos'altro ma '-ExecutionPolicy ByPass' ha corretto il mio problema. Mi hai risparmiato molto su google e tempo. Grazie – Suhas

+1

Giusto per chiarire: "aggiungi ad host fidati" significa nelle opzioni Internet del sistema, disponibili tramite pannello di controllo o in Internet Explorer. Il nome sembra essere una corrispondenza di stringa. il mio nome di condivisione è '\\ foo-files'. Aggiungere il nome 'foo-files.example.com' agli host fidati non funzionava, dovevo semplicemente aggiungere il nome' foo-files'. –

2

si desidera impostare i criteri di esecuzione sul computer utilizzando Set-ExecutionPolicy:

Set-ExecutionPolicy Unrestricted 

si consiglia di indagare le diverse strategie di esecuzione per vedere quale è giusto per te. Dai uno sguardo allo "help about_signing" per maggiori informazioni.

+0

che cambieranno i criteri di esecuzione in modo permanente, che può nè essere desiderato per un uso una tantum. – Joey

+3

l'impostazione ExecutionPolicy to Unrestricted consente l'esecuzione di script di rete, ma non ignora il prompt. – Yevgeniy

+1

Si desidera utilizzare "bypass" anziché "non limitato". "Bypass" è anche MENO restrittivo di "illimitato" e elimina i prompt di sicurezza. –

3

Prova questo, modificare il file con:

notepad foo.ps1:Zone.Identifier 

e impostare 'IDArea = 0'

+3

Oppure, in V3, 'Unblock-File' (sebbene questo commento e questa risposta non abbiano nulla a che fare con la domanda dell'IO) –

1

Ti è scaricare lo script da internet?

Quindi rimuovere lo stream NTFS dal file utilizzando sysinternal streams.exe sulla riga di comando.

cmd> streams.exe .\my.ps1 

Ora prova a eseguire di nuovo lo script.

+2

Oppure, in V3,' Unblock-File' (anche se questo commento e questa risposta non hanno nulla da fai con la domanda dell'IO) –

38

Per evitare avvisi, è possibile:

Set-ExecutionPolicy bypass 
+3

Avviso: imposta ExecutionPolicy sull'intera macchina, che rappresenta un grosso rischio per la sicurezza. La soluzione @LeeHolmes in alto imposta ExecutionPolicy solo per quella sessione, che rappresenta un rischio inferiore. – JamesQMurphy

+0

Trovo che le implicazioni sulla sicurezza siano atroci ma questo è l'unico modo in cui ho trovato di modificare un file remoto con PowerShell ISE e non avere un popup ogni volta che si fa clic sul pulsante di esecuzione ... almeno senza modificare le impostazioni di Internet Security che - nel caso dell'ambiente di destinazione - interromperebbe i contenuti ActiveX e alcune impostazioni di sicurezza tra domini scarsamente selezionate ma necessarie che funzionano solo nella zona Intranet locale predefinita. – tresf

35

Se si sta eseguendo in questo errore da uno script PowerShell scaricato, è possibile sbloccare lo script in questo modo:

  1. pulsante destro del mouse sul file .ps1 in questione, e selezionare Proprietà

  2. Clicca Sblocca nelle proprietà del file

    enter image description here

  3. clic su OK

+1

Grazie !! Questo ha funzionato per me, mi veniva richiesto ogni lancio anche con Set-ExecutionPolicy Unrestricted –

+0

Puoi anche usare il comando Unblock-File – jhclark

+0

Almeno sul mio computer, 'Unblock-File' non sembra aiutare con un percorso UNC come illustrato nella domanda originale non compare il pulsante 'Sblocca' nella finestra di dialogo delle proprietà del file. Presumo che questo sia dovuto al fatto che il file è ospitato localmente 'C: \ ...', che rende questa risposta non valida alla domanda originale (anche se utile per> = 28 altri) – tresf

0

Si supponga che è necessario avviare lo script ps dalla cartella condivisa

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

P.S. Ridurre googling)

9

Basta assegnare da 1 a SEE_MASK_NOZONECHECKS env variabile

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

'Start-Process' non supporta' -ExecutionPolicy Bypass' quindi stava fallendo su un percorso UNC, anche con UAC disabilitato. Ma con questo trucco funziona. In alto con tutte le mie mani. –

+0

Lei vince la notte. – ojblass

0

Ho fatto questo script PowerShell per sbloccare tutti i file su una condivisione sul mio server

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

'Unblock-File' non ha funzionato nei miei test (Windows 10, PowerShell ISE). – tresf

Problemi correlati