Linee guida sullo sviluppo consigliate

Questa sezione descrive le linee guida da prendere in considerazione per garantire una buona esperienza di sviluppo ed utente. A volte potrebbero applicarsi e a volte potrebbero non esserlo.

Linee guida per la progettazione

Quando si progettano i cmdlet, è necessario prendere in considerazione le linee guida seguenti. Quando si trova una linea guida di progettazione applicabile alla propria situazione, assicurarsi di esaminare le linee guida del codice per linee guida simili.

Supportare un parametro InputObject (AD01)

Poiché Windows PowerShell funziona direttamente con gli oggetti di Microsoft .NET Framework, è spesso disponibile un oggetto .NET Framework che corrisponde esattamente al tipo necessario all'utente per eseguire una determinata operazione. InputObject è il nome standard per un parametro che accetta come input un oggetto di questo tipo. Ad esempio, il cmdlet di Stop-Proc esempio nell'esercitazione StopProc definisce un parametro di tipo Process che supporta l'input InputObject dalla pipeline. L'utente può ottenere un set di oggetti processo, modificarli per selezionare gli oggetti esatti da arrestare e quindi passarli direttamente al Stop-Proc cmdlet.

Supportare il parametro Force (AD02)

In alcuni casi, un cmdlet deve proteggere l'utente dall'esecuzione di un'operazione richiesta. Tale cmdlet deve supportare un parametro Force per consentire all'utente di eseguire l'override di tale protezione se l'utente dispone delle autorizzazioni per eseguire l'operazione.

Ad esempio, il cmdlet Remove-Item in genere non rimuove un file di sola lettura. Tuttavia, questo cmdlet supporta un parametro Force in modo che un utente possa forzare la rimozione di un file di sola lettura. Se l'utente dispone già dell'autorizzazione per modificare l'attributo di sola lettura e l'utente rimuove il file, l'uso del parametro Force semplifica l'operazione. Tuttavia, se l'utente non dispone dell'autorizzazione per rimuovere il file, il parametro Force non ha alcun effetto.

Gestire le credenziali tramite Windows PowerShell (AD03)

Un cmdlet deve definire un Credential parametro per rappresentare le credenziali. Questo parametro deve essere di tipo System.Management.Automation.PSCredential e deve essere definito usando una dichiarazione di attributo Credential. Questo supporto richiede automaticamente all'utente il nome utente, la password o entrambi quando non viene fornita direttamente una credenziale completa. Per altre informazioni sull'attributo Credential, vedere Credential Attribute Declaration.

Supportare i parametri di codifica (AD04)

Se il cmdlet legge o scrive testo in o da un formato binario, ad esempio la scrittura o la lettura da un file in un file system, il cmdlet deve avere il parametro Encoding che specifica la modalità di codifica del testo in formato binario.

I cmdlet di test devono restituire un valore booleano (AD05)

I cmdlet che eseguono test sulle risorse devono restituire un tipo System.Boolean alla pipeline in modo che possano essere usati nelle espressioni condizionali.

Linee guida per il codice

Quando si scrive il codice del cmdlet, è necessario prendere in considerazione le linee guida seguenti. Quando si trova una linea guida che si applica alla propria situazione, assicurarsi di esaminare le linee guida di progettazione per linee guida simili.

Seguire le convenzioni di denominazione delle classi di cmdlet (AC01)

Seguendo le convenzioni di denominazione standard, è possibile rendere i cmdlet più individuabili e aiutare l'utente a comprendere esattamente cosa fanno i cmdlet. Questa procedura è particolarmente importante per gli altri sviluppatori che usano Windows PowerShell perché i cmdlet sono tipi pubblici.

Definire un cmdlet nello spazio dei nomi corretto

In genere si definisce la classe per un cmdlet in uno spazio .NET Framework che aggiunge ". Commands" per lo spazio dei nomi che rappresenta il prodotto in cui viene eseguito il cmdlet. Ad esempio, i cmdlet inclusi in Windows PowerShell sono definiti nello spazio dei Microsoft.PowerShell.Commands nomi .

Assegnare alla classe di cmdlet il nome corrispondente al nome del cmdlet

Quando si denome la classe .NET Framework che implementa un cmdlet, assegnare alla classe il nome " ", dove si sostituiscono i segnaposto e con il verbo e il sostantivo usati per il nome <Verb><Noun><Command> <Verb> del <Noun> cmdlet. Ad esempio, il cmdlet Get-Process viene implementato da una classe denominata GetProcessCommand .

