Sei sulla pagina 1di 9

ARGOMENTO

about_Functions

DESCRIZIONE BREVE
Descrive come creare e utilizzare le funzioni in Windows PowerShell.

DESCRIZIONE DETTAGLIATA
Per funzione si intende un elenco di istruzioni a cui è stato
assegnato un nome. Quando si esegue una funzione, se ne digita il
nome. Le istruzioni incluse nell'elenco vengono eseguite come se
fossero state digitate al prompt dei comandi.

Analogamente ai cmdlet, le funzioni possono disporre di


parametri. I parametri possono essere denominati, posizionali,
opzionali o dinamici. I parametri delle funzioni possono essere
letti dalla riga di comando o dalla pipeline.

Le funzioni possono restituire valori che è possibile


visualizzare, assegnare a variabili o passare ad altre funzioni o
cmdlet.

L'elenco di istruzioni delle funzioni può contenere tipi diversi


di elenchi di istruzioni con le parole chiave Begin, Process ed
End. Questi elenchi di istruzioni gestiscono l'input da pipeline
in modo diverso.

Un filtro è un tipo speciale di funzione che utilizza la parola


chiave Filter.

Le funzioni possono anche essere utilizzate come cmdlet. È


possibile creare una funzione utilizzabile come cmdlet senza
utilizzare la programmazione C#. Per ulteriori informazioni, vedere
about_Functions_Advanced.

Sintassi
Di seguito è riportata la sintassi di una funzione:

function [<ambito:>]<nome> [([type]$parameter1[,[type]$parameter2])]


{
param([type]$parameter1 [,[type]$parameter2])

dynamicparam {<elenco istruzioni>}

begin {<elenco istruzioni>}


process {<elenco istruzioni>}
end {<elenco istruzioni>}
}

Una funzione include gli elementi seguenti:

- Una parola chiave Function


- Un ambito (facoltativo)
- Un nome selezionato dall'utente
- Un numero qualsiasi di parametri denominati (facoltativo)
- Uno o più comandi di Windows PowerShell racchiusi tra
parentesi graffe ({})
Per ulteriori informazioni sulla parola chiave Dynamicparam e
sui parametri dinamici nelle funzioni, vedere
about_Functions_Advanced_Parameters.

Funzioni semplici
L'utilità di una funzione non dipende dalla sua complessità. La
funzione seguente ottiene le variabili di ambiente che non
appartengono all'account System del sistema corrente:

function other_env
{
get-wmiObject win32_environment |
where {$_.username -ne "<Sistema>"}
}

Per eseguire la funzione, digitare "other_env".

È possibile creare una casella degli strumenti di brevi


funzioni utili. Aggiungere queste funzioni al proprio profilo
di Windows PowerShell, come illustrato in about_Profiles e più
avanti in questo argomento.

Funzioni con parametri


Le funzioni possono essere utilizzate con parametri, inclusi
quelli denominati, posizionali, opzionali e dinamici. Per ulteriori
informazioni sui parametri dinamici nelle funzioni, vedere
about_Functions_Advanced_Parameters.

Parametri denominati
È possibile definire un numero qualsiasi di parametri
denominati, nonché includere un valore predefinito per i
parametri denominati, come illustrato più avanti in questo
argomento.

È possibile definire parametri all'interno di parentesi graffe


utilizzando la parola chiave Param, come illustrato nella
sintassi di esempio seguente:

function <name> {
param ([type]$parameter1[,[type]$parameter2])
<statement list>
}

È inoltre possibile definire parametri all'esterno di parentesi


graffe senza utilizzare la parola chiave Param, come illustrato
nella sintassi di esempio seguente:

function <nome> [([type]$parameter1[,[type]$parameter2])] {


<elenco istruzioni>
}

Non esiste alcuna differenza tra questi due metodi, utilizzare


quello preferito.

Quando si esegue la funzione, il valore fornito per un


parametro viene assegnato a una variabile che contiene il nome
del parametro. Il valore di quella variabile può essere
utilizzato nella funzione.

Di seguito è riportato l'esempio di una funzione denominata


Small_files. Questa funzione, che dispone di un parametro
$size, visualizza tutti i file le cui dimensioni sono inferiori
al valore del parametro $size ed esclude le directory:

function small_files {
param ($size)
Get-ChildItem c:\ | where {
$_.length -lt $size -and !$_.PSIsContainer}
}

Nella funzione è possibile utilizzare la variabile $size,


ovvero il nome definito per il parametro.

Per utilizzare questa funzione, digitare il comando seguente:

C:\PS> function small_files -size 50

È inoltre possibile immettere un valore per un parametro


denominato senza il nome del parametro. Ad esempio, il comando
seguente fornisce lo stesso risultato di un comando che assegna
un nome al parametro Size:

C:\PS> function small_files 50

Per definire un valore predefinito per un parametro, digitare


un segno di uguale e il valore dopo il nome del parametro, come
illustrato nella variazione dell'esempio Small_files riportata
di seguito:

function small_files ($size = 100) {


Get-ChildItem c:\ | where {
$_.length -lt $size -and !$_.PSIsContainer}
}

