about_Functions_Advanced
Descrizione breve
Introduce funzioni avanzate che consentono di creare cmdlet usando script.
Descrizione lunga
Un cmdlet è un singolo comando che partecipa alla semantica della pipeline di PowerShell. Sono inclusi cmdlet binari, funzioni di script avanzate, CDXML e flussi di lavoro.
Le funzioni avanzate consentono di creare cmdlet scritti come funzione di PowerShell. Le funzioni avanzate semplificano la creazione di cmdlet senza dover scrivere e compilare un cmdlet binario. I cmdlet binari sono classi .NET scritte in un linguaggio .NET, ad esempio C#.
Le funzioni avanzate usano l'attributo CmdletBinding
per identificarle come funzioni che fungono da cmdlet. L'attributo CmdletBinding
è simile all'attributo Cmdlet usato nelle classi di cmdlet compilate per identificare la classe come cmdlet. Per altre informazioni su questo attributo, vedere about_Functions_CmdletBindingAttribute.
Nell'esempio seguente viene illustrata una funzione che accetta un nome e quindi stampa un messaggio di saluto usando il nome fornito. Si noti anche che questa funzione definisce un nome che include una coppia verbo (Send) e sostantivo (Greeting) come la coppia verb-sostantivo di un cmdlet compilato. Tuttavia, le funzioni non devono avere un nome verbo-sostantivo.
function Send-Greeting
{
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true)]
[string] $Name
)
Process
{
Write-Host ("Hello " + $Name + "!")
}
}
I parametri della funzione vengono dichiarati usando l'attributo Parameter
.
Questo attributo può essere usato da solo oppure può essere combinato con l'attributo Alias o con diversi altri attributi di convalida dei parametri. Per altre informazioni su come dichiarare i parametri (inclusi i parametri dinamici aggiunti in fase di esecuzione), vedere about_Functions_Advanced_Parameters.
Il lavoro effettivo della funzione precedente viene eseguito nel process
blocco , equivalente al metodo ProcessingRecord usato dai cmdlet compilati per elaborare i dati passati al cmdlet . Questo blocco, insieme ai begin
blocchi e end
, è descritto nell'argomento about_Functions_Advanced_Methods .
Le funzioni avanzate differiscono dai cmdlet compilati nei modi seguenti:
- L'associazione avanzata dei parametri di funzione non genera un'eccezione quando una matrice di stringhe è associata a un parametro booleano .
- L'attributo
ValidateSet
e l'attributoValidatePattern
non possono passare parametri denominati. - Le funzioni avanzate non possono essere usate nelle transazioni.