Se nessun input della pipeline esegue l'override del metodo BeginProcessing (AC02)

Se il cmdlet non accetta input dalla pipeline, l'elaborazione deve essere implementata nel metodo System.Management.Automation.Cmdlet.BeginProcessing. L'uso di questo metodo Windows PowerShell mantenere l'ordinamento tra i cmdlet. Il primo cmdlet nella pipeline restituisce sempre i relativi oggetti prima che i cmdlet rimanenti nella pipeline otterrà la possibilità di avviare l'elaborazione.

Per gestire le richieste di arresto eseguire l'override del metodo StopProcessing (AC03)

Eseguire l'override del metodo System.Management.Automation.Cmdlet.StopProcessing in modo che il cmdlet possa gestire il segnale di arresto. Alcuni cmdlet possono richiedere molto tempo per completare l'operazione e consentono di passare molto tempo tra le chiamate al runtime di Windows PowerShell, ad esempio quando il cmdlet blocca il thread nelle chiamate RPC a esecuzione lunga. Sono inclusi i cmdlet che effettuano chiamate al metodo System.Management.Automation.Cmdlet.WriteObject, al metodo System.Management.Automation.Cmdlet.WriteError e ad altri meccanismi di feedback che potrebbero richiedere molto tempo per il completamento. In questi casi l'utente potrebbe dover inviare un segnale di arresto a questi cmdlet.

Implementare l'interfaccia IDisposable (AC04)

Se il cmdlet include oggetti che non vengono eliminati (scritti nella pipeline) dal metodo System.Management.Automation.Cmdlet.ProcessRecord, il cmdlet potrebbe richiedere un'ulteriore eliminazione degli oggetti. Ad esempio, se il cmdlet apre un handle di file nel metodo System.Management.Automation.Cmdlet.BeginProcessing e lo mantiene aperto per l'uso da parte del metodo System.Management.Automation.Cmdlet.ProcessRecord, questo handle deve essere chiuso al termine dell'elaborazione.

Il Windows PowerShell runtime non chiama sempre il metodo System.Management.Automation.Cmdlet.EndProcessing. Ad esempio, il metodo System.Management.Automation.Cmdlet.EndProcessing potrebbe non essere chiamato se il cmdlet viene annullato a metà dell'operazione o se si verifica un errore di terminazione in qualsiasi parte del cmdlet. Pertanto, la classe .NET Framework per un cmdlet che richiede la pulizia degli oggetti deve implementare il modello di interfaccia System.IDisposable completo, incluso il finalizzatore, in modo che il runtime di Windows PowerShell possa chiamare entrambi i metodi System.Management.Automation.Cmdlet.EndProcessing e System.IDisposable.Dispose* al termine dell'elaborazione.

Usare tipi di parametro descrittivi per la serializzazione (AC05)

Per supportare l'esecuzione del cmdlet in computer remoti, usare tipi che possono essere facilmente serializzati nel computer client e quindi riidratati nel computer server. I tipi seguenti sono descrittivi per la serializzazione.

Tipi primitivi:

  • Byte, SByte, Decimal, Single, Double, Int16, Int32, Int64, Uint16, UInt32 e UInt64.

  • Boolean, Guid, Byte[], TimeSpan, DateTime, Uri e Version.

  • Char, String, XmlDocument.

Tipi riabilitabili predefiniti:

  • PSPrimitiveDictionary

  • SwitchParameter

  • PSListModifier

  • PSCredential

  • IPAddress, MailAddress

  • CultureInfo

  • X509Certificate2, X500DistinguishedName

  • DirectorySecurity, FileSecurity, RegistrySecurity

Altri tipi:

  • SecureString

  • Contenitori (elenchi e dizionari del tipo precedente)

Usare SecureString per i dati sensibili (AC06)

Quando si gestisce i dati sensibili, usare sempre il tipo di dati System.Security.Securestring. Può includere l'input della pipeline ai parametri, nonché la restituzione di dati sensibili alla pipeline.

Vedere anche

Linee guida sullo sviluppo necessarie

Linee guida sullo sviluppo vivamente consigliate

Scrittura di un cmdlet di Windows PowerShell