Condividi tramite


Informazioni sui metodi

Breve descrizione

Viene descritto come usare i metodi per eseguire azioni sugli oggetti in PowerShell.

Descrizione lunga

PowerShell usa oggetti per rappresentare gli elementi negli archivi dati o lo stato del computer. Ad esempio, gli oggetti FileInfo rappresentano i file nelle unità del file system e gli oggetti ProcessInfo rappresentano i processi nel computer.

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

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

Per ottenere i metodi di qualsiasi oggetto, usare il Get-Member cmdlet . Utilizzare la relativa proprietà MemberType con il valore "Method". Il comando seguente ottiene i metodi degli oggetti di elaborazione.

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), ...
WaitForInputIdle          Method     bool WaitForInputIdle(int millisecon...

Per eseguire o "richiamare" un metodo di un oggetto, digitare un punto (.), il nome del metodo e un set di parentesi "()". Se il metodo include argomenti, inserire i valori dell'argomento tra parentesi. Le parentesi sono necessarie per ogni chiamata al metodo, anche se non sono presenti argomenti. Se il metodo accetta più argomenti, devono essere separati da virgole.

Ad esempio, il comando seguente richiama il metodo Kill dei processi per terminare il processo del Blocco note nel computer.

$notepad = Get-Process notepad
$notepad.Kill()

Questo esempio può essere abbreviato combinando le istruzioni precedenti.

(Get-Process Notepad).Kill()

Il Get-Process comando è racchiuso tra parentesi per assicurarsi che venga eseguito prima che venga richiamato il metodo Kill. Il Kill metodo viene quindi richiamato sull'oggetto restituito Process .

Un altro metodo molto utile è il Replace metodo delle stringhe. Il Replace metodo sostituisce il testo all'interno di una stringa. Nell'esempio seguente il punto (.) può essere inserito immediatamente dopo la citazione finale della stringa.

'this is rocket science'.Replace('rocket', 'rock')
this is rock science

Come illustrato negli esempi precedenti, è possibile richiamare un metodo su un oggetto che si ottiene usando un comando, un oggetto in una variabile o qualsiasi elemento che restituisce un oggetto ,ad esempio una stringa tra virgolette.

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

Informazioni sui metodi

Per trovare le definizioni dei metodi di un oggetto, passare all'argomento della Guida per il tipo di oggetto in MSDN e cercare la relativa pagina dei metodi. La pagina seguente, ad esempio, descrive i metodi degli oggetti processo System.Diagnostics.Process.

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

Una definizione di metodo può avere una o più firme di metodo, come i set di parametri dei cmdlet di PowerShell. Le firme mostrano tutti i formati validi dei comandi per richiamare il metodo.

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

    CopyTo(String destFileName)
    CopyTo(String destFileName, Boolean overwrite)

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

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

Nota

A differenza della modalità argomento di PowerShell, i metodi oggetto vengono eseguiti in modalità di espressione , ovvero un pass-through al framework .NET basato su PowerShell. Gli argomenti bareword in modalità espressione (stringhe non racchiuse tra virgolette) non sono consentiti. È possibile visualizzare questo valore nel percorso di differenza come parametro, rispetto al percorso come argomento. Per altre informazioni sulle modalità di analisi, vedere about_Parsing

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

Nell'esempio seguente viene utilizzato il secondo CopyTo metodo per copiare il Final.txt file nella C:\Bin directory 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 particolare tipo sono spesso diversi dai metodi di una raccolta di oggetti dello stesso tipo.

Ad esempio, ogni processo ha un Kill metodo, ma una raccolta di processi non dispone di un metodo Kill.

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

Se si invia una raccolta, ma si richiede un metodo esistente solo su singoli oggetti ("scalari"), PowerShell richiama il metodo su ogni oggetto della raccolta.

Se il metodo esiste nei singoli oggetti e nella raccolta, viene richiamato solo il metodo della raccolta.

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

Esempio

Nell'esempio seguente viene eseguito il metodo Kill di singoli oggetti processo in una raccolta di oggetti processo. Questo esempio funziona solo in PowerShell 3.0 e versioni successive di PowerShell.

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

Notepad; Notepad; Notepad
$p = Get-Process Notepad

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

$p.Count
3

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

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

$p.Kill()

Il quinto comando usa il comando Get-Process per verificare che il Kill comando funzioni.

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

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

$p | ForEach-Object {$_.Kill()}

Metodi ForEach e Where

A partire da PowerShell 4.0, è supportato il filtro delle raccolte usando una sintassi del metodo. In questo modo è possibile usare due nuovi metodi quando si gestiscono raccolte ForEach e Where.

Sono disponibili altre informazioni su questi metodi in about_arrays

Vedere anche

about_Objects

about_Properties

Get-Member