Capitolo 2 - Sistema della Guida

A due gruppi di professionisti IT è stato assegnato un test scritto senza avere accesso a un computer, per determinare il loro livello di competenza in PowerShell. I principianti di PowerShell sono stati inseriti in un gruppo e gli esperti in un altro. In base ai risultati del test, il livello di competenza tra i due gruppi non è sembrato molto diverso. A entrambi i gruppi è stato assegnato un secondo test simile al primo, per il quale avevano a disposizione un computer con PowerShell, ma senza accesso a Internet. I risultati del secondo test hanno mostrato una grande differenza nel livello di competenza tra i due gruppi. Gli esperti non sempre conoscono le risposte, ma sanno come trovarle.

Qual è la differenza nei risultati del primo e del secondo test tra questi due gruppi?

Le differenze osservate in questi due test sono dovute al fatto che gli esperti non memorizzano come usare migliaia di comandi in PowerShell, ma imparano a usare benissimo il sistema della Guida in PowerShell. In questo modo riescono a trovare i comandi necessari quando servono e a usarli una volta trovati.

Ho sentito Jeffrey Snover, l'inventore di PowerShell, raccontare più volte una storia simile.

Padroneggiare il sistema della Guida è fondamentale per riuscire a usare PowerShell in modo efficiente.

Individuabilità

I comandi compilati di PowerShell sono detti cmdlet. Cmdlet si pronuncia "command-let" (non CMD-let). I nomi dei cmdlet hanno il formato di singoli comandi "Verbo-Sostantivo" per renderli facilmente individuabili. Ad esempio, il cmdlet per determinare quali processi sono in esecuzione è Get-Process e il cmdlet per recuperare un elenco di servizi e dei relativi stati è Get-Service. In PowerShell sono disponibili altri tipi di comandi, ad esempio alias e funzioni, che verranno illustrati più avanti in questo libro. Il termine comando di PowerShell è un termine generico usato spesso per indicare qualsiasi tipo di comando in PowerShell, indipendentemente dal fatto che si tratti o meno di un cmdlet, di una funzione o di un alias.

I tre cmdlet principali di PowerShell

  • Get-Command
  • Get-Help
  • Get-Member (illustrato nel capitolo 3)

Spesso mi viene chiesto come è possibile scoprire quali sono i comandi in PowerShell. Per determinare i comandi, è possibile usare sia Get-Command che Get-Help.

Get-Help

Get-Help è un comando che serve a più scopi. Get-Help consente di imparare a usare i comandi dopo averli trovati. Get-Help può essere usato anche per individuare i comandi, ma in modo diverso e meno diretto rispetto a Get-Command.

Quando Get-Help viene usato per individuare i comandi, cerca prima di tutto le corrispondenze con caratteri jolly dei nomi dei comandi in base all'input fornito. Se non trova una corrispondenza, cerca negli argomenti della guida e, se non vengono trovate corrispondenze, viene restituito un errore. Contrariamente a quanto si pensa, Get-Help può essere usato per trovare i comandi per cui non sono disponibili argomenti nella Guida.

La prima cosa da sapere sul sistema della Guida in PowerShell è come usare il cmdlet Get-Help. Il comando seguente viene usato per visualizzare l'argomento della Guida per Get-Help.

Get-Help -Name Get-Help
Do you want to run Update-Help?
The Update-Help cmdlet downloads the most current Help files for Windows PowerShell
modules, and installs them on your computer. For more information about the Update-Help
cmdlet, see http://go.microsoft.com/fwlink/?LinkId=210614.
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"):

A partire da PowerShell versione 3, la Guida di PowerShell non è disponibile con il sistema operativo. La prima volta che si esegue Get-Help per un comando, viene visualizzato il messaggio precedente. Se viene usata la funzione help o l'alias man invece del cmdlet Get-Help, questo prompt non viene visualizzato.

Se si preme Y per rispondere affermativamente, viene eseguito il cmdlet Update-Help, che richiede l'accesso a Internet per impostazione predefinita. Y può essere digitato in maiuscolo o in minuscolo.

Una volta scaricata la Guida e completato l'aggiornamento, viene restituito l'argomento della Guida per il comando specificato:

Get-Help -Name Get-Help

Eseguire questo esempio nel computer, esaminare l'output e prendere nota di come vengono raggruppate le informazioni:

  • NOME
  • RIEPILOGO
  • SYNTAX
  • DESCRIZIONE
  • COLLEGAMENTI CORRELATI
  • REMARKS