Se si digita "small_files" senza un valore, la funzione assegna


100 a $Size. Se si fornisce un valore, la funzione lo utilizza.

Parametri posizionali
Per parametro posizionale si intende un parametro senza un
nome. In Windows PowerShell viene utilizzato l'ordine dei
valori dei parametri per associare ogni valore a un parametro
della funzione.

Quando si utilizzano i parametri posizionali, digitare uno o


più valori dopo il nome della funzione. I valori dei parametri
posizionali vengono assegnati alla variabile di tipo matrice
$arg. Il valore che segue il nome della funzione viene
assegnato alla prima posizione nella matrice $args, $args[0].

La funzione Extension seguente aggiunge l'estensione di file


txt a un nome file fornito:

function extension {
$name = $args[0] + ".txt"
$name
}

C:\PS> extension myTextFile


myTextFile.txt

Le funzioni possono accettare più di un parametro posizionale.


Nell'esempio seguente vengono visualizzati i valori immessi con
il nome della funzione.

function repeat { foreach ($arg in $args) { "L'input è $arg" } }

C:\PS>repeat one
L'input è one

C:\PS> repeat one two three


L'input è one
L'input è two
L'input è three

Questa funzione può essere utilizzata con qualsiasi numero di


valori. La funzione assegna ogni valore a una posizione nella
matrice $args.

Parametri opzionali
Un'opzione è un parametro che non richiede un valore. Pertanto,
digitare il nome della funzione seguito dal nome del parametro
opzionale.

Per definire un parametro opzionale, specificare il tipo


[opzione] prima del nome del parametro, come illustrato
nell'esempio seguente:

function switchExample {
param ([switch]$on)
if ($on) { "Switch on" }
else { "Switch off" }
}

Quando si digita il parametro opzionale On dopo il nome della


funzione, la funzione visualizza "Switch On". Senza il
parametro opzionale, visualizza "Switch off".

C:\PS> SwitchExample -on


Switch on

C:\PS> SwitchExample
Switch off
È inoltre possibile assegnare un valore booleano a un'opzione
quando si esegue la funzione, come illustrato nell'esempio seguente:

C:\PS> SwitchExample -on:$true


Switch on

C:\PS> SwitchExample -on:$false


Switch off

Reindirizzamento di oggetti alle funzioni


Qualsiasi funzione può accettare l'input da pipeline. È
possibile controllare il modo in cui una funzione elabora
l'input da pipeline utilizzando le parole chiave Begin, Process
ed End. Nella sintassi di esempio seguente vengono illustrate
le tre parole chiave:

function <nome> {
begin {<elenco istruzioni>}
process {<elenco istruzioni>}
end {<elenco istruzioni>}
}

L'elenco di istruzioni Begin viene eseguito una sola volta


all'inizio della funzione.

L'elenco di istruzioni Process viene eseguito una volta per


ogni oggetto nella pipeline.
Mentre è in corso l'esecuzione del blocco Process, ogni oggetto
della pipeline viene assegnato alla variabile automatica $_, un
oggetto alla volta.

Dopo che la funzione ha ricevuto tutti gli oggetti nella


pipeline, l'elenco di istruzioni End viene eseguito una volta.
Se non si utilizza la parola chiave Begin, Process o End, tutte
le istruzioni vengono considerate come un elenco di istruzioni End.

La funzione seguente utilizza la parola chiave Process. La


funzione visualizza esempi dalla pipeline:

function pipelineFunction
{
process {"Il valore è: $_"}
}

Per dimostrare l'utilizzo di questa funzione, immettere una


matrice di numeri creata con virgole, come illustrato
nell'esempio seguente:

C:\PS> 1,2,4 | pipelineFunction


Il valore è: 1
Il valore è: 2
Il valore è: 4

Quando si utilizza una funzione in una pipeline, gli oggetti


reindirizzati alla funzione vengono assegnati alla variabile
automatica $input. La funzione esegue le istruzioni con la
parola chiave Begin prima che qualsiasi oggetto venga ricevuto
dalla pipeline. La funzione esegue le istruzioni con la parola
chiave End dopo che tutti gli oggetti sono stati ricevuti dalla
pipeline.

Nell'esempio seguente viene illustrata la variabile automatica


$input con le parole chiave Begin ed End.

function PipelineBeginEnd
{
begin {"Begin: L'input è $input"}
end {"End: L'input è $input" }
}

Se questa funzione viene eseguita utilizzando la pipeline,


ottiene i risultati seguenti:

C:\PS> 1,2,4 | PipelineBeginEnd


Begin: L'input è
End: L'input è 1 2 4

Quando viene eseguita l'istruzione Begin, la funzione non


ottiene l'input da pipeline. L'istruzione End viene eseguita
dopo che la funzione ottiene dei valori.

Se la funzione dispone di una parola chiave Process, la


funzione legge i dati in $input. Nell'esempio seguente viene
illustrato un elenco di istruzioni Process:

function PipelineInput
{
process {"Elaborazione: $_ " }
end {"End: L'input è: $input" }
}

