Os elementos vistos nas unidades do Windows PowerShell, como os arquivos e as pastas nas unidades do sistema de arquivos, e as chaves do Registro nas unidades do Registro do Windows PowerShell são denominados itens. Os cmdlets que funcionam com eles apresentam o termo Item em seus nomes.
A saída do comando Get-Command -Noun Item mostra que existem nove cmdlets de item no Windows PowerShell.
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[]> ...
Criando novos itens (New-Item)
Para criar um novo item no sistema de arquivos, utilize o cmdlet New-Item. Inclua o parâmetro Path com o caminho para o item e o parâmetro ItemType com o valor "file" ou "directory".
Por exemplo, para criar um novo diretório chamado "New.Directory" no diretório C:\Temp, digite:
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
Para criar um arquivo, altere o valor do parâmetro ItemType para "file". Por exemplo, para criar um arquivo chamado "file1.txt" no diretório New.Directory, digite:
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
Você pode usar essa mesma técnica para criar uma nova chave do Registro. Na verdade, uma chave do Registro é mais fácil de criar porque somente um tipo de item do Registro do Windows é uma chave (as entradas do Registro são propriedades de item). Por exemplo, para criar uma chave denominada "_Test" na subchave CurrentVersion, digite:
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 estiver digitando um caminho do Registro, não se esqueça de incluir os dois pontos (:) nos nomes de unidade do Windows PowerShell, HKLM: e HKCU:. Sem os dois pontos, o Windows PowerShell não reconhecerá o nome da unidade no caminho.
Porque os valores do Registro não são itens
Quando você utiliza o cmdlet Get-ChildItem para encontrar itens em uma chave do Registro, nunca verá as entradas reais do Registro ou seus valores.
Por exemplo, a chave do Registro HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run normalmente contém várias entradas do Registro que representam os aplicativos executados quando o sistema é inicializado.
Entretanto, quando você usar Get-ChildItem para procurar itens filho na chave, tudo o que verá é a subchave OptionalComponents da chave:
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 {}
Embora seja conveniente tratar entradas do Registro como itens, você não pode especificar um caminho para uma entrada do Registro de uma forma que garanta que ele seja exclusivo. A notação do caminho não faz distinção entre a subchave do Registro chamada Run e a entrada do Registro (Default) da subchave Run. Além disso, como os nomes das entradas do Registro podem conter o caractere de barra invertida (\), se as entradas fossem itens, você não poderia usar a notação de caminho para fazer a distinção entre a entrada do Registro Windows\CurrentVersion\Run e a subchave localizada nesse caminho.
Renomeando itens existentes (Rename-Item)
Para alterar o nome de um arquivo ou de uma pasta, utilize o cmdlet Rename-Item. O comando a seguir altera o nome do arquivo file1.txt para fileOne.txt.
PS> Rename-Item -Path C:\temp\New.Directory\file1.txt fileOne.txt
O cmdlet Rename-Item pode alterar o nome de um arquivo ou de uma pasta, mas não pode mover um item. O comando a seguir falhará porque tenta mover o arquivo do diretório New.Directory para o diretório 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
Movendo itens (Move-Item)
Para mover um arquivo ou uma pasta, utilize o cmdlet Move-Item.
Por exemplo, o comando a seguir move o diretório New.Directory do diretório C:\temp para a raiz da unidade C:. Para verificar se o item foi movido, inclua o parâmetro PassThru do cmdlet Move-Item. Sem Passthru, o cmdlet Move-Item não exibirá nenhum resultado.
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
Copiando itens (Copy-Item)
Caso você já esteja familiarizado com as operações de cópia de outros shells, talvez considere o comportamento do cmdlet Copy-Item do Windows PowerShell pouco comum. Quando você copia um item de um local para outro, por padrão, Copy-Item não copia o seu conteúdo.
Por exemplo, se você copiar o diretório New.Directory da unidade C: para o diretório C:\temp, o comando terá êxito, mas os arquivos do diretório New.Directory não serão copiados.
PS> Copy-Item -Path C:\New.Directory -Destination C:\temp
Se você exibir o conteúdo de C:\temp\New.Directory, verá que ele não contém arquivo algum:
PS> Get-ChildItem -Path C:\temp\New.Directory PS>
Por que o cmdlet Copy-Item não copia o conteúdo para o novo local?
O cmdlet Copy-Item foi projetado para ser genérico; ele não foi criado para copiar apenas arquivos e pastas. Além disso, mesmo quando estiver copiando arquivos e pastas, talvez você queira copiar somente o contêiner e não os itens que estão dentro dele.
Para copiar todo o conteúdo de uma pasta, inclua o parâmetro Recurse do cmdlet Copy-Item no comando. Se você já copiou o diretório sem o seu conteúdo, adicione o parâmetro Force, que permite que a pasta vazia seja substituída.
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
Excluindo itens (Remove-Item)
Para excluir os arquivos e as pastas, use o cmdlet Remove-Item. Os cmdlets do Windows PowerShell, como Remove-Item, que podem fazer mudanças irreversíveis e significativas, geralmente solicitarão a sua confirmação quando você digitar seus comandos. Por exemplo, se você tentar remover a pasta New.Directory, deverá confirmar o comando, já que a pasta contém arquivos:
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"):
Como Sim é a resposta padrão, para excluir a pasta e seus arquivos, pressione a tecla Enter. Para remover a pasta sem que a confirmação seja solicitada, use o parâmetro -Recurse.
PS> Remove-Item C:\temp\New.Directory -Recurse
Executando itens (Invoke-Item)
O Windows PowerShell utiliza o cmdlet Invoke-Item para executar uma ação padrão para um arquivo ou uma pasta. Essa ação padrão é determinada pelo manipulador padrão da aplicação no Registro; é como se você tivesse clicado duas vezes sobre o item no Windows Explorer.
Por exemplo, suponha que você execute o comando a seguir:
PS> Invoke-Item C:\WINDOWS
Uma janela do Explorer localizada em C:\Windows é exibida, como se você tivesse clicado duas vezes sobre essa pasta.
Se você chamar o arquivo Boot.ini em um sistema anterior ao Windows Vista:
PS> Invoke-Item C:\boot.ini
Caso o tipo de arquivo .ini esteja associado ao Bloco de notas, o arquivo boot.ini será aberto no Bloco de notas.