Tutto ciò che si trova nelle unità di Windows PowerShell, ad esempio i file e le cartelle delle unità di file system, nonché le chiavi del Registro di sistema nelle unità del Registro di sistema di Windows PowerShell, è detto elemento. I cmdlet per l'utilizzo degli elementi contengono il sostantivo Item nel proprio nome.
L'output del comando Get-Command -Noun Item indica che sono presenti nove cmdlet di Windows PowerShell di tipo Item.
PS> Get-Command -Noun Item CommandType Name Definition ----------- ---- ---------- Cmdlet Clear-Item Clear-Item [-Path] <String[]... Cmdlet Copy-Item Copy-Item [-Path] <String[]>... Cmdlet Get-Item Get-Item [-Path] <String[]> ... Cmdlet Invoke-Item Invoke-Item [-Path] <String[... Cmdlet Move-Item Move-Item [-Path] <String[]>... Cmdlet New-Item New-Item [-Path] <String[]> ... Cmdlet Remove-Item Remove-Item [-Path] <String[... Cmdlet Rename-Item Rename-Item [-Path] <String>... Cmdlet Set-Item Set-Item [-Path] <String[]> ...
Creazione di nuovi elementi (New-Item)
Per creare un nuovo elemento nel file system, utilizzare il cmdlet New-Item. Includere il parametro Path con il percorso dell'elemento e il parametro ItemType con il valore "file" o "directory".
Ad esempio, per creare nella directory C:\Temp una nuova directory denominata "New.Directory", digitare:
PS> New-Item -Path c:\temp\New.Directory -ItemType Directory Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\temp Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2006-05-18 11:29 AM New.Directory
Per creare un file, modificare in "file" il valore del parametro ItemType. Ad esempio, per creare un file denominato "file1.txt" nella directory New.Directory, digitare:
PS> New-Item -Path C:\temp\New.Directory\file1.txt -ItemType file Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\temp\New.Directory Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2006-05-18 11:44 AM 0 file1
È possibile utilizzare la stessa tecnica per creare una nuova chiave del Registro di sistema. In effetti è più facile creare una chiave del Registro di sistema perché il solo tipo di elemento del Registro di sistema di Windows è la chiave. Le voci del Registro di sistema sono le proprietà degli elementi. Ad esempio, per creare una chiave denominata "_Test" nella sottochiave CurrentVersion, digitare:
PS> New-Item -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\_Test Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Micros oft\Windows\CurrentVersion SKC VC Name Property --- -- ---- -------- 0 0 _Test {}
Quando si digita un percorso del Registro di sistema, assicurarsi di includere i due punti (:) nei nomi delle unità di PowerShell, ossia HKLM: e HKCU:. Senza i due punti, il nome dell'unità nel percorso non viene riconosciuto.
Perché i valori del Registro di sistema non sono elementi
Quando si utilizza il cmdlet Get-ChildItem per trovare gli elementi di una chiave del Registro di sistema, non vengono mai visualizzate le voci effettive del Registro di sistema o i relativi valori.
Ad esempio, nella chiave HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run del Registro di sistema in genere sono contenute varie voci che rappresentano le applicazioni eseguite all'avvio del sistema.
Tuttavia, quando si utilizza Get-ChildItem per cercare gli elementi figlio della chiave, viene visualizzata solo la sottochiave OptionalComponents:
PS> Get-ChildItem HKLM:\Software\Microsoft\Windows\CurrentVersion\Run Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Micros oft\Windows\CurrentVersion\Run SKC VC Name Property --- -- ---- -------- 3 0 OptionalComponents {}
Sebbene sia conveniente considerare le voci del Registro di sistema come elementi, non è possibile specificare il percorso di una voce del Registro di sistema in modo che sia univoca. Nella notazione del percorso non viene fatta distinzione tra la sottochiave del Registro di sistema Run e la voce del Registro di sistema (Default) della sottochiave stessa. Inoltre, poiché i nomi delle voci del Registro di sistema possono contenere la barra rovesciata (\), se le voci fossero elementi non sarebbe possibile utilizzare la notazione del percorso per distinguere una voce del Registro di sistema denominata Windows\CurrentVersion\Run dalla sottochiave che si trova in tale percorso.
Ridenominazione di elementi esistenti (Rename-Item)
Per modificare il nome di un file o di una cartella, utilizzare il cmdlet Rename-Item. Con il comando seguente viene modificato il nome di file file1.txt in fileOne.txt.
PS> Rename-Item -Path C:\temp\New.Directory\file1.txt fileOne.txt
Mediante il cmdlet Rename-Item, è possibile modificare il nome di un file o di una cartella ma non spostare un elemento. Il comando seguente non sortisce alcun effetto in quanto tenta di spostare il file dalla directory New.Directory alla directory Temp.
PS> Rename-Item -Path C:\temp\New.Directory\fileOne.txt c:\temp\fileOne.txt Rename-Item : Cannot rename because the target specified is not a path. At line:1 char:12 + Rename-Item <<<< -Path C:\temp\New.Directory\fileOne c:\temp\fileOne.txt
Spostamento di elementi (Move-Item)
Per spostare un file o una cartella, utilizzare il cmdlet Move-Item.
Ad esempio, mediante il comando seguente la directory New.Directory viene spostata dalla directory C:\temp alla radice dell'unità C:. Per verificare se l'elemento è stato spostato, includere il parametro PassThru del cmdlet Move-Item. Senza Passthru, il cmdlet Move-Item non visualizza alcun risultato.
PS> Move-Item -Path C:\temp\New.Directory -Destination C:\ -PassThru Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\ Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2006-05-18 12:14 PM New.Directory
Copia di elementi (Copy-Item)
Se si ha familiarità con le operazioni di copia in altre shell, il comportamento del cmdlet Copy-Item in Windows PowerShell può sembrare insolito. Quando si copia un elemento da un percorso a un altro, per impostazione predefinita il cmdlet Copy-Item non ne copia il contenuto.
Se ad esempio si copia la directory New.Directory dall'unità C: alla directory C:\temp, il comando ha esito positivo, ma i file della directory New.Directory non vengono copiati.
PS> Copy-Item -Path C:\New.Directory -Destination C:\temp
Se si visualizza il contenuto di C:\temp\New.Directory, si noterà che non contiene alcun file:
PS> Get-ChildItem -Path C:\temp\New.Directory PS>
Perché il cmdlet Copy-Item non copia il contenuto nella nuova posizione?
Il cmdlet Copy-Item è stato progettato come strumento generico e non serve solo per la copia di file e cartelle. Inoltre, anche quando vengono copiati file e cartelle, si potrebbe desiderare di copiare solo il contenitore e non gli elementi in esso contenuti.
Per copiare tutto il contenuto di una cartella, includere nel comando il parametro Recurse del cmdlet Copy-Item. Se la directory è già stata copiata senza il relativo contenuto, aggiungere il parametro Force, che consente di sovrascrivere la cartella vuota.
PS> Copy-Item -Path C:\New.Directory -Destination C:\temp -Recurse -Force -Passthru Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\temp Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2006-05-18 1:53 PM New.Directory Directory: Microsoft.Windows PowerShell.Core\FileSystem::C:\temp\New.Directory Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2006-05-18 11:44 AM 0 file1
Eliminazione di elementi (Remove-Item)
Per eliminare file e cartelle, utilizzare il cmdlet Remove-Item. I cmdlet di Windows PowerShell, come Remove-Item, che possono apportare modifiche irreversibili e significative, chiedono spesso conferma dell'operazione. Ad esempio, se si cerca di rimuovere la cartella New.Directory, viene chiesto di confermare il comando poiché la cartella contiene file:
PS> Remove-Item C:\New.Directory Confirm The item at C:\temp\New.Directory has children and the -recurse parameter was not specified. If you continue, all children will be removed with the item. Are you sure you want to continue? [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
Poiché Sì è la risposta predefinita, per eliminare la cartella e i relativi file è sufficiente premere Invio. Per rimuovere la cartella senza conferma, utilizzare il parametro -Recurse.
PS> Remove-Item C:\temp\New.Directory -Recurse
Esecuzione di elementi (Invoke-Item)
Per eseguire un'azione predefinita su un file o una cartella, in Windows PowerShell viene utilizzato il cmdlet Invoke-Item. L'azione predefinita è determinata dall'applicazione che nel Registro di sistema è impostata per la sua esecuzione. Equivale a fare doppio clic sull'elemento in Esplora risorse.
Si supponga ad esempio di eseguire il comando seguente:
PS> Invoke-Item C:\WINDOWS
Viene visualizzata una finestra di Esplora risorse posizionata su C:\Windows, come se si fosse fatto doppio clic sulla cartella C:\Windows.
Se si richiama il file Boot.ini in un sistema precedente a Windows Vista:
PS> Invoke-Item C:\boot.ini
Se il file con estensione ini è associato al Blocco note, il file boot.ini viene aperto nel Blocco note.