Archivos mensuales: noviembre 2012

escribir en un fichero con powershell

Siempre puede venir bien guardar cierta información en un archivo.

Para ello, powershell dispone de varios métodos. Uno de ellos es el cmdlet Out-File que tiene opciones para sobreescribir un archivo, añadir el texto que queramos al final del mismo o guardar el fichero en formato ascii o unicode.

Vamos a pasar a los ejemplos.

1. Escribir un texto en un archivo, sobreescribiéndolo en caso de que existiera.

$textoAGuardar | Out-File -FilePath $rutaDelArchivo

2. Escribir un texto en un archivo, sobreescribiéndolo en caso de que existiera incluso si es de sólo lectura.

$textoAGuardar | Out-File -FilePath $rutaDelArchivo -Force

3. Escribir un texto en un archivo, añadiendo el texto al final en caso de que existiera.

$textoAGuardar | Out-File -FilePath $rutaDelArchivo -Append

4. Escribir un texto en un archivo, sobreescribiéndolo en caso de que existiera con formato ASCII.

$textoAGuardar | Out-File -FilePath $rutaDelArchivo -Encoding ASCII

5. Escribir el contenido de un objeto en un archivo, sobreescribiéndolo en caso de que existiera.

Out-File -FilePath $rutaDelArchivo -Encoding ASCII -InputObject $textoAGuardar

Podéis encontrantar más ayuda en la web de microsoft

arrancar y parar servicios con powershell

Todos los que de alguna forma nos dedicados a la administración de sistemas por algún motivo hemos tenido que enfrentarnos a los servicios del sistema. Hoy voy a comentar una forma para parar y arrancar servicios utilizando llamadas a cmdlets de powershell.

Comando para Parar un servicio:

Stop-Service -name "Examinador de equipos" -force

Con esto se dentendrá el servicio cuyo nombre indicamos. El parámetro -force obligará al servicio a detenerse.

Comando para Arrancar un servicio:

Start-Service -name "Examinador de equipos"

Con este otro cmdlet conseguiremos arrancar el servicio indicado.

Con ambos comandos se puede comprobar que el resultado de la acción ha sido la deseada consultando la variable $? después de la ejecución del comando. Si la ejecución es correcta el comando devolverá “True” y en caso contrario “False“.

definir variables globales en powershell

La utilización de variables globales es muy interesante en determinadas ocasiones, por lo que os voy a contar cómo se puede hacer esto con powershell.

Para definir una variable global tan sólo hay que anteponer al nombre de la variable “global:“, es decir, para definir una variable “prueba” que sea global, habría que poner lo siguiente:

$global:prueba = "valor deseado"

El comportamiento de esta variable será el siguiente:

function cambiarValor() {
    $global:prueba = "valor dentro función"
}

$global:prueba = "valor inicial"
cambiarValor

Si no definieramos la variable como global, el valor de la variable después de ejecutar la función “cambiarValor” sería “valor inicial“, pero al definirla como global, la variable mantiene el valor que se le ha asignado en la función, es decir, “valor dentro función“.

Podéis ver el ejemplo en la siguiente imagen.
variables globales en powershell

obtener la longitud de un archivo con powershell

En esta entrada os voy a enseñar como obtener el tamaño de un archivo. Pongo el código y después lo explico:

$fichero = 'c:\prueba.log'
if (Test-Path -Path $fichero) {
    $fileSize = (Get-ItemProperty -Path $fichero).Length
        if ($fileSize -gt 15000) {
         ... tu codigo ...
    }
}

En resumen, lo que hace el código es verificar que existe el archivo “c:\prueba.log” (variable $fichero) con ayuda de “Test-Path” y en caso de que exista mira el tamaño del mismo, guardando el valor en la variable $filesize en bytes.
Una vez que tenemos el tamaño, podemos hacer con ese dato lo que queramos. En mi caso, lo suelo usar para verificar que el tamaño no supere un límite prefijado (en este caso 15000 bytes).

recuperar la ultima palabra de un string con powershell

A la hora de trabajar con cadenas de texto (strings) powershell nos permite acceder a las palabras como si de un array se tratara, para ello hay que recurrir a la función split().

$texto = "esta es mi cadena de texto de prueba"
$ultimaPalabra = $texto.split()[-1]

Como veis, primero defino una variable que contiene un string. Después accedo a la última palabra usando el índice -1, de tal forma que la variable $ultimaPalabra contiene el texto “prueba”.

Como ya habréis imaginado, también se puede acceder a la penúltima palabra usando el índice -2.

También se puede acceder a la primera palabra, pero atención, algunos habréis pensado que en este caso habría que usar el índice 1, pero no es así, ya que los arrays en powershell comienzan con el cero, es decir, que para obtener la primera palabra habría que poner lo siguiente:

$primeraPalabra = $texto.split()[0]

En este caso, la variable $primeraPalabra contendrá el texto “esta”.

Por último, también comentar que si por ejemplo tenéis una cadena de texto, separada por ejemplo por puntos y comas, la función split() también nos puede ayudar a separarlo en palabras de la siguiente manera:

$textoPuntosYComas = "esto;es;una;cadena;con;puntos y comas"
$ultimaCadena = $textoPuntosYComas.split(';')[-1]

He puesto a propósito la última parte del string con espacios, para que veáis el resultado del comando. Al indicar a la función split() que divida el string por ‘;’ los espacios son tratados como un caracter normal, por lo que la variable $ultimaCadena contendrá “puntos y comas”.

Os recomiendo que hagáis vuestras pruebas para que terminéis de comprobar el funcionamiento de split().