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é è 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.




Argomenti della Guida