Come si può vedere, gli argomenti della Guida possono contenere una grande quantità di informazioni e questo non è nemmeno l'intero argomento della Guida.

Sebbene non sia una modalità specifica di PowerShell, un parametro consente di fornire l'input a un comando. Get-Help presenta molti parametri che possono essere specificati per restituire l'intero argomento della Guida o un subset.

La sezione relativa alla sintassi dell'argomento della Guida illustrato nel set di risultati precedente elenca tutti i parametri per Get-Help. A prima vista, sembra che gli stessi parametri siano elencati per sei volte. Ognuno di questi diversi blocchi nella sezione della sintassi è un set di parametri. Ciò significa che il cmdlet Get-Help ha sei diversi set di parametri. Se si osserva meglio, si noterà che almeno un parametro in ogni set di parametri è diverso.

I set di parametri si escludono a vicenda. Quando viene usato un parametro univoco che esiste solo in uno dei set di parametri, è possibile usare solo i parametri contenuti all'interno di tale set di parametri. Ad esempio, non è stato possibile specificare contemporaneamente i parametri Full e Detailed perché si trovano in set di parametri diversi.

Ognuno dei parametri seguenti si trova in set di parametri diversi:

  • Completa
  • Dettagliate
  • Esempi
  • Online
  • Parametro
  • ShowWindow

Il significato della sintassi criptica, ad esempio le parentesi quadre e angolari nella sezione della sintassi, verrà illustrato nell'appendice A di questo libro. Anche se è importante, spesso chi non ha familiarità con PowerShell e non lo usa quotidianamente trova difficile ricordare il significato di questo tipo di sintassi.

Per altre informazioni sulla sintassi criptica, vedere Appendice A.

I principianti possono ottenere le stesse informazioni in un modo più semplice e in termini più comprensibili.

Quando viene specificato il parametro Full di Get-Help, viene restituito l'intero argomento della guida.

Get-Help -Name Get-Help -Full

Eseguire questo esempio nel computer, esaminare l'output e prendere nota di come vengono raggruppate le informazioni:

  • NOME
  • RIEPILOGO
  • SYNTAX
  • DESCRIZIONE
  • PARAMETERS
  • INPUT
  • OUTPUT
  • NOTE
  • ESEMPI
  • COLLEGAMENTI CORRELATI

Si noti che l'uso del parametro Full ha restituito diverse sezioni aggiuntive, una delle quali è la sezione PARAMETERS che offre più informazioni della sezione criptica SYNTAX.

Full è un parametro opzionale. Un parametro che non richiede un valore è detto parametro opzionale. Quando viene specificato un parametro opzionale, il valore è true e, in caso contrario, il valore è false.

Se si è seguito questo capitolo usando la console di PowerShell, si sarà notato che il comando precedente per visualizzare l'argomento della Guida completo per Get-Help è stato visualizzato tanto velocemente da non riuscire a leggerlo. Esiste un modo migliore.

Help è una funzione che invia tramite pipe Get-Help a una funzione denominata more, che è un wrapper per il file eseguibile more.comin Windows. Nella console di PowerShell help restituisce una pagina della Guida alla volta. In ISE funziona esattamente come Get-Help. Il mio consigliò è di usare la funzione help invece del cmdlet Get-Help perché offre un'esperienza migliore e richiede di digitare meno codice.

Digitare meno codice, tuttavia, non è sempre la cosa migliore. Per salvare i comandi come script o condividerli con altri utenti, assicurarsi di usare nomi di cmdlet e parametri completi. I nomi completi sono più facili da comprendere perché sono autodocumentati. Si pensi alla prossima persona che dovrà leggere e comprendere i comandi. Potrebbe essere chiunque. I colleghi e il futuro stesso ne saranno grati.

Provare a eseguire i comandi seguenti nella console di PowerShell sul computer dell'ambiente lab Windows 10.

Get-Help -Name Get-Help -Full
help -Name Get-Help -Full
help Get-Help -Full

Si notano differenze nell'output dei comandi elencati in precedenza quando sono stati eseguiti nel computer dell'ambiente lab Windows 10?

Non esistono differenze se non che le ultime due opzioni restituiscono i risultati una pagina alla volta. La BARRA SPAZIATRICE viene usata per visualizzare la pagina successiva del contenuto quando si usa la funzione Help e CTRL+C annulla i comandi in esecuzione nella console di PowerShell.

