Las unidades de Windows PowerShell
Las unidades de Windows PowerShell y la navegación
En este capítulo veremos el conjunto de unidades de Windows PowerShell a los que se tiene acceso desde el intérprete de comandos. Sistema de archivos, registros o certificados son, por citar solamente algunos, almacenes de datos accesibles con Windows PowerShell. En cada uno de ellos es posible navegar y realizar acciones sobre los elementos que los componen.
1. ¿Qué es una unidad Windows PowerShell?
Una unidad Windows PowerShell es la ubicación de algún almacén de datos, como por ejemplo una unidad de sistema de archivos. Sin embargo, los proveedores de Windows PowerShell crean por defecto varias unidades en los distintos almacenes de datos, y le ofrecen así la posibilidad de acceder a las unidades de sistema de archivos (C:), las unidades de registro (HKCU: y HKLM:), la unidad de certificados (Cert:) y otras. En todas estas unidades de Windows PowerShell, es posible ejecutar por línea de comandos el conjunto de acciones que se llevan a cabo habitualmente a través de la interfaz gráfica de Windows.
He aquí una tabla de las unidades de Windows PowerShell más importantes:
Nombre |
Tipo |
Ruta raíz |
C |
Sistema de archivos |
C:\ |
Env |
Variables de entorno |
|
HKCU |
Registro |
HKEY_CURRENT_USER |
HKLM |
Registro |
HKEY_LOCAL_MACHINE |
Y… ¡puede haber otras! En efecto, los proveedores de Windows PowerShell pueden crear nuevas unidades hacia otros almacenes de datos. Es el caso, por ejemplo, de IIS (servidor web de Microsoft), que puede instalar en un puesto de trabajo. Tras importar el módulo correspondiente, se creará una nueva unidad Windows PowerShell que estará accesible (IIS:).
Como administrador de puestos de trabajo, resulta imprescindible saber realizar operaciones sobre estas unidades de Windows PowerShell....
El sistema de archivos
El sistema de archivos permite almacenar archivos, y por tanto datos. Estos archivos pueden estar organizados en una o varias carpetas, de manera jerárquica.
Existen dos tipos de cmdlet: los cmdlets utilizados para navegar para situarse en una unidad o en una carpeta deseada, y aquellos que permiten manipular objetos (como, por ejemplo, renombrar una carpeta, copiar un archivo, etc.).
1. Cmdlets dedicados a la navegación
En esta sección, verá la gran mayoría de los cmdlets necesarios para navegar por las unidades de Windows PowerShell. Pues en lo sucesivo, con Windows PowerShell, ya no existen comandos específicos destinados a un único tipo de unidad. En efecto, con la consola de comandos de Windows, comandos tales como cd, copy o incluso delete funcionaban solamente con el sistema de archivos. El comando reg está dedicado, por su parte, únicamente al registro de Windows.
Con Windows PowerShell, cmdlets tales como Set-Location, Copy-Item o incluso Get-Content son válidos tanto en la unidad de Windows PowerShell de tipo sistema de archivos como en la del registro… ¡y en las demás unidades de Windows PowerShell que hemos indicado previamente!
a. Get-Location
Get-Location permite, simplemente, obtener la carpeta activa en la ejecución del comando:
PS C:\Windows\system32> Get-Location
Path
----
C:\Windows\system32
b. Set-Location
Todo administrador de sistemas conoce el comando cd (Change Directory) de la consola de comandos. En Windows PowerShell, si bien sigue funcionando cd, en realidad es porque existe un alias que apunta al cmdlet Set-Location.
Así, para situarse en una carpeta específica, escriba:
PS C:\Windows\system32> Set-Location D:\
PS D:\>
Si la ruta de acceso contiene espacios, hay que escribirla entre comillas (simples o dobles):
PS D:\> Set-Location 'C:\Program Files'
PS C:\Program Files>
También es posible utilizar rutas relativas: «.», «..», «\». Así, para acceder a una subcarpeta, escriba:
PS C:\Program Files> Set-Location '.\Common Files'
PS C:\Program Files\Common Files>
c. Get-ChildItem
El cmdlet Get-ChildItem permite enumerar el contenido de una carpeta, y le indica también los atributos de cada uno de sus elementos...
El registro de Windows (HKCU y HKLM)
Los cmdlets descritos anteriormente permiten navegar y también realizar acciones sobre los sistemas de archivos. Sin embargo, no se limitan solo a las unidades de sistemas de archivos. En efecto, es posible interactuar con el registro de Windows utilizando estos mismos cmdlets.
Cualquier administrador de sistemas conoce el ejecutable regedit.exe (Registry Editor), que permite abrir la interfaz gráfica para navegar por el registro de Windows y realizar modificaciones (mantenimiento, comportamiento de aplicaciones, reparación del sistema, etc.).
He aquí algunos ejemplos de comandos que pueden ejecutarse en Windows PowerShell.
Editor del Registro de Windows
1. Moverse por el registro
Además de navegar por el sistema de archivos, es posible navegar por el registro mediante el comando Set-Location:
PS C:\Windows\system32> Set-Location HKCU:
PS HKCU:\>
Por último, Get-ChildItem permite enumerar el conjunto de claves del registro presentes en la raíz HKEY_CURRENT_USER, así como los valores (columna Property) incluidos en cada una de ellas:
PS HKCU:\> Get-ChildItem
Hive: HKEY_CURRENT_USER
Name Property
---- --------
AppEvents
Console HistoryNoDup : 0
FullScreen : 0
ScrollScale : 1
ExtendedEditKeyCustom : 0
CursorSize : 25
...
Los certificados
Igual que con el sistema de archivos y el registro, la gestión de certificados puede llevarse a cabo a través de Windows PowerShell. Esto se ha mejorado enormemente desde Windows 8, con la creación de cmdlets suplementarios dedicados. Algunos cmdlets que se abordan aquí no están disponibles en Windows 7.
La consola MMC con el componente Certificados
1. Gestionar los certificados con Windows PowerShell
La gestión de certificados también puede hacerse a través de Windows PowerShell. Gracias al acceso a la unidad de certificados (Cert:), es posible interactuar directamente con los certificados existentes, agregar nuevos y también eliminarlos.
El acceso a los certificados con Windows PowerShell se hace de la misma manera que con el registro:
PS C:\Windows\system32> Set-Location Cert:
PS Cert:\> Get-ChildItem
Location : CurrentUser
StoreNames: {TrustedPublisher, ClientAuthIssuer, Root, UserDS...}
Location : LocalMachine
StoreNames: {TestSignRoot, ClientAuthIssuer, Remote Desktop, Root...}
Como muestra el ejemplo de código anterior, es posible gestionar el conjunto de certificados correspondientes al puesto de trabajo (LocalMachine), y también los correspondientes al usuario autenticado en la máquina (CurrentUser). Los ejemplos y explicaciones que se proveen en esta sección corresponden a los certificados de equipo.
He aquí un resumen de los distintos almacenes de certificados:
PS Cert:\> Set-Location .\LocalMachine
PS Cert:\LocalMachine> Get-ChildItem
Name: TestSignRoot
Name: ClientAuthIssuer
Name: Remote Desktop
Name: Root
Name: TrustedDevices
Name: CA
Name: TrustedAppRoot
Name: eSIM Certification Authorities
Name: AuthRoot
Name: Windows Live ID Token Issuer
Name: TrustedPublisher
Name: FlightRoot
Name: TrustedPeople
Name: My
Name: SmartCardRoot
Name: Trust
Name: Disallowed...
Web Services-Management
El almacén de datos WSMan contiene, por su parte, todos los parámetros vinculados con la gestión de Windows Remote Management (WinRM). Se trata de la implementación del protocolo de comunicación WS-Management.
La funcionalidad PowerShell Remoting, aparecida con Windows PowerShell versión 2.0, permite administrar una o varias máquinas remotas mediante WinRM.
Sin embargo, Windows PowerShell y su funcionalidad PowerShell Remoting no son los únicos que explotan WinRM para la administración remota de máquinas. Exchange Server, algunas herramientas de la gama System Center y muchas otras la utilizan; en ciertos casos se producen errores de conexión cuando el administrador desea ejecutar comandos PowerShell en una máquina remota.
Uno de los errores más frecuentes es que se ha superado el número de usuarios diferentes conectados a la máquina. En este caso concreto, he aquí el mensaje de error que se obtiene:
PS C:\Windows\system32> Enter-PSSession -ComputerName LAB-WS01
enter-pssession: Error de conexión al servidor remoto LAB-WS01.
Mensaje de error: El servicio WS-Management no puede procesar
la solicitud. Se superó el número máximo de usuarios que
ejecutan operaciones remotas para este complemento.
Vuelva a intentar la solicitud más tarde o aumente
la cuota...
Internet Information Services (IIS)
IIS es un servidor web desarrollado por Microsoft. Está disponible en Windows como una característica para instalar: abra el Panel de control, seleccione Programas y características (categoría Programas) y a continuación, en el menú de la izquierda, seleccione Activar o desactivar las características de Windows. La característica que se ha de seleccionar se llama Internet Information Services.
Agregar el componente IIS en las características de Windows
Una vez instalado el componente, tiene acceso al Administrador de IIS escribiendo inetmgr.exe, bien utilizando la búsqueda de Windows (combinación de teclas [Windows] S) o a través de la ventana Ejecutar (combinación de teclas [Windows] R). Este administrador es la herramienta que permite administrar y configurar los diferentes sitios web alojados en su puesto.
El Administrador de IIS
Veamos cómo gestionar este servicio con Windows PowerShell. Desde la administración de sitios web hasta la configuración de los parámetros, el conjunto está accesible a través de una unidad Windows PowerShell. En primer lugar, hay que importar el módulo WebAdministration para tener acceso al lector de IIS, así como a todos los cmdlets que permiten administrar el servidor web. Para ello, hay que utilizar el cmdlet Import-Module:
PS C:\Windows\system32> Import-Module WebAdministration
Para saber si el módulo se ha cargado correctamente, puede utilizar el cmdlet Get-Module. Este comando devuelve como resultado los módulos cargados en Windows PowerShell.
PS C:\Windows\system32> Get-Module
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Binary 1.0.0.0 CimCmdlets {Export-BinaryMiLog...
Script 3.0 Dism {Add-AppxProvisione... ...