Manipular itens diretamente

Os elementos que você vê nas unidades do PowerShell, como os arquivos e pastas ou chaves do Registro, são chamados de Itens no PowerShell. Os cmdlets para trabalhar com eles item têm o substantivo Item em seus nomes.

A saída do Get-Command -Noun Item comando mostra que há nove cmdlets de item do 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[]> ...

Criação de novos itens

Para criar um novo item no sistema de arquivos, use o New-Item cmdlet. Inclua o parâmetro Path com caminho para o item e o parâmetro ItemType com um valor de file ou directory.

Por exemplo, para criar um novo diretório nomeado New.Directory no C:\Temp diretório, digite:

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

Para criar um arquivo, altere o valor do parâmetro ItemType para file. Por exemplo, para criar um arquivo nomeado file1.txt no New.Directory diretório, digite:

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

Você pode usar a mesma técnica para criar uma nova chave do Registro. Na verdade, uma chave do Registro é mais fácil de criar porque o único tipo de item no registro do Windows é uma chave. (As entradas do Registro são propriedades do item.) Por exemplo, para criar uma chave nomeada _Test na CurrentVersion subchave, digite:

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                          {}

Ao digitar um caminho do Registro, certifique-se de incluir os dois pontos (:) nos nomes HKLM: das unidades do PowerShell e HKCU:. Sem os dois pontos, o PowerShell não reconhece o nome da unidade no caminho.

Por que os valores do Registro não são itens

Ao usar o Get-ChildItem cmdlet para localizar os itens em uma chave do Registro, você nunca verá entradas reais do Registro ou seus valores.

Por exemplo, a chave HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run do Registro geralmente contém várias entradas do Registro que representam aplicativos que são executados quando o sistema é iniciado.

No entanto, quando você usa Get-ChildItem para procurar itens filho na chave, tudo o que você verá é a OptionalComponents subchave da chave:

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             {}

Embora seja conveniente tratar as entradas do Registro como itens, você não pode especificar um caminho para uma entrada do Registro de forma a garantir que ela seja exclusiva. A notação de caminho não distingue entre a subchave do Registro chamada Executar e a entrada do Registro (Padrão) na subchave Executar . Além disso, como os nomes de entrada do Registro podem conter o caractere de barra invertida (\), se as entradas do Registro fossem itens, você não poderia usar a notação de caminho para distinguir uma entrada do Registro nomeada Windows\CurrentVersion\Run da subchave localizada nesse caminho.

Renomeando itens existentes

Para alterar o nome de um arquivo ou pasta, use o Rename-Item cmdlet. O comando a seguir altera o file1.txt nome do arquivo para fileOne.txt.

Rename-Item -Path C:\temp\New.Directory\file1.txt fileOne.txt

O Rename-Item cmdlet pode alterar o nome de um arquivo ou pasta, mas não pode mover um item. O comando a seguir falha porque tenta mover o arquivo do New.Directory diretório para o diretório 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

Itens em movimento

Para mover um arquivo ou pasta, use o Move-Item cmdlet.

Por exemplo, o comando a seguir move o diretório New.Directory do C:\temp diretório para a raiz da C: unidade. Para verificar se o item foi movido, inclua o parâmetro PassThru do Move-Item cmdlet. Sem o PassThru, o Move-Item cmdlet não exibe nenhum resultado.

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

Copiar itens

Se você estiver familiarizado com as operações de cópia em outros shells, poderá achar o comportamento do Copy-Item cmdlet no PowerShell incomum. Quando você copia um item de um local para outro, Copy-Item não copia seu conteúdo por padrão.

Por exemplo, se você copiar o New.Directory diretório da unidade C: para o C:\temp diretório, o comando será bem-sucedido, mas os arquivos no diretório New.Directory não serão copiados.

Copy-Item -Path C:\New.Directory -Destination C:\temp

Se você exibir o conteúdo do C:\temp\New.Directory, você descobrirá que ele não contém arquivos:

PS> Get-ChildItem -Path C:\temp\New.Directory
PS>

Por que o cmdlet não copia Copy-Item o conteúdo para o novo local?

O Copy-Item cmdlet foi projetado para ser genérico, não é apenas para copiar arquivos e pastas. Além disso, mesmo ao copiar arquivos e pastas, convém copiar apenas o contêiner e não os itens dentro dele.

Para copiar todo o conteúdo de uma pasta, inclua o parâmetro Recurse do Copy-Item cmdlet no comando. Se você já copiou o diretório sem seu conteúdo, adicione o parâmetro Force , que permite substituir a pasta vazia.

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

Eliminar itens

Para excluir arquivos e pastas, use o Remove-Item cmdlet. Os cmdlets do PowerShell, como Remove-Itemo , que podem fazer alterações significativas e irreversíveis, geralmente solicitam confirmação quando você insere seus comandos. Por exemplo, se tentar remover a New.Directory pasta, ser-lhe-á pedido para confirmar o comando, porque a pasta contém ficheiros:

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"):

Como Yes é a resposta padrão, para excluir a pasta e seus arquivos, pressione a tecla Enter . Para remover a pasta sem confirmar, use o parâmetro Recurse .

Remove-Item C:\temp\New.Directory -Recurse

Execução de itens

O PowerShell usa o Invoke-Item cmdlet para executar uma ação padrão para um arquivo ou pasta. Essa ação padrão é determinada pelo manipulador de aplicativo padrão no Registro; o efeito é o mesmo que se você clicar duas vezes no item no Explorador de Arquivos.

Por exemplo, suponha que você execute o seguinte comando:

Invoke-Item C:\WINDOWS

Uma janela do Explorer localizada em C:\Windows é exibida, como se você tivesse clicado duas vezes na C:\Windows pasta.

Se você invocar o Boot.ini arquivo em um sistema anterior ao Windows Vista:

Invoke-Item C:\boot.ini

Se o tipo de ficheiro estiver associado ao .ini Bloco de Notas, o boot.ini ficheiro será aberto no Bloco de Notas.