Il primo esempio usa il cmdlet Get-Help, il secondo usa la funzione Help e il terzo omette il parametro Name quando si usa la funzione Help. Name è un parametro posizionale e in questo esempio viene usato in base alla posizione. Ciò significa che il valore può essere specificato senza specificare il nome del parametro, purché il valore stesso sia specificato nella posizione corretta. Per sapere in quale posizione specificare il valore, ho letto la Guida, come illustrato nell'esempio seguente.

help Get-Help -Parameter Name
-Name <String>
    Gets help about the specified command or concept. Enter the name of a cmdlet, function,
    provider, script, or workflow, such as Get-Member, a conceptual article name, such as
    about_Objects, or an alias, such as ls. Wildcard characters are permitted in cmdlet and
    provider names, but you can't use wildcard characters to find the names of function help and
    script help articles.

    To get help for a script that isn't located in a path that's listed in the $env:Path
    environment variable, type the script's path and file name.

    If you enter the exact name of a help article, Get-Help displays the article contents.

    If you enter a word or word pattern that appears in several help article titles, Get-Help
    displays a list of the matching titles.

    If you enter a word that doesn't match any help article titles, Get-Help displays a list of
    articles that include that word in their contents.

    The names of conceptual articles, such as about_Objects, must be entered in English, even in
    non-English versions of PowerShell.

    Required?                    false
    Position?                    0
    Default value                None
    Accept pipeline input?       True (ByPropertyName)
    Accept wildcard characters?  true

Si noti che nell'esempio precedente il parametro Parameter è stato usato con la funzione Help per restituire solo le informazioni dell'argomento della Guida relativo al parametro Name. È molto più veloce che provare a esaminare manualmente un argomento della Guida che a volte può essere di centinaia di pagine.

In base a tali risultati, si può vedere che il parametro Name è posizionale e deve essere specificato nella posizione zero (la prima posizione) se usato in base alla posizione. L'ordine in cui sono specificati i parametri non è rilevante se è specificato il parametro name.

Un'altra importante informazione è che il tipo di dati previsto per il valore del parametro Name è una singola stringa, come indicato da <String>. Se venissero accettate più stringhe, il tipo di dati sarebbe elencato come <String[]>.

In alcuni casi semplicemente non si vuole visualizzare l'intero argomento della Guida per un comando. Oltre a Full, esistono altri parametri che possono essere specificati con Get-Help o Help. Provare a eseguire i comandi seguenti sul computer dell'ambiente lab Windows 10:

Get-Help -Name Get-Command -Full
Get-Help -Name Get-Command -Detailed
Get-Help -Name Get-Command -Examples
Get-Help -Name Get-Command -Online
Get-Help -Name Get-Command -Parameter Noun
Get-Help -Name Get-Command -ShowWindow

In genere uso help <command name> con il parametro Full o Online. Se mi interessano solo gli esempi, userò il parametro Examples e se mi interessa solo un parametro specifico, userò il parametro Parameter. Il parametro ShowWindow apre l'argomento della Guida in una finestra di ricerca separata che può essere visualizzata su un altro monitor, se disponibile. Ho evitato il parametro ShowWindow perché a causa di un bug noto non viene visualizzato l'intero argomento della Guida.

Per visualizzare la Guida in una finestra separata, il mio consiglio è di usare il parametro Online o di usare il parametro Full e di inviare tramite pipe i risultati a Out-GridView, come illustrato nell'esempio seguente.

help Get-Command -Full | Out-GridView

Sia il cmdlet Out-GridView che il parametro ShowWindow del cmdlet Get-Help richiedono un sistema operativo con una GUI (interfaccia utente grafica). Verrà generato un messaggio di errore se si prova a usarne uno in Windows Server installato con l'opzione di installazione Server Core (senza GUI).

Per usare Get-Help per trovare i comandi, usare il carattere jolly asterisco (*) con il parametro Name. Specificare un termine in cui cercare i comandi come valore per il parametro Name, come illustrato nell'esempio seguente.

