Archivos de la categoría powershell

obtener un numero aleatorio con powershell

Esta entrada tiene dos objetivos, el primero aprender a obtener un número aleatorio con powershell y el segundo advertiros del funcionamiento real de la función que nos ayuda a obtenerlo.

La función que ofrece powershell para obtener un resultado aleatorio (antes he dicho un número, pero realmente no es así, después me explico) es Get-Random.
Esta función acepta principalmente dos parámetros -Maximum y -Minimum. Os pongo algunos ejemplos de uso de esta función:

Get-Random 10
Este comando obtendrá un número entre 0 y 9

Get-Random 10 -Minimum 3
Este comando obtendrá un número entre 3 y 9

5 | Get-Random
Este comando obtendrá un número entre 0 y 4

Como podéis ver en los ejemplos el valor máximo que le indicamos a la función no será incluido en el cálculo del número aleatorio (esto es lo que quería mostraros). De esta forma, para evitar que nos confundamos, podemos tomar dos alternativas:

1) Usar la función indicando de manera visual el número que queremos usar de límite:

Get-Random (10+1) -Minimum 2


De esta forma visualmente vemos que estamos obteniendo un número entre 2 y 10.

2) Definir una función Get-RealRandom que obtenga un número aleatorio teniendo en cuenta el valor que digamos como valor máximo en el cálculo y se usaría así:

Get-RealRandom -Maximum 10 -Minimum 2


Con esta función estamos obteniendo un número entre 2 y 10.

Por último, como comenté al principio del post, en realidad Get-Random no sólo obtiene un número aleatorio, sino que también puede obtener un objeto aleatorio de una lista de objetos. Es decir, que podemos hacer cosas como lo siguiente:

"pepe", "luis", "angel" | Get-Random
Este comando devolverá uno de los 3 strings pasados por el pipeline

"pepe", 3, "angel" | Get-Random
Este comando va un poco más lejos y devolverá uno de los elementos pasados por el pipeline, en este caso son 2 strings y un integer

Get-Process | Get-Random
Este comando devolverá un proceso del sistema de manera aleatoria

Como véis la potencia que ofrece está función es realmente interesante y puede ser muy útil.

Si queréis podéis echar un ojo al código de la función que he definido como Get-RealRandom.

funcion para buscar cadena de texto en un archivo con powershell

Todos los lenguajes de programación disponen de funciones que nos facilitan la vida a los programadores, pero están suelen ser muy limitadas. Por este motivo y por muchos otros siempre es necesario definir nuestras propias funciones.

Hoy os voy a contar como definir una función en powershell con un ejemplo muy útil: buscar una cadena de texto en un archivo.

Definición de la función:

function buscarCadena([String]$cadena , [String]$file) {
    # Se verifica que el fichero existe y la cadena no es nula
    if ((Test-Path -Path $file) -and $cadena) {
        $list = Get-Content $file
        # Si se encuentra la cadena se devuelve true
        if ($list -match $cadena) {
            return $true
        }
    }
    # Se devuelve false si no encuentra nada o el fichero no existe
    return $false
}

Como véis la función se define con la palabra “function” seguido del nombre que le queráis poner a la función. Después entre paréntesis se indican los parámetros que sean necesarios, en caso de no necesitar parámetros, los paréntesis deben ir vacíos.

Después entre llaves va el código de la función. En este caso lo que hace la función es leer el archivo pasado por parámetro y busca el texto que también se pasa por parámetro.

El resultado de la función (que no imprescindible) se indica con el comando “return” seguido del valor a devolver. En el caso de la función del ejemplo, devuelve $false o $true, dependiendo de si se ha encontrado la cadena de texto buscada o no.

Ejemplo de llamada a la función:

buscarCadena "texto a buscar" "c:\archivo.txt"

El resultado de esta llamada se puede usar de muchas maneras, por ejemplo, en un if o asignando el resultado a una variable.

if (buscarCadena "texto a buscar" "c:\archivo.txt") { ..... }

$existeCadena = buscarCadena "texto a buscar" "c:\archivo.txt"

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