Come configurare smartphone e PC. Portale informativo
  • casa
  • Windows 8
  • Consenti l'esecuzione di script. Esegui script PowerShell in base a una pianificazione

Consenti l'esecuzione di script. Esegui script PowerShell in base a una pianificazione

1. Scrivere una sceneggiatura

Uno script PowerShell (indipendentemente dalla versione) è un file di testo con estensione * .ps1.

Ecco un esempio di un semplice script Power Shell (file systemInfo.ps1):

# Recupera l'oggetto WMI per il sistema operativo

Get-WmiObject Win32_OperatingSystem

Questo file può essere creato e modificato, ad esempio, in FAR Manager.

Notache FAR Manager, sebbene possa funzionare nella console Power Shell, esegue script da sotto se stesso nell'ambiente della solita console Windows cmd ... Cioè, FAR Manager può essere utilizzato solo per creare e modificare script PowerShell, ma non per eseguirli. Ma prima di scoraggiarti, leggi il punto 3.

2. Avvio dello script

Lo script deve essere eseguito dalla console di Power Shell, non dalla normale console di Windows. Nella console di Power Shell, devi andare nella directory in cui si trova lo script (con i comandi cd ), quindi esegui lo script stesso, assicurati di anteporre il prefisso ai simboli".\" ... Ad esempio, abbiamo il percorso del file di script d: \ lavoro \ systemInfo.ps1 ... Quindi i comandi di avvio saranno simili a questo:

cd \

lavoro su cd

.\systemInfo.ps1

o giù di lì (viene indicato solo il percorso completo dello script):

d: \ lavoro \ systemInfo.ps1

Molto probabilmente, verrà visualizzato il seguente errore durante l'esecuzione dello script:

Impossibile caricare il file D:\work\systemInfo.ps1 perché gli script non sono consentiti su questo sistema. Inserisci "get-help about_signing" per ulteriori informazioni.

riga: 1 carattere: 18

Informazioni sulla categoria: Non specificato: (:), PSSecurityException

FullyQualifiedErrorId: RuntimeException

L'errore viene visualizzato a causa del fatto che per impostazione predefinita Power Shell ha abilitato il criterio di massima sicurezza, che consente di eseguire i comandi PowerShell nella riga di comando, ma non consente di eseguire uno script con i comandi PowerShell nella stessa riga di comando.

Per abilitare l'esecuzione di script PowerShell, è necessario creare un file * .bat, ad esempio enableScript.bat con il seguente contenuto:

powershell -Command Set-ExecutionPolicy RemoteSigned

Questo file * .bat può essere eseguito in qualsiasi console: in PowerShell o in un normale cmd ... Dopo aver eseguito questo file, gli script di PowerShell verranno eseguiti nella console di PowerShell.

3. Esecuzione di uno script PowerShell da una normale console cmd di Windows

Lo script PowerShell può essere eseguito anche dalla normale console di Windows. Per farlo, puoi usare il comando:

Powershell -File ./systemInfo.ps1

Pertanto, gli script possono essere eseguiti direttamente dal FAR Manager e funzioneranno.

Ma qui c'è un po' di sottigliezza. Parametro-File funziona solo su percorsi locali, anche se il percorso è relativo"./". Cioè, se * .ps1 - il file è sul disco locale C: o D: allora tale chiamata funzionerà. Ma se si tenta di eseguire uno script che si trova su una risorsa di dominio, lo script non verrà trovato. Forse questo problema verrà risolto nelle versioni future di PowerShell.

Per impostazione predefinita, lo scripting è Windows PowerShellè vietato nel sistema. Per motivi di sicurezza, tutti gli script di PowerShell devono essere firmati digitalmente, questo metodo è chiamato - politica di esecuzione... Se lo script non soddisfa questa condizione, gli script di PowerShell non possono essere eseguiti nel sistema. Ciò è dovuto principalmente al fatto che lo script può contenere codice dannoso che può danneggiare il sistema operativo.


PowerShell dispone di diverse modalità di esecuzione che determinano il tipo di codice consentito per l'esecuzione. Ci sono 5 diverse modalità di esecuzione:

Limitato
Valore di default. L'esecuzione di qualsiasi script è bloccata e sono consentiti i comandi interattivi.
Tutto firmato
È consentita l'esecuzione di script firmati digitalmente.
Firmato in remoto
Gli script locali funzionano senza firma. Tutti gli script scaricati devono essere firmati digitalmente.
senza restrizioni
È consentita l'esecuzione di qualsiasi script. Quando si esegue uno script non firmato che è stato scaricato da Internet, il programma potrebbe chiedere conferma.
Circonvallazione
Nulla è bloccato, non vengono visualizzati avvisi o richieste.

