PowerShell Cookbook

Questa è una lista di elementi che io e i miei colleghi abbiamo trovato utili nel nostro lavoro. Non vuole essere enciclopedico, ma piuttosto un posto per registrare cose che un principiante potrebbe trovare utili, specialmente cose che potrebbero richiedere molto tempo per capirle.

Questa pagina è stata iniziata prima che O’Reilly pubblicasse Windows PowerShell Cookbook di Lee Holmes. Raccomando il libro di O’Reilly, ma questa pagina non è collegata ad esso.

Vedi anche PowerShell gotchas.

Outline

  • Per iniziare/installazione
    • Installa PowerShell
    • Installa la libreria Community Extensions
    • Elimina il messaggio “l’esecuzione degli script è disabilitata”
    • Imposta il tuo “scripts:” posizione dell’unità PowerShell
    • Configura il tuo prompt dei comandi
  • Compiti vari
    • Scrivi sullo schermo
    • Propone all’utente un input
    • Manipola le date
    • Invia e-mail
    • Dorme
    • Elenca una directory (ricorsivamente)
    • Testa se un file esiste
    • Leggi le righe del file in un array
    • Scrivere in un file
    • Rinominare un file
    • Eliminare un file
    • Lavorare con le espressioni regolari
    • Splittare e unire stringhe
    • Afferrare una pagina web
    • Leggere e scrivere nel registro di sistema
    • Comprendere le virgolette
    • Tempizzare un comando
    • Testo parlato
    • Accedere agli appunti di Windows
    • Caricare un .NET
    • Eseguire il codice creato in fase di esecuzione
    • Eseguire un programma con uno spazio nel suo percorso

Iniziare/installare

Installare PowerShell

È possibile ottenere PowerShell da:
https://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx

top

Installare la libreria Community Extensions

La libreria PowerShell Community Extensions (PSCX) è disponibile qui:
https://www.codeplex.com/Wiki/View.aspx?ProjectName=PowerShellCX

È un’utile raccolta di cmdlets e funzioni. Installa un menu contestuale “PowerShell Here” in WindowsExplorer che apre una finestra di comando PowerShell nella cartella su cui si fa clic con il tasto destro. Inoltre, PSCX fornisce un file Profile.ps1 di esempio.

Una volta che PSCX è installato, digita man about_pscx per vedere una panoramica dei cmdlets, provider, ecc.

top

Sbarazzati del messaggio “l’esecuzione degli script è disabilitata”

Il primo problema che potresti incontrare durante l’esecuzione degli script PowerShell è qualcosa di simile a questo:

PSH> .\myScript.ps1File D:\myScript.ps1 cannot be loaded. The fileD:\myScript.ps1 is not digitally signed. The script will not execute on thesystem. Please see "get-help about_signing" for more details..
At line:1 char:13 + .\myScript.ps1 <<<<

Questo è dovuto all’impostazione di sicurezza predefinita in PowerShell che vieta l’esecuzione degli script dannosi.

Puoi alterare questo comportamento facendo così:

PSH> set-executionPolicy RemoteSigned

Ora solo gli script provenienti da fonti remote richiederanno la firma digitale.

top

Imposta il tuo “scripts:” PowerShell drive location

Una volta che hai scritto un certo numero di script PowerShell, potresti trovare utile raccoglierli in un posto e creare un PSDrive chiamato scripts: per trovarli rapidamente. Potresti aggiungere quanto segue al tuo profilo PSCX per creare tale PSDrive.

New-PSdrive -name scripts -PSprovider filesystem -root C:\bin\PowerShellScripts

top

Configura il tuo prompt dei comandi

Per configurare il tuo prompt dei comandi, crea semplicemente una funzione chiamata prompt e mettila nel tuo profilo. Per esempio, il seguente causerà la visualizzazione della directory di lavoro.

function prompt { "$pwd> " }

Nota che puoi mettere qualsiasi codice tu voglia dentro la funzione prompt e quel codice verrà eseguito ogni volta che premi return.

top

Compiti vari

Scrivi sullo schermo

