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