Per impostazione predefinita, PowerShell utilizza la modalità "Limitato"... In questa modalità, PowerShell funge da shell interattiva. Se non hai precedentemente configurato PowerShell, invece di eseguire lo script, vedrai un messaggio di errore scritto in rosso, come nello screenshot qui sotto.

Il modo più sicuro per risolvere questo problema consiste nel modificare il criterio di esecuzione su illimitato, eseguire lo script e quindi ripristinare il criterio limitato.

Per modificare il criterio di esecuzione su illimitato, utilizzare la console di PowerShell con diritti di amministratore ed eseguire il comando seguente:

()

Ora puoi eseguire lo script. Tuttavia, stai mettendo a serio rischio il sistema, quindi quando lo script finisce, assicurati di ripristinare la politica di esecuzione in modalità limitata. Questo può essere fatto usando il seguente comando:

Dopo aver eseguito il comando, ti verrà chiesto di confermare la modifica alla politica di esecuzione. Risponderemo ()

L'esecuzione di qualsiasi script è bloccata. Valore di default.

Set-ExecutionPolicy limitato

È consentita l'esecuzione di script firmati digitalmente.

Gli script preparati sul computer locale possono essere eseguiti senza restrizioni, gli script scaricati da Internet - solo se si dispone di una firma digitale.

Set-ExecutionPolicy RemoteSigned

È consentita l'esecuzione di qualsiasi script. Quando si esegue uno script non firmato che è stato scaricato da Internet, il programma potrebbe chiedere conferma.

Set-ExecutionPolicy illimitato

Nulla è bloccato, non vengono visualizzati avvisi o richieste.

Per eseguire i comandi precedenti senza confermare la modifica, utilizzare il parametro
-Forza, ad esempio esegui il comando:

Set-ExecutionPolicy Bypass -Force

Ora, durante l'esecuzione dei comandi, non è necessario confermare le modifiche apportate.

Esistono diversi modi per eseguire lo script, di seguito i principali:

  1. Avvia PowerShell ed esegui lo script al suo interno (inserisci il percorso del file e il nome del file, ad esempio, in questo modo: C: \ Scripts \ test.ps1, oppure vai nella cartella dello script con il comando cd C: \ Scripts ed eseguilo con il comando.\test.ps1) La shell può essere trovata e lanciata in vari modi. Un modo è attraverso il menu di avvio. Per Windows 7: devi andare su "Tutti i programmi" - "Accessori" - "Windows PowerShell" e avviare la shell "Windows PowerShell". Per Windows 10: devi trovare il gruppo con la lettera "W" e in esso troverai "Windows PowerShell".
  2. Esegui "Windows PowerShell ISE"è un programma: un ambiente di sviluppo che consente di modificare ed eseguire il debug di script PowerShell, che è anche per impostazione predefinita insieme a PowerShell stesso. Dopo averlo avviato, devi solo fare clic sul pulsante "Apri" o andare al menu File - Apri e selezionare lo script desiderato, quindi premere F5 o il pulsante "Esegui script". Puoi trovare Windows PowerShell ISE nello stesso posto come PowerShell - nel menu "Start" ...
  3. Esegui la riga di comando standard e scrivici dentro:
    powershell -file<имя_скрипта> (esempio: powershell -file myscript.ps1)

Se non hai mai eseguito script PowerShell prima, molto probabilmente riceverai un messaggio: Impossibile caricare il file<имя_скрипта>, poiché l'esecuzione di script è vietata per questo sistema. Inserisci "get-help about_signing" per ulteriori informazioni. Ciò è dovuto al fatto che per motivi di sicurezza e per prevenire l'esecuzione accidentale di codice dannoso, tutti gli script devono essere firmati digitalmente.

Come posso consentire l'esecuzione di script PowerShell non firmati?

1. In PowerShell, prima di eseguire lo script, esegui il comando per abilitare l'esecuzione di script non firmati per la sessione di shell corrente:

Set-ExecutionPolicy RemoteSigned - Processo ambito

2. All'avvio dalla riga di comando standard utilizzare il parametro -executionpolicy, ad es. eseguire lo script in questo modo:

<имя_скрипта>

