Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Breve descrizione
Viene descritto un modo più semplice e in linguaggio naturale per creare script di filtri 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 scriptblock. 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 agli alias corrispondenti where e foreach.
È possibile usare un metodo sui membri di una raccolta (più comunemente, una matrice) senza fare riferimento alla variabile $_ automatica all'interno di uno scriptblock.
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 viene chiamato il metodo GetKeyAlgorithm su ogni oggetto dell'insieme. Se l'oggetto ricevuto dalla pipeline non ha un metodo GetKeyAlgorithm, 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 in una raccolta senza fare riferimento alla variabile $_ automatica all'interno di uno scriptblock. 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 uno scriptblock. La sintassi semplificata legge più come un'istruzione del linguaggio naturale e può essere più facile da comprendere.
Il nome del metodo GetKeyAlgorithm 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 seguente, Description viene 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 del metodo GetFiles viene passato al parametro MemberName del comando ForEach-Object. Il valore .* viene passato al parametro ArgumentList. Il metodo GetFiles() è chiamato con il parametro .* del criterio di ricerca per ogni oggetto System.IO.DirectoryInfo restituito da Get-ChildItem.
Get-ChildItem /home -Directory | foreach GetFiles .*
Vedere anche
- about_Comparison_Operators
- about_Foreach
- ForEach-Object
- Where-Object