help *process*
Name                              Category  Module                    Synopsis
----                              --------  ------                    --------
Enter-PSHostProcess               Cmdlet    Microsoft.PowerShell.Core Connects to and ...
Exit-PSHostProcess                Cmdlet    Microsoft.PowerShell.Core Closes an intera...
Get-PSHostProcessInfo             Cmdlet    Microsoft.PowerShell.Core
Debug-Process                     Cmdlet    Microsoft.PowerShell.M... Debugs one or mo...
Get-Process                       Cmdlet    Microsoft.PowerShell.M... Gets the process...
Start-Process                     Cmdlet    Microsoft.PowerShell.M... Starts one or mo...
Stop-Process                      Cmdlet    Microsoft.PowerShell.M... Stops one or mor...
Wait-Process                      Cmdlet    Microsoft.PowerShell.M... Waits for the pr...
Get-AppvVirtualProcess            Function  AppvClient                ...
Start-AppvVirtualProcess          Function  AppvClient                ...

Nell'esempio precedente i caratteri jolly * non sono obbligatori e, anche omettendoli, si ottiene lo stesso risultato. Get-Help aggiunge automaticamente i caratteri jolly in background.

help process

Il comando precedente produce gli stessi risultati ottenuti specificando il carattere jolly * a ogni fine del processo.

Preferisco aggiungerli perché questa opzione funziona sempre nello stesso modo. In caso contrario, sono necessari in determinati scenari e non in altri. Non appena si aggiunge un carattere jolly all'interno del valore, non viene più aggiunto automaticamente in background al valore specificato.

help pr*cess

Tale comando non restituisce alcun risultato, a meno che il carattere jolly * non venga aggiunto all'inizio, alla fine o sia all'inizio che alla fine di pr*cess.

Se il valore specificato inizia con un trattino, viene generato un errore perché PowerShell lo interpreta come nome di parametro, ma non esiste un nome di parametro come questo per il cmdlet Get-Help.

help -process

Se si sta provando a cercare i comandi che terminano con -process, è sufficiente aggiungere il carattere jolly * all'inizio del valore.

help *-process

Quando si cercano i comandi di PowerShell con Get-Help, è meglio essere un po' più generici invece che troppo specifici riguardo ciò che si sta cercando.

La ricerca di process in precedenza ha trovato solo i comandi che contenevano process nel nome del comando e ha restituito solo tali risultati. Quando Get-Help viene usato per cercare processes, non trova corrispondenze per i nomi dei comandi, quindi esegue una ricerca in ogni argomento della Guida di PowerShell nel sistema e restituisce tutte le corrispondenze trovate. In questo modo viene restituito un numero elevato di risultati.

