about_Simplified_Syntax

Descrizione breve

Vengono descritti i modi più semplici e in linguaggio naturale dei filtri di scripting per le raccolte di oggetti.

Descrizione lunga

La sintassi semplificata, introdotta in Windows PowerShell 3.0, consente di compilare alcuni comandi di filtro senza usare blocchi di script. La sintassi semplificata è più simile al linguaggio naturale ed è utile principalmente con raccolte di oggetti che vengono inviati tramite pipe ai comandi Where-Object e ForEach-Object o ai where corrispondenti alias e foreach.

È possibile usare un metodo sui membri di una raccolta (più comunemente, una matrice) senza fare riferimento alla variabile $_ automatica all'interno di un blocco di script.

Si considerino le due chiamate seguenti:

Sintassi standard

Get-ChildItem Cert:\LocalMachine\Root |
    Where-Object -FilterScript { $_.FriendlyName -eq 'Verisign' }
Get-ChildItem Cert:\ -Recurse |
    ForEach-Object -FilterScript { $_.GetKeyAlgorithm() }

Nota

Nel secondo comando il GetKeyAlgorithm metodo viene chiamato su ogni oggetto dell'insieme. Se l'oggetto ricevuto dalla pipeline non dispone di un GetKeyAlgorithm metodo, il comando genera un errore.

Sintassi semplificata

Nella sintassi semplificata, gli operatori di confronto che operano sui membri di oggetti di una raccolta vengono implementati come parametri. Inoltre, è possibile richiamare un metodo sugli oggetti di una raccolta senza fare riferimento alla variabile $_ automatica all'interno di un blocco di script. Confrontare le due chiamate seguenti con gli esempi di sintassi standard:

Get-ChildItem Cert:\LocalMachine\Root |
    Where-Object -Property FriendlyName -EQ 'Verisign'
Get-ChildItem Cert:\ -Recurse |
    ForEach-Object -MemberName GetKeyAlgorithm

Poiché i parametri Property e MemberName sono posizionali, è possibile ometterli dal comando . Usando gli alias, è possibile semplificare ulteriormente i comandi:

dir Cert:\LocalMachine\Root | Where FriendlyName -EQ 'Verisign'
dir Cert:\ -Recurse | ForEach GetKeyAlgorithm

Mentre entrambe le sintassi funzionano, la sintassi semplificata restituisce risultati senza fare riferimento alla variabile $_ automatica all'interno di un blocco di script. La sintassi semplificata legge più come un'istruzione del linguaggio naturale e può essere più facile da comprendere.

Il nome GetKeyAlgorithm del metodo viene passato come argomento per il parametro MemberName di ForEach-Object. Quando si richiama il metodo usando la sintassi semplificata, il metodo viene chiamato per ogni oggetto nella pipeline solo se tale oggetto dispone di tale metodo. Di conseguenza, si ottengono gli stessi risultati, ma senza errori.

Nell'esempio successivo viene Description passato al parametro MemberName di ForEach-Object. Il comando visualizza la descrizione di ogni oggetto System.Diagnostics.Process restituito da Get-Process.

Get-Process | foreach Description

In questo esempio il nome GetFiles del metodo viene passato al parametro MemberName del ForEach-Object comando. Il .* valore viene passato al parametro ArgumentList . Il GetFiles() metodo viene chiamato con il parametro .* del criterio di ricerca per ogni oggetto System.IO.DirectoryInfo restituito da Get-ChildItem.

Get-ChildItem /home -Directory | foreach GetFiles .*

Vedi anche