Domanda

Ho alcune righe di codice PowerShell che vorrei utilizzare come script automatizzato.Il modo in cui vorrei che funzionasse è poterlo richiamare utilizzando una delle seguenti opzioni:

  1. Una riga di comando che apre PowerShell, esegue lo script e chiude PowerShell (verrebbe utilizzata per una routine di compilazione globale)
  2. Un file su cui posso fare doppio clic per eseguire quanto sopra (utilizzare questo metodo durante il test manuale dei componenti del mio processo di creazione)

Ho esaminato la documentazione di PowerShell online e, sebbene sia possibile trovare molti script, non sono riuscito a trovare istruzioni su come fare ciò di cui ho bisogno.Grazie per l'aiuto.

È stato utile?

Soluzione

Salva il tuo script come file .ps1 e avvialo utilizzando powershell.exe, in questo modo:

powershell.exe .\foo.ps1

Assicurati di specificare il percorso completo dello script e di aver impostato il livello della policy di esecuzione almeno su "RemoteSigned" in modo che sia possibile eseguire script locali non firmati.

Altri suggerimenti

Da http://blogs.msdn.com/b/jaybaz_ms/archive/2007/04/26/powershell-polyglot.aspx

Se sei disposto a macchiare il tuo bellissimo script PowerShell con un piccolo CMD, puoi utilizzare un trucco poliglotta PowerShell-CMD.Salva il tuo script PowerShell come file .CMD e inserisci questa riga in alto:

@PowerShell -ExecutionPolicy Bypass -Command Invoke-Expression $('$args=@(^&{$args} %*);'+[String]::Join(';',(Get-Content '%~f0') -notmatch '^^@PowerShell.*EOF$')) & goto :EOF

Se hai bisogno di supportare gli argomenti tra virgolette, esiste una versione più lunga, che consente anche i commenti.(notare l'insolito trucco del commento CMD del doppio @).

@@:: This prolog allows a PowerShell script to be embedded in a .CMD file.
@@:: Any non-PowerShell content must be preceeded by "@@"
@@setlocal
@@set POWERSHELL_BAT_ARGS=%*
@@if defined POWERSHELL_BAT_ARGS set POWERSHELL_BAT_ARGS=%POWERSHELL_BAT_ARGS:"=\"%
@@PowerShell -ExecutionPolicy Bypass -Command Invoke-Expression $('$args=@(^&{$args} %POWERSHELL_BAT_ARGS%);'+[String]::Join(';',$((Get-Content '%~f0') -notmatch '^^@@'))) & goto :EOF

Fonte per la risposta di Matt.

Posso eseguirlo facendo doppio clic su un file creando un file batch con quanto segue:

C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe LocationOfPS1File

Esegui lo script automaticamente da un altro script (ad es.File batch)

Come suggerito da Matt Hamilton, crea semplicemente il tuo script PowerShell .ps1 e chiamalo utilizzando:

PowerShell C:\Path\To\YourPowerShellScript.ps1

oppure se la directory di lavoro del file batch è la stessa directory in cui si trova lo script PowerShell, puoi utilizzare un percorso relativo:

PowerShell .\YourPowerShellScript.ps1

E prima che funzioni, dovrai impostare la politica di esecuzione del PC, che ti mostrerò come fare di seguito.


Esegui script manualmente Metodo 1

Puoi vedere il mio post sul blog per ulteriori informazioni, ma essenzialmente crea il file di script PowerShell .ps1 per fare ciò che desideri, quindi crea un file batch .cmd nella stessa directory e utilizza quanto segue per il contenuto del file:

@ECHO OFF
SET ThisScriptsDirectory=%~dp0
SET PowerShellScriptPath=%ThisScriptsDirectory%MyPowerShellScript.ps1
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& '%PowerShellScriptPath%'"

Sostituzione MyPowerShellScript.ps1 sulla terza riga con il nome del file dello script PowerShell.

Ciò ti consentirà di fare semplicemente doppio clic sul file batch per eseguire lo script PowerShell ed eviterà di dover modificare la policy di esecuzione di PowerShell.

Il mio post sul blog mostra anche come eseguire lo script PowerShell come amministratore se è qualcosa che devi fare.


Esegui script manualmente Metodo 2

In alternativa, se non desideri creare un file batch per ciascuno dei tuoi script PowerShell, puoi modificare il comportamento predefinito degli script PowerShell da Modifica a Esegui, consentendoti di fare doppio clic sui file .ps1 per eseguirli.

Esiste un'ulteriore impostazione del registro che vorrai modificare in modo da poter eseguire script il cui percorso file contiene spazi.Mostro come fare entrambe le cose in questo post del blog.

Con questo metodo, tuttavia, dovrai prima impostare la politica di esecuzione per consentire l'esecuzione degli script.Devi farlo solo una volta per PC e può essere fatto eseguendo questa riga in un prompt dei comandi di PowerShell.

Start-Process PowerShell -ArgumentList 'Set-ExecutionPolicy RemoteSigned -Force' -Verb RunAs

Set-ExecutionPolicy RemoteSigned -Force è il comando che modifica effettivamente la politica di esecuzione;questo lo imposta su Firmato remoto, quindi puoi cambiarlo in qualcos'altro se necessario.Inoltre, questa riga eseguirà automaticamente PowerShell come amministratore, operazione necessaria per modificare la politica di esecuzione.

puoi usare questo comando:powershell.exe -argomento c:\scriptPath\Script.ps1

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top