Algunos ejemplos de código que parece correcto... pero que seguro que fallará en alguna situación. PowerShell NO ES VBS !

Contesta honestamente. La idea de este test es que puedas conocer y evaluar tus propias dudas...


Powershell  1. Esta función, ContarProcesos, cuenta los procesos en ejecución que tienen un nombre determinado. "CMD", por ejemplo.

 

  Function ContarProcesos ([string]$Name)

  {

    return (Get-Process -Name $Name).Count

  }

 

Funciona ?  
  Siempre      Nunca       Depende de la versión de PowerShell

Es una buena idea escribir así la función ?   SI         NO, pues podría funcionar a veces, pero hay modos mejores.

Respuesta :

 

En PowerShell 2 esto fallará en muchas ocasiones.

En v3 funciona, pero con un coste de rendimiento y claridad. La sintaxis está mal. 

 


Powershell   2. Estas 2 líneas de código buscan un nombre concreto de dominio ("domain.com") en el fichero Netlogon.Log

 

  $File = Get-Content NETLOGON.LOG

  $File | Select-String "domain.com"

 

Funciona ?  
  Siempre      Nunca       Depende de la versión de PowerShell

Pista  ¿ Qué sucede si el fichero tiene 1 TB de tamaño ? 

Respuesta :

 

Está MAL por su sintaxis. Devolverá a veces resultados erróneos.

Mete en el fichero el dominio, por ejemplo, DomainSCOM.NET y también lo encontrará.

Además, si el fichero es grande, nos dejará sin memoria. Hay mejores maneras !

 


Powershell    3. Esta función (ExisteUsuario) usa .Count para decidir si un usuario concreto existe en AD o no.

 

  Function ExisteUsuario ($Name)

  {

    return ((Get-AdUser -Identity $Name).Count -eq 1)

  }

 

Funciona ?  
  Siempre        Nunca                Depende de la versión de PowerShell
   
Independientemente de la versión de PowerShell, fallará. ¿ Por qué ?

Respuesta :
Pruébalo... esto no funciona así, ni siquiera con V4. La propiedad .Count es el diablo ! La sintaxis es incorrecta.

Powershell    4. Esta sencilla función (FicherosLOG) debe mostrar todos los ficheros *.LOG que haya en el directorio de Windows.

 

  Function FicherosLog

  {

    Get-ChildItem -Include *.LOG -Path $env:windir

  }

 

Funciona ?  
  Siempre        Nunca                Depende de la versión de PowerShell
   
Independientemente de la versión de PowerShell, fallará. ¿ Por qué ?

Respuesta :
Pruébalo... esto no funciona así.

Powershell    5. Esta función devuelve los servicios definidos, ordenados por Status.

       Pero nos importa el orden...

            Queremos ver primero los "Stopped" y luego los "Running", así que al Sort-Object le forzamos que sea -DESCENDING

 

  Function MostrarServicios

  {

    Get-Service | Sort-Object -Property Status -Descending

  }

 

Funciona ?  
  Siempre        Nunca                Depende de la versión de PowerShell
   

Curiosamente, el orden es el inverso al deseado.

Tenemos primero los "Running", y luego los "Stopped".

-Descending debería mostrar primero los Stopped.

 ¿ Por qué ?

Respuesta : TBD

Powershell    6.  Puedo definir variables con estos nombres ?

      

 

  $Cañón = 3

 

  $Esta Variable Tiene Espacios = 5

  

Funciona ?  
  Siempre        Nunca                Depende de la versión de PowerShell
Respuesta :
La primera es... correcta.
La variable con espacios es correcta, pero requiere algo más de sintaxis......

 


Powershell    7.  Puedo poner esta línea en mi profile ?

      

 

  $x = 1..10000000

 

   

Funciona ?  
  Siempre        Nunca                Depende de la versión de PowerShell
Respuesta :
Poder poder... lo que se dice poder.... claro que se puede.

 Ahora bien... cuánta memoria necesitaré en mi sesión ? 



Powershell    8.  Estoy haciendo un bucle para cada mes del año... y en España (y en cualquier otro idioma) ...

        ... me sale que hay 13 meses en el año !!! ¿ 13 ??? Por qué ?

 

  $Region = "es-ES"

 

  $Meses = [globalization.cultureinfo]::CreateSpecificCulture($Region).DateTimeFormat.MonthNames

 

  foreach ($Mes in $Meses) { Write-Host $Mes }    # Línea extra !

 

 $Meses.Count    # 13

   

 

Funciona ?  
  Siempre        Nunca                Depende de la versión de PowerShell
Respuesta :
  Este bucle está mal. No podemos usar los meses al año así porque Windows define 13...

  Sí, 13 (y no es un error).

  En el caso de Write-Host obtenemos una línea extra vacía, algo que puede no ser muy grave...

  Pero en un bucle de verdad, procesando ficheros por ejemplo, nos volveremos locos con el nombre del mes treceavo...


 


(TBD - Añadiendo más ejemplos en breve)



Get-JC © Diciembre 2015
Todos los derechos reservados.
 
Get-PowerShell | Use-PowerShell -Force