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
- Iniziare/installare
- Installare PowerShell
- Installare la libreria Community Extensions
- Sbarazzati del messaggio “l’esecuzione degli script è disabilitata”
- Imposta il tuo “scripts:” PowerShell drive location
- Configura il tuo prompt dei comandi
- Compiti vari
- Scrivi sullo schermo
- Chiedi all’utente un input
- Manipola le date
- Invia email
- Sleep
- Elenca una directory (ricorsivamente)
- Verificare se un file esiste
- Leggi le linee del file in un array
- Scrivi su un file
- Rinomina un file
- Elimina un file
- Lavora con le espressioni regolari
- Dividi e unisci le stringhe
- Afferra una pagina web
- Leggere e scrivere nel registro
- Comprendere le virgolette
- Cronometra un comando
- Text to speech
- Accedi agli appunti di Windows
- Carica un assembly .NET
- Esegui codice creato a tempo di esecuzione
- Esegui un programma con uno spazio nel suo percorso
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