ARGOMENTO about_methods DESCRIZIONE BREVE Descrive come utilizzare metodi per eseguire azioni su oggetti in Windows PowerShell. DESCRIZIONE DETTAGLIATA In Windows PowerShell vengono utilizzate raccolte strutturate di informazioni, dette oggetti, per rappresentare gli elementi degli archivi dati o lo stato del computer. Ad esempio, quando si accede a un file in Windows PowerShell, non si utilizza il file effettivo. Si utilizza invece un oggetto FileInfo, un tipo di oggetto che ha la funzione di proxy del file. La maggior parte degli oggetti include metodi. Un metodo è un insieme di istruzioni che specificano una particolare azione eseguibile con l'oggetto in questione. Ad esempio, nell'oggetto FileInfo è incluso un metodo chiamato CopyTo, che consente di copiare il file rappresentato dall'oggetto. Per visualizzare un elenco di metodi e relative definizioni associati a un determinato oggetto, è possibile utilizzare il cmdlet Get-Member. Tuttavia, per utilizzare il cmdlet, l'oggetto deve esistere già in qualche forma: come variabile, come oggetto creato al momento di specificare un comando, come argomento del comando Get-Member o come oggetto passato attraverso una pipeline. Si supponga ad esempio che alla variabile $a sia stato assegnato un valore stringa, il che significa che la variabile è associata a un oggetto stringa. Per visualizzare un elenco dei metodi dell'oggetto, immettere il comando seguente al prompt dei comandi di Windows PowerShell: Get-Member -inputobject $a -membertype method Se si desidera visualizzare i metodi e le relative definizioni associati a un oggetto passato attraverso la pipeline, occorre utilizzare il comando Get-Member nella pipeline, come illustrato nell'esempio seguente: Get-ChildItem c:\final.txt | Get-Member -membertype method Il modo più comune per richiamare un metodo è di specificarne il nome dopo il riferimento a un oggetto, ad esempio una variabile o un'espressione. Occorre separare il riferimento all'oggetto dal metodo mediante un punto. Inoltre, è necessario utilizzare le parentesi immediatamente dopo il nome del metodo per racchiudere gli eventuali argomenti da passare al metodo. Se in una firma di metodo non vengono passati argomenti, è necessario utilizzare parentesi vuote. Ad esempio, nel comando seguente viene utilizzato il metodo GetType() per restituire il tipo di dati associato all'oggetto stringa $a: $a.GetType() Il metodo GetType restituisce il tipo di dati per qualsiasi oggetto e una variabile rappresenta sempre un oggetto. Il tipo di oggetto dipende dal tipo di dati archiviati nella variabile. Ogni azione eseguita in Windows PowerShell è associata a oggetti, sia che si dichiari una variabile sia che si combinino più comandi in una pipeline. Di conseguenza, è possibile utilizzare i metodi in diverse situazioni. Ad esempio, è possibile utilizzare un metodo per eseguire un'azione sul valore di una proprietà, come mostrato nel comando seguente: (Get-ChildItem c:\final.txt).name.ToUpper() In questo caso l'oggetto per il quale viene richiamato il metodo ToUpper è l'oggetto stringa associato alla proprietà name. Si noti che, affinché questo esempio possa funzionare, è necessario che il file Final.txt si trovi nella radice dell'unità C:. La proprietà del nome è in effetti una proprietà dell'oggetto FileInfo restituita dal comando Get-ChildItem. Ciò dimostra non solo la natura orientata agli oggetti di Windows PowerShell, ma anche come sia possibile chiamare i metodi per qualsiasi oggetto accessibile. Lo stesso risultato dell'ultimo esempio può essere ottenuto mediante una variabile che archivi l'output del comando Get-ChildItem, come illustrato nell'esempio seguente: $a = (Get-ChildItem c:\final.txt).name $a.ToUpper() Nel comando viene nuovamente utilizzato il metodo ToUpper() dell'oggetto stringa associato alla variabile, che contiene il nome file restituito dal comando Get-ChildItem. In alcuni casi un metodo richiede un argomento per dirigerne l'azione. Ad esempio, nell'oggetto FileInfo è incluso il metodo MoveTo, che consente di spostare un file da un percorso a un altro. Il metodo richiede un argomento che specifichi il percorso di destinazione del file. Il comando seguente illustra come includere tale argomento: (Get-ChildItem c:\final.txt).MoveTo("c:\techdocs\final.txt") Il comando Get-ChildItem restituisce un oggetto FileInfo per il file Final.txt e utilizza il metodo MoveTo di tale oggetto per iniziare l'azione e specificare il nuovo percorso del file. Per determinare gli argomenti associati a un metodo, esaminare la corrispondente definizione di metodo. Una definizione di metodo contiene una o più firme di metodo, note anche come overload in Microsoft .NET Framework. Una firma di metodo contiene il nome di un metodo e zero o più parametri che occorre fornire quando il metodo viene chiamato. Ogni firma di metodo è separata da quella precedente mediante una virgola nella visualizzazione del cmdlet Get-Member. Ad esempio, il metodo CopyTo della classe FileInfo contiene le due firme di metodo seguenti: 1. CopyTo(String destFileName) 2. CopyTo(String destFileName, Boolean overwrite) La prima firma di metodo acquisisce il nome file di destinazione, incluso il percorso, in cui copiare il file di origine. Nell'esempio seguente il primo metodo CopyTo è utilizzato per copiare Final.txt nella directory C:\Bin: (Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt") Se il file è già presente nel percorso di destinazione, il metodo CopyTo ha esito negativo e Windows PowerShell segnala l'errore seguente: Eccezione durante la chiamata di "CopyTo" con "1" argomento/i: "Il file 'c:\bin\final.txt' esiste già.". Nella seconda firma di metodo viene passato il nome file di destinazione esattamente come nel primo caso, ma viene anche passato un valore booleano per specificare se si desidera sovrascrivere un file esistente con lo stesso nome nel percorso di destinazione, come illustrato nell'esempio seguente: (Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt", $true) Quando si passa il valore booleano, è necessario utilizzare la variabile $True, che viene creata automaticamente da Windows PowerShell. La variabile $True contiene il valore booleano "true". Ovviamente, la variabile $False contiene invece il valore booleano "false". VEDERE ANCHE about_Objects Get-Member