In questo esempio ogni oggetto reindirizzato alla funzione


viene inviato all'elenco di istruzioni Process. Le istruzioni
Process vengono eseguite su ogni oggetto, un oggetto alla
volta. Quando la funzione raggiunge la parola chiave End, la
variabile automatica $input è vuota.

C:\PS> 1,2,4 | PipelineInput


Elaborazione: 1
Elaborazione: 2
Elaborazione: 4
End: L'input è:

Filtri
Per filtro si intende un tipo di funzione che viene eseguito su
ogni oggetto nella pipeline. Con tutte le istruzioni incluse in
un blocco Process, un filtro è simile a una funzione.

Di seguito è illustrata la sintassi di un filtro:

filter [<ambito:>]<nome> {<elenco istruzioni>}


Il filtro seguente accetta voci di registro dalla pipeline,
quindi visualizza l'intera voce o solo la parte del messaggio
relativa:

filter ErrorLog ([switch]$message)


{
if ($message) { out-host -inputobject $_.Message }
else { $_ }
}

Ambito della funzione


Una funzione esiste nell'ambito in cui è stata creata.

Se una funzione fa parte di uno script, è disponibile per le


istruzioni all'interno di tale script. Per impostazione
predefinita, una funzione inclusa in uno script non è
disponibile al prompt dei comandi.

È possibile specificare l'ambito di una funzione. Nell'esempio


seguente, la funzione viene aggiunta all'ambito globale:

function global:get-dependentsvs { get-service |


where {$_.dependentservices} }

Quando una funzione si trova nell'ambito globale, è possibile


utilizzare la funzione negli script, nelle funzioni e alla riga
di comando.

Le funzioni creano in genere un ambito. Gli elementi creati in


una funzione, ad esempio le variabili, esistono solo
nell'ambito della funzione.

Per ulteriori informazioni sull'ambito in Windows PowerShell, vedere


about_Scope.

Individuazione e gestione di funzioni mediante l'unità Function:


Tutte le funzioni e i filtri di Windows PowerShell vengono
automaticamente archiviati nell'unità Function:. Questa unità è
esposta dal provider Function di Windows PowerShell.

Quando si fa riferimento all'unità Function:, digitare il


carattere due punti dopo Function, proprio come se si trattasse
dell'unità C o D di un computer.

Il comando seguente visualizza tutte le funzioni nella sessione


corrente di Windows PowerShell:

C:\PS> dir function:

I comandi della funzione vengono archiviati come blocco di


script nella proprietà Definition della funzione. Ad esempio,
per visualizzare i comandi della funzione Help fornita con
Windows PowerShell, digitare:
(dir function:help).definition

Per ulteriori informazioni sull'unità Function:, vedere Function.

Riutilizzo di funzioni in nuove sessioni


Quando si digita una funzione al prompt dei comandi di Windows
PowerShell, la funzione diventa parte della sessione corrente e
rimane disponibile fino al termine della sessione.

Per utilizzare la funzione in tutte le sessioni di Windows


PowerShell, aggiungerla al profilo di Windows PowerShell. Per
ulteriori informazioni sui profili, vedere about_Profiles.

È inoltre possibile salvare la funzione in un file di script di


Windows PowerShell. Digitare la funzione in un file di testo,
quindi salvare il file con l'estensione ps1.

Scrittura della Guida relativa alle funzioni


Il cmdlet Get-Help ottiene la Guida relativa a funzioni, cmdlet,
provider e script. Per ottenere la Guida per una funzione,
digitare Get-Help seguito dal nome della funzione.

Ad esempio, per ottenere la Guida relativa alla funzione MyDisks,


digitare:

get-help MyDisks

È possibile scrivere la Guida per una funzione mediante uno dei


due metodi seguenti:

-- Guida basata su commenti relativa alle funzioni

Creare un argomento della Guida mediante parole chiave


speciali nei commenti. Per creare una Guida basata su
commenti relativa a una funzione, è necessario posizionare i
commenti all'inizio o alla fine del corpo della funzione
oppure sulle righe che precedono la parola chiave della
funzione. Per ulteriori informazioni sulla Guida basata su
commenti, vedere about_Comment_Based_Help.

-- Guida basata su XML relativa alle funzioni

Creare un argomento della Guida basato su XML, ad esempio il


tipo di guida che viene in genere creato per i cmdlet. Creare
una Guida basata su XML quando si preveda di localizzarla in
più lingue.

Per associare la funzione all'argomento della Guida basato su XML,


utilizzare la parola chiave di commento della Guida .ExternalHelp.
Per ulteriori informazioni sulla parola chiave ExternalHelp, vedere
about_Comment_Based_Help. Per ulteriori informazioni sulla Guida
basata su XML, vedere l'argomento relativo alla scrittura della Guida
relativa ai cmdlet in MSDN.
VEDERE ANCHE
about_Automatic_Variables
about_Comment_Based_Help
about_Functions_Advanced
about_Functions_CmdletBindingAttribute
about_Parameters
about_Profiles
about_Scopes
about_Script_Blocks
Function (provider)

Potrebbero piacerti anche