Get-Help processes
Name                              Category  Module                    Synopsis
----                              --------  ------                    --------
Disconnect-PSSession              Cmdlet    Microsoft.PowerShell.Core Disconnects from...
Enter-PSHostProcess               Cmdlet    Microsoft.PowerShell.Core Connects to and ...
ForEach-Object                    Cmdlet    Microsoft.PowerShell.Core Performs an oper...
Get-PSSessionConfiguration        Cmdlet    Microsoft.PowerShell.Core Gets the registe...
New-PSTransportOption             Cmdlet    Microsoft.PowerShell.Core Creates an objec...
Out-Host                          Cmdlet    Microsoft.PowerShell.Core Sends output to ...
Where-Object                      Cmdlet    Microsoft.PowerShell.Core Selects objects ...
Clear-Variable                    Cmdlet    Microsoft.PowerShell.U... Deletes the valu...
Compare-Object                    Cmdlet    Microsoft.PowerShell.U... Compares two set...
Convert-String                    Cmdlet    Microsoft.PowerShell.U... Formats a string...
ConvertFrom-Csv                   Cmdlet    Microsoft.PowerShell.U... Converts object ...
ConvertTo-Html                    Cmdlet    Microsoft.PowerShell.U... Converts Microso...
ConvertTo-Xml                     Cmdlet    Microsoft.PowerShell.U... Creates an XML-b...
Debug-Runspace                    Cmdlet    Microsoft.PowerShell.U... Starts an intera...
Export-Csv                        Cmdlet    Microsoft.PowerShell.U... Converts objects...
Export-FormatData                 Cmdlet    Microsoft.PowerShell.U... Saves formatting...
Format-List                       Cmdlet    Microsoft.PowerShell.U... Formats the outp...
Format-Table                      Cmdlet    Microsoft.PowerShell.U... Formats the outp...
Get-Random                        Cmdlet    Microsoft.PowerShell.U... Gets a random nu...
Get-Unique                        Cmdlet    Microsoft.PowerShell.U... Returns unique i...
Group-Object                      Cmdlet    Microsoft.PowerShell.U... Groups objects t...
Import-Clixml                     Cmdlet    Microsoft.PowerShell.U... Imports a CLIXML...
Import-Csv                        Cmdlet    Microsoft.PowerShell.U... Creates table-li...
Measure-Object                    Cmdlet    Microsoft.PowerShell.U... Calculates the n...
Out-File                          Cmdlet    Microsoft.PowerShell.U... Sends output to ...
Out-GridView                      Cmdlet    Microsoft.PowerShell.U... Sends output to ...
Select-Object                     Cmdlet    Microsoft.PowerShell.U... Selects objects ...
Set-Variable                      Cmdlet    Microsoft.PowerShell.U... Sets the value o...
Sort-Object                       Cmdlet    Microsoft.PowerShell.U... Sorts objects by...
Tee-Object                        Cmdlet    Microsoft.PowerShell.U... Saves command ou...
Trace-Command                     Cmdlet    Microsoft.PowerShell.U... Configures and s...
Write-Output                      Cmdlet    Microsoft.PowerShell.U... Sends the specif...
Debug-Process                     Cmdlet    Microsoft.PowerShell.M... Debugs one or mo...
Get-Process                       Cmdlet    Microsoft.PowerShell.M... Gets the process...
Get-WmiObject                     Cmdlet    Microsoft.PowerShell.M... Gets instances o...
Start-Process                     Cmdlet    Microsoft.PowerShell.M... Starts one or mo...
Stop-Process                      Cmdlet    Microsoft.PowerShell.M... Stops one or mor...
Wait-Process                      Cmdlet    Microsoft.PowerShell.M... Waits for the pr...
Get-Counter                       Cmdlet    Microsoft.PowerShell.D... Gets performance...
Invoke-WSManAction                Cmdlet    Microsoft.WSMan.Manage... Invokes an actio...
Remove-WSManInstance              Cmdlet    Microsoft.WSMan.Manage... Deletes a manage...
Get-WSManInstance                 Cmdlet    Microsoft.WSMan.Manage... Displays managem...
New-WSManInstance                 Cmdlet    Microsoft.WSMan.Manage... Creates a new in...
Set-WSManInstance                 Cmdlet    Microsoft.WSMan.Manage... Modifies the man...
about_Arithmetic_Operators        HelpFile                            Describes the op...
about_Arrays                      HelpFile                            Describes arrays...
about_Debuggers                   HelpFile                            Describes the Wi...
about_Execution_Policies          HelpFile                            Describes the Wi...
about_ForEach-Parallel            HelpFile                            Describes the Fo...
about_Foreach                     HelpFile                            Describes a lang...
about_Functions                   HelpFile                            Describes how to...
about_Language_Keywords           HelpFile                            Describes the ke...
about_Methods                     HelpFile                            Describes how to...
about_Objects                     HelpFile                            Provides essenti...
about_Parallel                    HelpFile                            Describes the Pa...
about_Pipelines                   HelpFile                            Combining comman...
about_Preference_Variables        HelpFile                            Variables that c...
about_Remote                      HelpFile                            Describes how to...
about_Remote_Output               HelpFile                            Describes how to...
about_Sequence                    HelpFile                            Describes the Se...
about_Session_Configuration_Files HelpFile                            Describes sessio...
about_Variables                   HelpFile                            Describes how va...
about_Windows_PowerShell_5.0      HelpFile                            Describes new fe...
about_WQL                         HelpFile                            Describes WMI Qu...
about_WS-Management_Cmdlets       HelpFile                            Provides an over...
about_ForEach-Parallel            HelpFile                            Describes the Fo...
about_Parallel                    HelpFile                            Describes the Pa...
about_Sequence                    HelpFile                            Describes the Se...

Dopo aver Help per cercare process, sono stati restituiti 10 risultati e, dopo averlo usato per cercare processes, sono stati restituiti 68 risultati. Se viene trovato un solo risultato, verrà visualizzato l'argomento stesso della Guida invece che un elenco di comandi.

get-help *hotfix*
NAME
    Get-HotFix

SYNOPSIS
    Gets the hotfixes that have been applied to the local and remote computers.


SYNTAX
    Get-HotFix [-ComputerName <String[]>] [-Credential <PSCredential>] [-Description
    <String[]>] [<CommonParameters>]

    Get-HotFix [[-Id] <String[]>] [-ComputerName <String[]>] [-Credential
    <PSCredential>] [<CommonParameters>]


