jueves, 14 de marzo de 2013

Compare-Object: o comparando archivos y directorios con PowerShell

Para ir entrando en tema con esto de PowerShell vamos a ver como comparar archivos con el comando Compare-Object, el cual sirve para comparar objetos como ya se imaginaran... :)
En este caso vamos a crear 2 archivos de ejemplo, 2 archivos de texto que son idénticos en la primer línea y diferentes en la segunda y veremos que nos devuelve este cmdlet.

Primero, desde una consola de PowerShell, creamos los archivos:

PS C:\Users\Fernando\Documents\Blog> Write-Output "Esto es un test" > test01.txt
PS C:\Users\Fernando\Documents\Blog> Write-Output "Y este es el primer archivo" >> test01.txt
PS C:\Users\Fernando\Documents\Blog>
PS C:\Users\Fernando\Documents\Blog>
PS C:\Users\Fernando\Documents\Blog> Write-Output "Esto es un test" > test02.txt
PS C:\Users\Fernando\Documents\Blog> Write-Output "Y este es el archivo 2" >> test02.txt


Verificamos el contenido de los mismos:


PS C:\Users\Fernando\Documents\Blog> Get-Content .\test01.txt
Esto es un test
Y este es el primer archivo
PS C:\Users\Fernando\Documents\Blog>
PS C:\Users\Fernando\Documents\Blog>
PS C:\Users\Fernando\Documents\Blog> Get-Content .\test02.txt
Esto es un test
Y este es el archivo 2

Y ejecutamos el cmdlet con los siguientes parámetros:

PS C:\Users\Fernando\Documents\Blog> Compare-Object $(Get-Content .\test01.txt) $(Get-Content .\test02.txt)

En este caso los 2 parámetros son los contenidos de los archivos test01.txt y test02.txt. El resultado es el siguiente:

PS C:\Users\Fernando\Documents\Blog> Compare-Object $(Get-Content .\test01.txt) $(Get-Content .\test02.txt)
InputObject                                                 SideIndicator
-----------                                                 -------------
Y este es el archivo 2                                      =>
Y este es el primer archivo                                 <=

La columna InputObject nos da las diferencias y con la columna SideIndicator podemos ver en que archivo está ese elemento de InputObject.

Otra aplicación interesante de este objeto es la de encontrar las diferencias entre directorios, es decir cuando tenemos 2 carpetas que tienen una gran cantidad de archivos en común y queremos saber cuales están en uno y en el otro no y viceversa. Para esto podemos usar este mismo cmdlet pero cambiamos los parámetros:

Compare-Object $(Get-ChildItem X:\dir1 -name) $(Get-ChildItem \\recurso01\dir2 -name)

En este caso usamos el cmdlet Get-ChildItem para hacer un dir de los directorios (el segundo de ellos un recurso compartido) y con el parámetro -name traermos solo el nombre de los archivos.

viernes, 8 de marzo de 2013

Como averiguo la fecha de ultima modificación del password

Cortita y al pié.
Hace poco me encontré con una situación en la que tenía que averiguar la fecha de modificación del password de un usuario en Windows Server 2008 (Stand alone).

Concretamente desde la línea de comandos ejecutar:

net user

Y eso nos devolverá, entre otra información, el "Ultimo cambio de contraseña" (en español) o "last password  change", además de informar si la cuenta expira, si está activa o si la contraseña expira.