PoweShell V de V

 

Artículos anteriores de PowerShell:


 










  •  


    Llegamos a la última entrega de esta serie dedicada a PowerShel en Windows Vista. En esta ocasión me gustaría centrar la atención un poco más en las funcionalidades de scripting que incorpora PowerShell.


    Probablemente la mayoría de los que leéis este Blog sois administradores o usuarios, sin embargo en muchas ocasiones seguro que habéis tenido que tratar con algún problema que solo se podía resolver mediante la programación de un script.

    PowerShell nos aporta toda la potencia de la administración por línea de comandos, pero además nos permite extender la funcionalidad creando nuestros propios scripts para resolver situaciones más complejas. Comenzaremos creando un sencillo script para crear n usuarios de forma recursiva. Podemos emplear las siguientes opciones de bucle: 

    • Do ….. while

    • Do ….. Until

    • For

    $n = 1$conn=[ADSI]»WinNT://localhost»  Do {$user = $conn.Create(«user»,»TestUser» + $n) $user.SetPassword(«Passw0rd»)$user.SetInfo()            $n++}While ($n –lt 10)
    Escribimos este script en un archivo de texto y lo guardamos con la extensión .ps1Para ejecutarlo solo debemos ir a la consola de PowerShell y escribir el nombre del script antecedido de “.”, por ejemplo, si lo hemos llamado CrearUsuario.ps1, entonces escribiremos en la consola .CrearUsuarios.ps1  

    Sin embago rápidamente observareis que os da un error de ejecución del script. Esto se debe a que por motivos de seguridad, de forma predeterminada PowerShell no ejecuta scripts que no estén firmados digitalmente por una entidad de confianza.

      Para cambiar este comportamiento y que nos permita ejecutar nuestros scripts, necesitaremos establecer el nivel de seguridad en no restringido o firma remota: 

    • Unrestricted: No se verifica la firma de ningún script

    • remoteSigned: Se verifica la firma de los scripts descargados de Internet, pero se puedenejecutar los scripts creados en el equipo local.
    Lógicamente es una mejor opción de seguridad configurar remoteSigned que Unrestricted, por lo tanto: 

    • Set-executionpolicy RemoteSigned
    Si queremos comprobar el estado de la directiva de seguridad: 

    • Get-executionpolicy
    Ahora bien, si en vez de crear usuarios a partir de un bucle numerado, queremos leer la información desde un archivo de texto en formato .csv, entonces podemos escribir algo como lo siguiente: 
    $conn=[ADSI]»WinNT://localhost» import-csv Usuarios.csv | forEach {             $user = $conn.Create(«user»,$_.Nombre)             $user.SetPassword($_.Pass)            $user.SetInfo()            }
     El archivo .csv debemos escribir los nombres de las propiedades de los usuarios y un usuario en cada línea: 
    Nombre,PassJulio,Passw0rdMaria, Passw0rdLuis, Passw0rdPedro, Passw0rd
    En esta ocasión hacemos uso de los cmdlets import-csv y forEach El cmdlet import-csv, lee datos de archivos de texto separado por comas e interpreta una a una cada línea de información. No es necesario hacer un ciclo de lectura ya que está intrínsecamente incorporado al cmdlet.Por otro lado, el cmdlet forEach (o forEach-Object) es en sí un ciclo de procesamiento, el cual finaliza cuando ya no hay más objetos en el arreglo. Como podeis observar se pasan los resultados del import-csv a forEach mediante el uso de la tubería ( | ) El cmdlet import-csv se utiliza habitualmente en entornos de Exchange Server para crear de forma masiva multiples usuarios y buzones con un mínimo esfuerzo: 
    Import-CSV ListadeBuzones.csv | foreach {new-mailbox -alias $_.alias -name $_.name -userPrincipalName $_.UPN -database «Mailbox Database» -org Users -Password $Password}
    Finalmente podemos exportar la información recogida o los cambios realizados en el sistema en un informe html para su archivado. Informe de usuarios locales:

    • Get-WmiObject win32_Useraccount -ComputerName localhost | where {$_.LocalAccount} | select-object -property Name,Domain,SID,AccountType | convertto-html | out-file C:usuariosLocales.html
    Informe de recursos compartidos (el punto después de ComputerName indica el equipo local. Si se desea obtener la información de otro equipo, se debe sustituir el . por el nombre del equipo remoto)

    • Get-WmiObject -Namespace rootcimv2 -Class Win32_Share -ComputerName .| select-object -property Name,Path,Description,Computer | ConvertTo-html | out-file C:RecursosCompartidos.html
    Hemos visto como con unos conocimientos básicos de programación y con PowerShell podemos realizar tareas muy potentes en muy poco tiempo. Os recomiendo seguir profundizando y ampliando conocimientos con esta consola de Microsoft, ya que no solo Windows Vista la incorpora, sino que la mayoría de productos Microsoft que ya están en el mercado o a punto de salir incluyen PowerShell.

    System Center Operations Manager 2007, System Center Virtual Machine Manager 2007, SQL Server 2008, Exchange Server 2007, Windows Server 2008, IIS 7, etc.

    2 comentarios sobre “PoweShell V de V”

    1. Fantástica la serie de entradas sobre Powershell, has dejado perfectamente clara su potencia y flexibilidad.
      ¡Enhorabuena y sigue así!

      David C.

    2. «el cual finaliza cuando ya no hay más objetos en el arreglo».

      Hacía años que no leía la famosa macarrada del arreglo !!! Botarate.
      Y el bucle es iterativo, no recursivo.

      get-process | stop-process -force

    Deja un comentario

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