DESCRIPTION
    The Get-Hotfix cmdlet gets hotfixes (also called updates) that have been installed
    on either the local computer (or on specified remote computers) by Windows Update,
    Microsoft Update, or Windows Server Update Services; the cmdlet also gets hotfixes
    or updates that have been installed manually by users.


RELATED LINKS
    Online Version: http://go.microsoft.com/fwlink/?LinkId=821586
    Win32_QuickFixEngineering http://go.microsoft.com/fwlink/?LinkID=145071
    Get-ComputerRestorePoint
    Add-Content

REMARKS
    To see the examples, type: "get-help Get-HotFix -examples".
    For more information, type: "get-help Get-HotFix -detailed".
    For technical information, type: "get-help Get-HotFix -full".
    For online help, type: "get-help Get-HotFix -online"

A questo punto, si sfaterà il mito che Help in PowerShell possa trovare solo comandi che hanno argomenti della Guida.

help *more*
NAME
    more

SYNTAX
    more [[-paths] <string[]>]


ALIASES
    None


REMARKS
    None

Si noti che nell'esempio precedente more non ha un argomento della Guida, ma il sistema Help in PowerShell è riuscito a trovarlo. Ha trovato solo una corrispondenza e ha restituito le informazioni sulla sintassi di base che verranno visualizzate quando un comando non ha un argomento della Guida.

PowerShell contiene numerosi argomenti della Guida concettuali (About). Il comando seguente può essere usato per restituire un elenco di tutti gli argomenti della Guida About nel sistema.

help About_*

Se si limitano i risultati a un singolo argomento About della Guida, viene visualizzato l'argomento della Guida effettivo invece di restituire un elenco.

help about_Updatable_Help

Il sistema della Guida in PowerShell deve essere aggiornato perché siano presenti gli argomenti della Guida About. Se per qualche motivo l'aggiornamento iniziale del sistema della Guida non è riuscito nel computer, i file non saranno disponibili fino a quando il cmdlet Update-Help non sarà stato eseguito correttamente.

Get-Command

Get-Command è pensato per facilitare l'individuazione di comandi. L'esecuzione di Get-Command senza parametri restituisce un elenco di tutti i comandi nel sistema. L'esempio seguente illustra l'uso del cmdlet Get-Command per determinare i comandi esistenti per la gestione dei processi:

Get-Command -Noun Process
CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          Debug-Process                                      3.1.0.0    Microsof...
Cmdlet          Get-Process                                        3.1.0.0    Microsof...
Cmdlet          Start-Process                                      3.1.0.0    Microsof...
Cmdlet          Stop-Process                                       3.1.0.0    Microsof...
Cmdlet          Wait-Process                                       3.1.0.0    Microsof...

Nell'esempio precedente, in cui è stato eseguito Get-Command, si noti che è stato usato il parametro Noun e che è stato specificato Process come valore del parametro Noun. E se non si sapesse come usare il cmdlet Get-Command? Si potrebbe usare Get-Help per visualizzare l'argomento della Guida relativo a Get-Command.

I parametri Name, Noun e Verb accettano i caratteri jolly. L'esempio seguente illustra l'uso dei caratteri jolly con il parametro Name:

Get-Command -Name *service*
CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Function        Get-NetFirewallServiceFilter                       2.0.0.0    NetSecurity
Function        Set-NetFirewallServiceFilter                       2.0.0.0    NetSecurity
Cmdlet          Get-Service                                        3.1.0.0    Microsof...
Cmdlet          New-Service                                        3.1.0.0    Microsof...
Cmdlet          New-WebServiceProxy                                3.1.0.0    Microsof...
Cmdlet          Restart-Service                                    3.1.0.0    Microsof...
Cmdlet          Resume-Service                                     3.1.0.0    Microsof...
Cmdlet          Set-Service                                        3.1.0.0    Microsof...
Cmdlet          Start-Service                                      3.1.0.0    Microsof...
Cmdlet          Stop-Service                                       3.1.0.0    Microsof...
Cmdlet          Suspend-Service                                    3.1.0.0    Microsof...
Application     AgentService.exe                                   10.0.14... C:\Windo...
Application     SensorDataService.exe                              10.0.14... C:\Windo...
Application     services.exe                                       10.0.14... C:\Windo...
Application     services.msc                                       0.0.0.0    C:\Windo...
Application     TieringEngineService.exe                           10.0.14... C:\Windo...