Entrambi i metodi impostano i criteri solo per la sessione corrente, mentre i criteri di sicurezza per l'esecuzione degli script PowerShell scritti nel registro non verranno modificati e rimarranno invariati. Se si desidera modificare "in modo permanente" la politica di sicurezza dell'esecuzione dello script, utilizzare questo metodo:

3. Lascia correre per sempre: Esegui PowerShell come amministratore, quindi esegui il comando:

Set-ExecutionPolicy RemoteSigned

Nota: Se lo script è stato scaricato da Internet, per evitare la richiesta di conferma dell'avvio, è necessario utilizzare Bypass invece di RemoteSigned, disabilitando completamente eventuali richieste e avvisi.

Come posso eseguire uno script PowerShell in background?

Per fare ciò, è sufficiente utilizzare il parametro di avvio -WindowStyle, che può assumere i seguenti valori: Normale, Ridotto a icona, Ingrandito e Nascosto. Pertanto, per eseguire uno script non firmato in background, è necessario eseguire il comando:

powershell -executionpolicy RemoteSigned -WindowStyle Hidden -file<имя_скрипта>

Puoi anche aggiungere -NonInteractive se lo desideri in modo che lo script non faccia domande. Pertanto, lo script verrà eseguito in modo invisibile all'utente. Fai attenzione usando questo metodo.

Esecuzione di uno script PowerShell con parametri

In realtà, l'avvio dovrebbe essere eseguito come se si stesse eseguendo un normale programma o un file bat con parametri. Ad esempio, per eseguire uno script con i parametri del comando, puoi scrivere il seguente comando:

powershell -executionpolicy RemoteSigned -file<имя_скрипта>param1 param2 "un altro parametro di testo"

Nello script stesso, puoi ottenere questi parametri in questo modo:

Param ($ var1, $ var2, $ var3) echo $ var1, $ var2, $ var3

In PowerShell ISE, puoi eseguire uno script con parametri allo stesso modo, usando il riquadro dei comandi.

Come posso eseguire uno script PowerShell utilizzando un collegamento?

Ci sono due modi per portare a termine questo compito:

  1. Crea un file bat/cmd in cui scrivere il comando per eseguire lo script (hai visto i parametri sopra)
  2. Crea un collegamento a PowerShell, che può essere trovato nella cartella c: \ Windows \ System32 \ Windows PowerShell \ v<версия>\ e aggiungi i parametri necessari nelle proprietà del collegamento nel campo "Oggetto".

Quindi, ad esempio, per eseguire uno script powershell quando un utente accede, puoi semplicemente creare un collegamento come descritto al punto 2 e posizionarlo in avvio. Inoltre, la creazione di un collegamento in uno dei modi precedenti renderà più semplice eseguire lo script come amministratore o come qualsiasi altro utente come un normale programma.

Il linguaggio di scripting PowerShell è uno strumento piuttosto potente per risolvere vari problemi, ma può essere utilizzato non solo per cose buone, ma anche per danni, quindi usalo con saggezza;)

La maggior parte delle risposte esistenti spiega come, ma pochissime spiegano perché. E prima di iniziare a eseguire codice da estranei su Internet, in particolare il codice che disabilita le misure di sicurezza, devi capire esattamente cosa stai facendo. Quindi ecco qualche dettaglio in più su questo problema.

I criteri di esecuzione di Windows PowerShell consentono di definire le condizioni in base alle quali Windows PowerShell carica i file di configurazione ed esegue gli script.

Vantaggi elencati in Nozioni di base di PowerShell - Criteri di esecuzione e firma del codice:

  • Controllo dell'esecuzione... Gestire il livello di attendibilità per l'esecuzione degli script.
  • Comando Highjack... Impedire che i comandi vengano inseriti nel mio percorso.
  • Identificazione... Lo script è stato creato e firmato da uno sviluppatore di cui mi fido e/o firmato con un certificato di un'autorità di certificazione di cui mi fido.
  • Integrità... Gli script non possono essere modificati da malware o utenti malintenzionati.

Per controllare i criteri di esecuzione correnti, puoi eseguire Get-ExecutionPolicy. Ma probabilmente sei qui perché vuoi cambiarlo.

A tale scopo, eseguire il cmdlet Set-ExecutionPolicy.

Ci sono due decisioni importanti che devi prendere quando aggiorni una policy di esecuzione.

Tipo di politica di esecuzione:

  • Limitato† - Nessuno script sul sistema può eseguire file locali, remoti o scaricati.
  • AllSigned... Tutti gli script in esecuzione richiedono una firma digitale.
  • RemoteSigned- tutti gli script remoti (UNC) o scaricabili devono essere firmati.
  • senza restrizioni- nessuna firma richiesta per nessun tipo di script.