Usa Write-Host per scrivere output. Puoi opzionalmente specificare -foregroundcolor per colorare l’output. Per esempio, gli errori e gli avvertimenti possono essere evidenziati in rosso.

Esempio:

Write-Host "Hello world" -foregroundcolor red

top

Chiedi all’utente un input

Usa Read-Host.

Esempio:

$a = Read-Host "Enter your name"Write-Host "Hello" $a

top

Manipola le date

La cmdlet get-date restituisce un oggetto DateTime. Senza argomento, restituisce l’ora e la data attuali. Con un argomento stringa, senza bisogno di virgolette, analizza la stringa in una data.

Esempio: Trova il numero di giorni e ore dal bicentenario degli Stati Uniti.

(get-date) - (get-date 7/4/1976)

Puoi anche lanciare le stringhe in un oggetto DateTime usando il cast .

top

Invia email

Usa il cmdlet Send-SmtpMail da PowerShell Community Extensions.

Esempio:

Send-SmtpMail -SmtpHost wotan.mdacc.tmc.edu -from [email protected] -to [email protected] -body "hello world"

top

Sleep

Usa il cmdlet Start-Sleep. Impiega secondi per impostazione predefinita, ma ha un’opzione -milliseconds.

Esempio:

Write-Host "hello"; Start-Sleep 5; Write-Host "world"

top

Elenca una directory (ricorsivamente)

Puoi usare il comando dir, che è davvero un alias di Get-ChildItem. Per elencare ricorsivamente una directory, basta aggiungere l’opzione -recurse.

Esempio:

dir f:\bin -recurse

top

Verificare se un file esiste

Usa test-path.

top

Leggi le linee del file in un array

Usa get-content.

Esempio:

$a = (get-content foo.txt)

top

Scrivi su un file

Usa Out-File. A meno che tu non voglia un output Unicode, specifica -encoding ASCII

Esempio:

$foo | out-file -encoding ASCII foo.txt

top

Rinomina un file

Usa Rename-Item o il suo alias ren.

top

Elimina un file

Usa Delete-Item o il suo alias del.

top

Lavora con le espressioni regolari

Vedi Le espressioni regolari in PowerShell e Perl.

top

Dividi e unisci le stringhe

Le stringhe hanno un metodo split. L’argomento di split() è una stringa contenente i caratteri da dividere. La funzione ::split è più generale. Il suo primo argomento è la stringa da dividere, e il suo secondo argomento è un’espressione regolare su cui dividere.

Esempio:

$a.split("`t ")

romperà la stringa $a in un array di stringhe, dividendo ovunque ci sia un tab o uno spazio.

Esempio:

$a = "123,456,apple"; ::split($a, ",(?!\d)")

dividerà $a sulle virgole non seguite da cifre. Quindi la divisione restituirà “123,456” e “apple”.

Se la stringa che stai dividendo è un percorso di Windows, potresti voler usare il comando specializzato Split-Path.

Per unire un array in una singola stringa, usa il metodo ::join. Il primo argomento è il carattere di separazione e il secondo è l’array.

Esempio:

$a = 1, 2, 3;#note: this is an array, not a string$b = ::join("*", $a)

Ora $b contiene “1*2*3”.

top

Afferra una pagina web

Usa il Get-Url di PSCX o l’oggetto net.webclient di .NET. Il primo è più succinto ma il secondo permette più opzioni.

Esempio:

$w = Get-Url "https://www.w3.org"

$w = (new-object net.webclient).DownloadString("https://www.w3.org")

Il codice (new-object net.webclient) crea un oggetto .NET WebClient con molti metodi utili. Per esempio, potete chiamare DownladFile per salvare direttamente su disco piuttosto che su una stringa. Ci sono anche i metodi UploadData e UploadFile.

top

Leggere e scrivere nel registro

Puoi navigare nel registro come faresti con il file system, anche se ci sono alcuni dettagli da conoscere.

Ogni alveare del registro è come un drive. Così, per esempio, per esplorare HKEY_CURRENT_USER, potete cd HKCU: e poi usare cd per lavorare lungo l’albero. Usate Get-ItemProperty per leggere e Set-ItemProperty per scrivere. Puoi anche usare Remove-ItemProperty per cancellare.