Non amo particolarmente usare i caratteri jolly con il parametro Name di Get-Command perché restituisce anche file eseguibili che non sono comandi nativi di PowerShell.

Se si vogliono usare i caratteri jolly con il parametro Name, consiglio di limitare i risultati con il parametro CommandType.

Get-Command -Name *service* -CommandType Cmdlet, Function, Alias

Un'opzione migliore consiste nell'usare il parametro Verb o Noun oppure entrambi perché solo i comandi di PowerShell hanno sia verbi che sostantivi.

Se si è riscontrato un errore in un argomento della Guida, ora gli argomenti della Guida per PowerShell sono open source e disponibili nel repository PowerShell-Docs su GitHub. È possibile dare il proprio contributo correggendo le informazioni non corrette. È sufficiente creare una copia tramite fork del repository della documentazione di PowerShell su GitHub, aggiornare l'argomento della Guida e inviare una richiesta pull. Una volta accettata la richiesta pull, la documentazione corretta è disponibile per tutti.

Aggiornamento della Guida

La copia locale degli argomenti della Guida di PowerShell è stata aggiornata in precedenza, la prima volta che è stata richiesta la Guida per un comando. È consigliabile aggiornare periodicamente il sistema della Guida perché è possibile che siano disponibili nuovi aggiornamenti al contenuto della Guida. Il cmdlet Update-Help viene usato per aggiornare gli argomenti della Guida. Richiede l'accesso a Internet per impostazione predefinita e per consentire l'esecuzione di PowerShell con privilegi elevati come amministratore.

Update-Help
Update-Help : Failed to update Help for the module(s) 'BitsTransfer' with UI culture(s)
{en-US} : Unable to retrieve the HelpInfo XML file for UI culture en-US. Make sure the HelpInfoUri
property in the module manifest is valid or check your network connection and then try the command again.
At line:1 char:1
+ Update-Help
+
    + CategoryInfo          : InvalidOperation: (:) [Update-Help], Exception
    + FullyQualifiedErrorId : InvalidHelpInfoUri,Microsoft.PowerShell.Commands.UpdateHel
   pCommand

Update-Help : Failed to update Help for the module(s) 'NetworkControllerDiagnostics,
StorageReplica' with UI culture(s) {en-US} : Unable to retrieve the HelpInfo XML file
for UI culture en-US. Make sure the HelpInfoUri property in the module manifest is valid
or check your network connection and then try the command again.
At line:1 char:1
+ Update-Help
+
    + CategoryInfo          : ResourceUnavailable: (:) [Update-Help], Exception
    + FullyQualifiedErrorId : UnableToRetrieveHelpInfoXml,Microsoft.PowerShell.Commands.
   UpdateHelpCommand

Alcuni moduli hanno restituito errori, il che non è insolito. Se il computer non ha accesso a Internet, è possibile usare il cmdlet Save-Help in un altro computer con accesso a Internet per salvare prima le informazioni aggiornate della Guida in una condivisione file in rete e quindi usare il parametro SourcePath di Update-Help per specificare questo percorso di rete per gli argomenti della Guida.

Valutare l'opportunità di configurare un'attività pianificata o di aggiungere una logica allo script del profilo in PowerShell per aggiornare periodicamente il contenuto della Guida nel computer. Gli script del profilo verranno illustrati in uno dei prossimi capitoli.

Riepilogo

In questo capitolo si è appreso come trovare i comandi sia con Get-Help che con Get-Command. Si è appreso come usare il sistema della Guida per capire come usare i comandi una volta trovati. Si è anche appreso come aggiornare il contenuto degli argomenti della Guida quando sono disponibili aggiornamenti.

La sfida che propongo consiste nell'imparare un comando di PowerShell al giorno.

Get-Command | Get-Random | Get-Help -Full

Revisione

  1. Il parametro DisplayName di Get-Service è posizionale?
  2. Quanti set di parametri ha il cmdlet Get-Process?
  3. Quali comandi di PowerShell sono disponibili per gestire i log eventi?
  4. Qual è il comando di PowerShell per restituire un elenco dei processi di PowerShell in esecuzione nel computer?
  5. Come si aggiorna il contenuto della Guida di PowerShell archiviato nel computer?

Per altre informazioni sugli argomenti trattati in questo capitolo, consiglio di leggere gli argomenti seguenti della Guida di PowerShell.

Nel capitolo successivo verrà illustrato il cmdlet Get-Member, oltre a oggetti, proprietà e metodi.