Los elementos que se muestran en las unidades de Windows PowerShell, como los archivos y carpetas de las unidades del sistema de archivos, así como las claves del Registro incluidas en las unidades del Registro de Windows PowerShell, reciben el nombre de elementos en Windows PowerShell. Los cmdlets que permiten trabajar con estos elementos tienen el sustantivo Item en sus nombres.

El resultado del comando Get-Command -Noun Item muestra que hay nueve cmdlets Item en 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[]> ...

Crear nuevos elementos (New-Item)

Para crear un nuevo elemento en el sistema de archivos, utilice el cmdlet New-Item. Asimismo, incluya el parámetro Path con la ruta de acceso al elemento y el parámetro ItemType con el valor "file" o "directory".

Por ejemplo, para crear un directorio llamado "New.Directory" en el directorio C:\Temp, escriba:

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 crear un archivo, cambie el valor del parámetro ItemType a "file". Por ejemplo, para crear un archivo llamado "file1.txt" en el directorio New.Directory, escriba:

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

Puede aplicar la misma técnica para crear una clave del Registro. De hecho, es más fácil crear una clave del Registro porque el único tipo de elemento que puede encontrarse en el Registro de Windows es una clave. Las entradas del Registro son propiedades de elementos. Por ejemplo, para crear una clave denominada "_Test" en la subclave CurrentVersion, escriba:

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

Cuando escriba una ruta de acceso al Registro, asegúrese de incluir el signo de dos puntos (:) en los nombres de las unidades HKLM: y HKCU: de Windows PowerShell. Sin los dos puntos, Windows PowerShell no reconocerá el nombre de la unidad en la ruta de acceso.

Por qué los valores del Registro no son elementos

Cuando se utiliza el cmdlet Get-ChildItem para buscar los elementos de una clave del Registro, nunca se muestran las entradas reales del Registro ni sus valores.

Por ejemplo, la clave del Registro HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run contiene normalmente varias entradas del Registro que representan aplicaciones que se ejecutan cuando se inicia el sistema.

No obstante, cuando se utiliza Get-ChildItem para buscar los elementos secundarios de la clave, todo lo que se muestra es la subclave OptionalComponents de la clave:

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

Aunque resultaría cómodo tratar las entradas del Registro como elementos, no es posible especificar una ruta de acceso a una entrada del Registro de una manera que garantice que es única. La notación de rutas de acceso no distingue entre la subclave del Registro denominada Run y la entrada del Registro (Default) de la subclave Run. Además, como los nombres de entradas del Registro pueden contener una barra diagonal inversa (\), si las entradas del Registro se trataran como elementos, no se podría utilizar la notación de rutas de acceso para distinguir una entrada del Registro denominada Windows\CurrentVersion\Run de la subclave ubicada en esa ruta de acceso.

Cambiar nombres de elementos existentes (Rename-Item)

El cmdlet Rename-Item permite cambiar el nombre de un archivo o una carpeta. El comando siguiente cambia el nombre del archivo file1.txt a fileOne.txt.

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

El cmdlet Rename-Item puede cambiar el nombre de un archivo o una carpeta, pero no puede mover un elemento. Al intentar mover el archivo desde el directorio New.Directory al directorio Temp, se produce un error al ejecutar el siguiente comando:

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

Mover elementos (Move-Item)

El cmdlet Move-Item permite mover un archivo o una carpeta.

Por ejemplo, el siguiente comando mueve el directorio New.Directory desde el directorio C:\temp a la raíz de la unidad C:. Para comprobar que se ha movido el elemento, incluya el parámetro PassThru del cmdlet Move-Item. Sin Passthru, el cmdlet Move-Item no muestra ningún 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

Copiar elementos (Copy-Item)

Si está familiarizado con las operaciones de copia de otros shells, puede que el comportamiento del cmdlet Copy-Item de Windows PowerShell le resulte inusual. Cuando se copia un elemento de una ubicación a otra, Copy-Item no copia su contenido de forma predeterminada.

Por ejemplo, si copia el directorio New.Directory de la unidad C: al directorio C:\temp, el comando se ejecutará correctamente, pero los archivos del directorio New.Directory no se copiarán.

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

Si muestra el contenido del directorio C:\temp\New.Directory, observará que no contiene ningún archivo:

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

¿Por qué el cmdlet Copy-Item no copia el contenido en la nueva ubicación?

El cmdlet Copy-Item se ha diseñado para uso genérico, no sólo para copiar archivos y carpetas. Así, incluso al copiar archivos y carpetas, es posible que desee copiar únicamente el contenedor y no los elementos que contiene.

Para copiar todo el contenido de una carpeta, incluya el parámetro Recurse del cmdlet Copy-Item en el comando. Si ya ha copiado el directorio sin su contenido, agregue el parámetro Force, que permite sobrescribir la carpeta vacía.

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

Eliminar elementos (Remove-Item)

El cmdlet Remove-Item permite eliminar archivos y carpetas. Los cmdlets de Windows PowerShell que pueden realizar cambios irreversibles importantes, como es el caso de Remove-Item, suelen solicitar confirmación cuando se escriben sus comandos. Por ejemplo, si intenta quitar la carpeta New.Directory, se le pedirá que confirme el comando, ya que esta carpeta contiene archivos:

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

Dado que la respuesta predeterminada es Yes, para eliminar la carpeta y los archivos que contiene, deberá presionar la tecla Entrar. Para quitar la carpeta sin que se solicite confirmación, utilice el parámetro -Recurse.

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

Ejecutar elementos (Invoke-Item)

Windows PowerShell utiliza el cmdlet Invoke-Item para realizar una acción predeterminada relativa a un archivo o una carpeta. Esta acción predeterminada está determinada por el controlador de aplicaciones predeterminado en el Registro; el efecto es el mismo que si se hace doble clic en el elemento en el Explorador de Windows.

Por ejemplo, suponga que ejecuta el siguiente comando:

PS> Invoke-Item C:\WINDOWS

Aparecerá una ventana del Explorador que se encuentra en C:\Windows, como si hubiera hecho doble clic en la carpeta C:\Windows.

Si invoca el archivo Boot.ini en un sistema anterior a Windows Vista:

PS> Invoke-Item C:\boot.ini

Si el tipo de archivo .ini está asociado al Bloc de notas, el archivo boot.ini se abrirá en esta aplicación.




Tabla de contenido