Esempio:

I comandi seguenti elencheranno il contenuto del nodo del registro che configura la shell cmd.exe. Impostando CompletionChar a 9, attiviamo il completamento della tabulazione.

cd HKCU:\Software\Microsoft\Command ProcessorGet-ItemProperty .Set-ItemProperty . -name CompletionChar -Value 9

Questo articolo di TechNet entra in maggiori dettagli.

top

Comprendere le virgolette

PowerShell ha quattro tipi di virgolette: virgolette ordinarie singole e doppie, e stringhe qui singole e doppie. All’interno degli apici doppi e delle doppie stringhe qui, i nomi delle variabili vengono sostituiti con i loro valori e le sequenze di escape di PowerShell vengono interpretate. Negli apici singoli e nelle stringhe qui singole, i nomi delle variabili non vengono espansi e le sequenze di escape non vengono interpretate. Per esempio, lo snippet di codice

 $a = "bar" 'foo`t$a', "foo`t$a"

produrrà l’output

 foo`t$a foo bar

perché all’interno delle doppie virgolette, `t si espande in una scheda e $a si espande in “bar”.

Le here-stringhe di PowerShell sono come gli here-documenti in Perl. All’interno di una here-string, gli apici doppi e singoli non sono speciali ma quotati letteralmente. Inoltre, le interruzioni di riga sono conservate.

Un here-string inizia con @" o @' e finisce con gli stessi simboli nell’ordine opposto. Ci deve essere una newline dopo il marcatore di apertura e prima del marcatore di chiusura.

Esempio

 $a = "bar" $b = @" foo "baz" 'qux' $a "@ $b

produce

 foo "baz" 'qux' bar

e

 $a = "bar" $b = @' foo "baz" 'qux' $a '@ $b

produce

 foo "baz" 'qux' $a

Nota che non ci deve essere spazio bianco dopo la citazione che apre una here-string. Altrimenti otterrete il messaggio “Unrecognized token in source text.”

Anche se sembrano simili, le here-string di PowerShell e le verbatim strings di C# sono abbastanza diverse. La seguente tabella riassume le differenze.

C# verbatim strings PowerShell here-strings
Può contenere interruzioni di riga Deve contenere interruzioni di riga
Solo la varietà delle doppie virgolette Varietà delle virgolette singole e doppie
Inizia con @” Inizia con @” (o @’) più un’interruzione di riga
Finisce con “ Finisce con un’interruzione di riga seguita da “@ (o ‘@)
Non può contenere doppi apici nonnon escape di doppi apici Può contenere virgolette
Spegne le sequenze di escape di C# ‘@ spegne le sequenze di escape di PowerShell ma “@ non lo fa

top

Cronometra un comando

Usa Measure-Command per cronometrare il tempo necessario a completare un compito.

top

Text to speech

Utilizza Out-Speech da PSCX.

top

Accedi agli appunti di Windows

Utilizza i cmdlets PSCX Get-Clipboard e Out-Clipboard per leggere e scrivere negli appunti.

top

Carica un assembly .NET

Puoi chiamare LoadWithPartialName. Per esempio, per caricare l’assembly per l’API di Team Foundation Server, dovresti eseguire

::LoadWithPartialName("Microsoft.TeamFoundation.Client")

Vedi anche Resolve-Assembly da PSCX.

top

Esegui codice creato a tempo di esecuzione

Il comando Invoke-Expression è analogo a eval in Perl o JavaScript. Invoke-Expression $str esegue il codice contenuto nella stringa $str.

top

Esegui un programma con uno spazio nel suo percorso

Metti le virgolette intorno al percorso e metti una e commerciale davanti. Per esempio,

& "C:\Program Files\WinEdt Team\WinEdt\WinEdt.exe"

lancerà l’eseguibile WinEdt.exe che ha due spazi nel suo percorso completo.

Nota che non puoi omettere la virgola. A differenza di cmd.exe, PowerShell non assume che tutte le stringhe siano comandi. Senza l’e commerciale, un percorso citato è solo una stringa.

top

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.