PowerShell (III de V)

Después de algún tiempo, retomo el conjunto de artículos de PowerShell, y en esta ocasión me quiero centrar en la administración de sistemas utilizando los cmdlets.

Muchas veces los administradores tienen que lidiar con múltiples herramientas para hacer tareas relativamente sencillas, como crear usuarios, crear o compartir carpetas, visualizar procesos, etc.

PowerShell nos aporta las ventajas que tienen la mayoría de estas herramientas, pero con la consolidación de sintaxis y unificación de criterios que tienen los cmdlets y la capacidad de scripting.

Por ejemplo, PowerShell incluye proveedores de abstracción que nos permiten trabajar con almacenamientos de datos como si fueran unidades de disco. Sin embargo, hay que tener en cuenta que estos proveedores solo son válidos dentro del entorno de PowerShell.

A continuación os presento la lista de cmdlets asociados al proveedor de administración de archivos y sus alias entre paréntesis.

  • Get-location    (Gl)
  • Set-location    (Sl)
  • Copy-item    (Cpi)
  • Remove-item    (Ri)
  • Move-item    (Mi)
  • Rename-item    (Rni)
  • Set-item    (Si)
  • Clear-item    (Cli)
  • New-item    (Ni)
  • Get-content    (Gc)
  • Set-content    (Sc)
  • Mkdir (implementado como función)   

Una característica interesante es la posibilidad de crear nuestras propias unidades de disco dentro del entorno de PowerShell con el cmdlet new-psdrive
De esta forma podemos apuntar la unidad a una carpeta concreta como por ejemplo scripts o documentos.
Los parámetros que debemos completar son:

•    Name: nombre de la unidad que se va a crear
•    PSProvider: Proveedor de acceso a sistema (filesystem, registry, certifícate, etc.)
•    Root: ruta raíz a partir de la cual se va a crear la unidad

El siguiente ejemplo nos crea una unidad llamada scripts que nos lleva directamente a la carpeta scripts en el disco C

•    New-psdrive –name scripts –psprovider filesystem –root C:Powershellscripts

Pero esto no se limita al acceso al sistema de archivos, sino que podemos igualmente navegar y modificar valores en el registro del sistema, contenedores de certificados, WMI y prácticamente cualquier tipo de objeto manejado desde .Net

Por ejemplo, si queremos navegar en el registro, entonces escribimos

•    Set-Location HKLM:

También podemos hacer lo mismo con el alias CD, como si estuviéramos trabajando con cmd.exe

•    cd HKLM:

Lógicamente en Windows Vista con UAC habilitado, no tendremos acceso a todas las entradas de registro, por lo que al listar los elementos del registro con get-childitem observaremos lo siguiente:

La clave de registro HKLMSecurity no es visible a no ser que realicemos una elevación de privilegios.

Para aquellos administradores acostumbrados a utilizar los comandos de cmd.exe, con PowerShell pueden continuar utilizándolos para navegar en el registro como si de una unidad de disco se tratara.

Para completar mejor este ejemplo, voy a hacer referencia al post que mi compañero Juan Garrido hizo hace unas semanas, en donde explica como modificar el registro para crear un acceso directo a la línea de comandos en la ubicación que esté activa. Vamos a hace este mismo proceso pero con cmdlets de PowerShell.

Debemos navegar hasta HKLMSoftwareClassesFolderShell, por lo tanto

•    cd SoftwareClassesFolderShell

Una vez allí, creamos una nueva clave con el nombre que queramos, por ejemplo miCmd y dentro de esta clave creamos otra con el nombre command.

•    New-item miCmd
•    Cd midmc
•    New-item command

Ahora tenemos que agregar la funcionalidad que deseamos, por lo tanto escribimos

•    Set-item command –value “cmd.exe /K cd ‘%1’” –type string

El resultado es el siguiente:

Hasta el próximo post.

2 comentarios en “PowerShell (III de V)”

  1. Muy interesante. He visto en la documentación, que existe la posibilidad de ejecutar cmdlets PS desde un cmd.

    Por ejemplo, si queremos abrir una ventana de PS desde el menú contextual del explorer, podemos seguir los pasos del ejemplo y usar lo siguiente:

    si command -value “powershell -NoLogo -NoExit -command set-location ‘%1′” -type string

    Tiene una pinta estupenda esto de la Powershell. Lástima que no venga integrada por defecto.

  2. en windows 2003 con powershell 1.0

    no me trabaja el script para incluir powershell en el menu.

    El problema es que cuando doy click-derecho y selection miCmd, se me habre la ventana de habrir con:

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *