about_Methods

Aggiornamento: maggio 2014

Si applica a: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

ARGOMENTO

about_methods

DESCRIZIONE BREVE

Questo argomento spiega come usare i metodi per eseguire azioni sugli oggetti in Windows PowerShell.

DESCRIZIONE LUNGA

Windows PowerShell usa gli oggetti per rappresentare gli elementi in archivi dati oppure lo stato del computer. Ad esempio, gli oggetti FileInfo rappresentano i file nelle unità del file system, mentre gli oggetti ProcessInfo rappresentano i processi del computer.

Gli oggetti dispongono di proprietà che archiviano dati sull'oggetto e di metodi che consentono di modificare l'oggetto.

Un "metodo" consiste in un set di istruzioni che specificano un'azione che è possibile eseguire sull'oggetto. Ad esempio, l'oggetto FileInfo include il metodo CopyTo che copia il file rappresentato dall'oggetto FileInfo.

Per visualizzare i metodi di qualsiasi oggetto, usare il cmdlet Get-Member. Usare la proprietà MemberType con un valore di "Method". Il comando seguente visualizza i metodi degli oggetti di elaborazione.

        PS C:\>Get-Process | Get-Member -MemberType Method
       
           TypeName: System.Diagnostics.Process

         Name                      MemberType Definition
         ----                      ---------- ----------
         BeginErrorReadLine        Method     System.Void BeginErrorReadLine()
         BeginOutputReadLine       Method     System.Void BeginOutputReadLine()
         ...
         Kill                      Method     System.Void Kill()
         Refresh                   Method     System.Void Refresh()
         Start                     Method     bool Start()
         ToString                  Method     string ToString()
         WaitForExit               Method     bool WaitForExit(int milliseconds), System.Void WaitForExit()
         WaitForInputIdle          Method     bool WaitForInputIdle(int milliseconds), bool WaitForInputIdle()

Per eseguire o "richiamare" il metodo di un oggetto, digitare un punto (.), il nome del metodo e una coppia di parentesi "()". Se il metodo dispone di argomenti, inserire i valori dell'argomento all'interno delle parentesi. Le parentesi sono necessarie per ogni chiamata del metodo, anche quando non sono presenti argomenti.

Ad esempio, il comando seguente richiama il metodo Kill dei processi al fine di terminare il processo Blocco note nel computer. Di conseguenza, si chiude l'istanza Blocco note. Il comando Get-Process è racchiuso tra parentesi per garantire che venga eseguito prima che il metodo Kill venga richiamato.

        (Get-Process Notepad).Kill()

Un altro processo molto utile è il metodo di suddivisione delle stringhe. Il metodo di suddivisione accetta un argomento relativo al carattere di delimitazione che indica al metodo in quale punto suddividere la stringa.

        PS C:\>$a = "Try-Catch-Finally"
        PS C:\>$a.Split("-")
        Try
        Catch
        Finally

Come illustrato negli esempi precedenti, è possibile richiamare un metodo su un oggetto visualizzato usando un comando oppure un oggetto in una variabile.

A partire da Windows PowerShell 4.0, la chiamata ai metodi tramite nomi di metodo dinamici è supportata.

INFORMAZIONI SUI METODI

Per trovare le definizioni dei metodi di un oggetto, accedere all'argomento della Guida per il tipo di oggetto in MSDN e cercare la pagina relativa ai metodi. Ad esempio, la pagina seguente descrive i metodi degli oggetti di elaborazione (System.Diagnostics.Process).

         https://msdn.microsoft.com/library/system.diagnostics.process_methods

Per determinare gli argomenti di un metodo, esaminare la definizione del metodo, che è simile al diagramma della sintassi di un cmdlet di Windows PowerShell.

Una definizione del metodo potrebbe disporre di una o più firme del metodo, che sono simili ai set di parametri dei cmdlet di Windows PowerShell. Le firme consentono di visualizzare tutti i formati validi relativi ai comandi che richiamano il metodo.

Ad esempio, il metodo CopyTo della classe FileInfo contiene le due firme del metodo seguenti:

        1. CopyTo(String destFileName)
        2. CopyTo(String destFileName, Boolean overwrite)

La prima firma del metodo accetta il nome del file di destinazione (e un percorso). Nell'esempio seguente viene usato il primo metodo CopyTo per copiare il file Final.txt nella directory C:\Cestino.

        (Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt")

La seconda firma del metodo accetta il nome del file di destinazione e un valore booleano che determina che il file di destinazione deve essere sovrascritto (se esiste già).

Nell'esempio seguente viene usato il secondo metodo CopyTo per copiare il file Final.txt nella directory C:\Cestino e per sovrascrivere i file esistenti.

        (Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt", $true)

METODI DI OGGETTI SCALARI E RACCOLTE

I metodi di un oggetto ("scalare") di un determinato tipo spesso sono diversi dai metodi di una raccolta di oggetti dello stesso tipo.

Ad esempio, ogni processo dispone di un metodo Kill, ma un insieme di processi non dispone di un metodo Kill.

A partire da Windows PowerShell 3.0, Windows PowerShell tenta di impedire gli errori di scripting risultanti dai diversi metodi di oggetti scalari e raccolte.

A partire da Windows PowerShell 4.0, viene supportata la possibilità di filtrare le raccolte usando la sintassi di un metodo.

Se si invia una raccolta ma si richiede un metodo che esiste soltanto su oggetti singoli ("scalari"), Windows richiama il metodo su tutti gli oggetti della raccolta.

Se il metodo esiste sui singoli oggetti e sulla raccolta, Windows PowerShell non altera il risultato.

Questa funzionalità funziona anche sulle proprietà di oggetti scalari e raccolte. Per altre informazioni, vedere about_Properties.

ESEMPI

Nell'esempio seguente viene eseguito il metodo Kill di singoli oggetti di elaborazione in una raccolta di oggetti di elaborazione. Questo esempio è valido soltanto per Windows PowerShell 3.0 e per le versioni successive di Windows PowerShell.

Il primo comando avvia tre istanze del processo Blocco note. Il secondo comando usa Get-Process per visualizzare tutte le tre istanze del processo Blocco note e le salva nella variabile $p.

        PS C:\>Notepad; Notepad; Notepad
        PS C:\>$p = Get-Process Notepad
        

Il terzo comando usa la proprietà Count di tutte le raccolte per verificare che siano presenti tre processi nella variabile $p.

        PS C:\>$p.Count
        3

Il quarto comando esegue il metodo Kill su tutti e tre i processi della variabile $p.

Questo comando funziona anche se un insieme di processi non dispone di un metodo Kill.

        PS C:\>$p.Kill()

Il quinto comando usa Get-Process per verificare che il comando Kill è stato eseguito.

        PS C:\>Get-Process Notepad
        Get-Process : Cannot find a process with the name "notepad". Verify the process name and call the cmdlet again.
        At line:1 char:12
        + get-process <<<<  notepad
            + CategoryInfo          : ObjectNotFound: (notepad:String) [Get-Process], ProcessCommandException
            + FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShell.Commands.GetProcessCommand

Per eseguire la stessa attività su Windows PowerShell 2.0, usare il cmdlet Foreach-Object per eseguire il metodo su ogni oggetto nella raccolta.

        PS C:\>$p | Foreach-Object {$_.Kill()}

VEDERE ANCHE

about_Objects

about_Properties

Get-Member