Ambito del nuovo cambiamento

  • LocalMachine† - Il criterio di esecuzione interessa tutti gli utenti del computer.
  • Utente corrente... La politica di esecuzione interessa solo l'utente corrente.
  • Processi... I criteri di esecuzione interessano solo il processo corrente di Windows PowerShell.

= Valore predefinito

Ad esempio: se si desidera modificare il criterio in RemoteSigned solo per CurrentUser, è necessario eseguire il comando seguente:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Nota... Per modificare la politica di esecuzione, è necessario eseguire PowerShell come amministratore... Se sei in modalità normale e provi a modificare la politica di esecuzione, riceverai il seguente errore:

L'accesso alla chiave di registro "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ ShellIds \ Microsoft.PowerShell" è negato. Per modificare i criteri di esecuzione per l'ambito predefinito (LocalMachine), avviare Windows PowerShell con l'opzione Esegui come amministratore.

Se desideri rafforzare le restrizioni interne sui tuoi script che non sono stati scaricati da Internet (o almeno non contengono metadati UNC), puoi forzare la policy a eseguire script firmati. Per firmare i tuoi script, puoi seguire le istruzioni nell'articolo di Scott Hanselman Sign PowerShell Scripts.

Nota... La maggior parte delle persone può ricevere questo errore quando aprono Powershell perché la prima cosa che PS cerca di fare all'avvio è eseguire lo script del profilo utente che imposta il tuo ambiente, ma ti piace.

Il file di solito si trova nella cartella

% UserProfile% \ My Documents \ WindowsPowerShell \ Microsoft.PowerShellISE_profile.ps1

Puoi trovare la posizione esatta eseguendo la variabile PowerShell

$ profilo

Se il profilo non ha nulla che ti interessa e non vuoi preoccuparti delle tue impostazioni di sicurezza, puoi semplicemente eliminarlo e PowerShell non troverà nulla che non possa fare.

Ciao a tutti oggi voglio dirvi come eseguire uno script PowerShell in Windows. Immagina una situazione, hai scritto uno script che semplifica notevolmente la visualizzazione delle informazioni su Active Directory, apri lo snap-in powershell, scrivi il percorso del tuo script, premi invio e ricevi un errore.

Impossibile caricare il file<путь к вашему файлу>, poiché l'esecuzione di script è vietata per questo sistema. Inserisci "get-help about_signing" per ulteriori informazioni.

Vediamo come risolverlo.

PowerShell ha una serie di modalità di esecuzione che determinano quale tipo di codice può essere eseguito. Tutto questo è controllato da una chiave di registro che risiede in HKLM. Ci sono 4 diverse modalità di esecuzione:

Limitato(Limitato): il criterio di esecuzione predefinito non consente lo scripting e consente solo comandi interattivi.

Tutto firmato(Tutti firmati): consente a tutti gli script di funzionare. Vero, tutti gli script e i file di configurazione devono essere firmati da un editore di cui ti fidi; questa modalità ti espone al rischio di script firmati (ma dannosi), dopo aver ricevuto conferma di fiducia nell'editore.

Cancellato firmato(Firmato in remoto): gli script locali funzionano senza firma. Tutti gli script scaricati devono essere firmati digitalmente.

Illimitato(Illimitato): tutti gli script e i file di configurazione ricevuti da applicazioni di comunicazione come Microsoft Outlook, Internet Explorer, Outlook Express e Windows Messenger funzionano dopo aver verificato che il file proviene da Internet; non sono richieste firme digitali; questa modalità ti mette a rischio di eseguire script dannosi non firmati.

Per impostazione predefinita, PowerShell usa la modalità con restrizioni. In questa modalità, PowerShell funziona solo come shell interattiva. Non consente lo scripting e carica solo i file di configurazione firmati da un editore di cui ti fidi.

Consenti l'esecuzione di script PowerShell

Per eseguire gli script che hai creato, devi abilitare l'esecuzione di script non attendibili utilizzando il comando Set-ExecutionPolicy remotesigned e conferma (Attenzione!!! Per eseguire questo comando, è necessario eseguire PowerShell con diritti di amministratore). Successivamente, puoi riavviare l'esecuzione dello script.

Sulla domanda, premi Y per abilitare l'esecuzione degli script. Dopo queste manipolazioni, puoi eseguire il tuo script.

Principali articoli correlati