Manipolazione diretta di elementi
Gli elementi visualizzati nelle unità di PowerShell, ad esempio i file e le cartelle o le chiavi del Registro di sistema, sono denominati Elementi in PowerShell. I cmdlet per gestire gli elementi includono il sostantivo Item nei relativi nomi.
L'output del Get-Command -Noun Item
comando mostra che sono presenti nove cmdlet per gli elementi di PowerShell.
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
Per creare un nuovo elemento nel file system, usare il New-Item
cmdlet . Includere il parametro Path con il percorso dell'elemento e il parametro ItemType con il valore file
o directory
.
Ad esempio, per creare una nuova directory denominata New.Directory
nella C:\Temp
directory, digitare:
New-Item -Path c:\temp\New.Directory -ItemType Directory
Directory: Microsoft.PowerShell.Core\FileSystem::C:\temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2006-05-18 11:29 AM New.Directory
Per creare un file, modificare il valore del parametro ItemType in file
. Ad esempio, per creare un file denominato file1.txt
nella New.Directory
directory, digitare:
New-Item -Path C:\temp\New.Directory\file1.txt -ItemType file
Directory: Microsoft.PowerShell.Core\FileSystem::C:\temp\New.Directory
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2006-05-18 11:44 AM 0 file1
È possibile usare la stessa tecnica per creare una nuova chiave del Registro di sistema. In realtà, una chiave è più facile da creare perché si tratta dell'unico tipo di elemento del Registro di sistema di Windows. Le voci del Registro di sistema sono proprietà degli elementi. Ad esempio, per creare una chiave denominata _Test
nella CurrentVersion
sottochiave, digitare:
New-Item -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\_Test
Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\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 HKLM:
delle unità di PowerShell e HKCU:
. Senza i due punti, PowerShell non riconosce il nome dell'unità nel percorso.
Perché i valori del Registro di sistema non sono elementi
Quando si usa il Get-ChildItem
cmdlet per trovare gli elementi in una chiave del Registro di sistema, non verranno mai visualizzate le voci effettive del Registro di sistema o i relativi valori.
Ad esempio, la chiave HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
del Registro di sistema contiene in genere diverse voci del Registro di sistema che rappresentano le applicazioni eseguite all'avvio del sistema.
Tuttavia, quando si usa Get-ChildItem
per cercare gli elementi figlio nella chiave, tutto quello che vedrai è la OptionalComponents
sottochiave della chiave:
Get-ChildItem HKLM:\Software\Microsoft\Windows\CurrentVersion\Run
Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
SKC VC Name Property
--- -- ---- --------
3 0 OptionalComponents {}
Anche se sarebbe utile considerare le voci del Registro di sistema come elementi, non è possibile specificare un percorso a una voce del Registro di sistema in modo da garantire che sia univoco. La notazione del percorso non distingue tra la sottochiave del Registro di sistema denominata Run e la voce del Registro di sistema (Impostazione predefinita) nella sottochiave Esegui.
Inoltre, poiché i nomi delle voci del Registro di sistema possono contenere il carattere barra rovesciata (\
), se le voci del Registro di sistema erano elementi, non è possibile usare 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
Per modificare il nome di un file o di una cartella, usare il Rename-Item
cmdlet . Il comando seguente modifica il nome del file1.txt
file in fileOne.txt
.
Rename-Item -Path C:\temp\New.Directory\file1.txt fileOne.txt
Il Rename-Item
cmdlet può modificare il nome di un file o di una cartella, ma non può spostare un elemento. Il comando seguente non riesce perché tenta di spostare il file dalla New.Directory
directory alla directory Temp.
Rename-Item -Path C:\temp\New.Directory\fileOne.txt c:\temp\fileOne.txt
Rename-Item : can't rename because the target specified isn't a path.
At line:1 char:12
+ Rename-Item <<<< -Path C:\temp\New.Directory\fileOne c:\temp\fileOne.txt
Spostamento di elementi
Per spostare un file o una cartella, usare il Move-Item
cmdlet .
Ad esempio, il comando seguente sposta la directory New.Directory dalla C:\temp
directory alla radice dell'unità C:
. Per verificare che l'elemento sia stato spostato, includere il parametro PassThru del Move-Item
cmdlet . Senza PassThru, il Move-Item
cmdlet non visualizza alcun risultato.
Move-Item -Path C:\temp\New.Directory -Destination C:\ -PassThru
Directory: Microsoft.PowerShell.Core\FileSystem::C:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2006-05-18 12:14 PM New.Directory
Copia di elementi
Se si ha familiarità con le operazioni di copia in altre shell, è possibile che il Copy-Item
comportamento del cmdlet in PowerShell sia insolito. Quando si copia un elemento da una posizione a un'altra, Copy-Item
non ne copia il contenuto per impostazione predefinita.
Ad esempio, se si copia la New.Directory
directory dall'unità C: alla C:\temp
directory , il comando ha esito positivo, ma i file nella directory New.Directory non vengono copiati.
Copy-Item -Path C:\New.Directory -Destination C:\temp
Se si visualizza il contenuto di C:\temp\New.Directory
, si scoprirà che non contiene file:
PS> Get-ChildItem -Path C:\temp\New.Directory
PS>
Perché il Copy-Item
cmdlet non copia il contenuto nella nuova posizione?
Il Copy-Item
cmdlet è stato progettato per essere generico. Non è solo per copiare file e cartelle.
Inoltre, anche se si copiano file e cartelle, si potrebbe scegliere di copiare solo il contenitore e non gli elementi al suo interno.
Per copiare tutto il contenuto di una cartella, includere il parametro Recurse del Copy-Item
cmdlet nel comando . Se è già stata copiata la directory senza il suo contenuto, aggiungere il parametro Force, che consente di sovrascrivere la cartella vuota.
Copy-Item -Path C:\New.Directory -Destination C:\temp -Recurse -Force -PassThru
Directory: Microsoft.PowerShell.Core\FileSystem::C:\temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2006-05-18 1:53 PM New.Directory
Directory: Microsoft.PowerShell.Core\FileSystem::C:\temp\New.Directory
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2006-05-18 11:44 AM 0 file1
Eliminazione di elementi
Per eliminare file e cartelle, usare il Remove-Item
cmdlet . I cmdlet di PowerShell, ad esempio Remove-Item
, che possono apportare modifiche significative e irreversibili richiedono spesso una conferma quando si immettono i comandi. Ad esempio, se si tenta di rimuovere la New.Directory
cartella, verrà richiesto di confermare il comando, perché la cartella contiene file:
Remove-Item C:\temp\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é Yes
è la risposta predefinita, per eliminare la cartella e i relativi file, premere INVIO. Per rimuovere la cartella senza confermare, usare il parametro Recurse.
Remove-Item C:\temp\New.Directory -Recurse
Esecuzione di elementi
PowerShell usa il Invoke-Item
cmdlet per eseguire un'azione predefinita per un file o una cartella. L'azione predefinita è determinata dal gestore dell'applicazione predefinito nel Registro di sistema. L'effetto è identico a quello che si ottiene facendo doppio clic sull'elemento in Esplora file.
Si supponga ad esempio di eseguire il comando seguente:
Invoke-Item C:\WINDOWS
Viene visualizzata una finestra di C:\Windows
Esplora risorse, come se si fosse fatto doppio clic sulla C:\Windows
cartella.
Se si richiama il Boot.ini
file in un sistema prima di Windows Vista:
Invoke-Item C:\boot.ini
Se il .ini
tipo di file è associato a Blocco note, il boot.ini
file viene aperto in Blocco note.