Buscar..


Introducción

Las variables se utilizan para almacenar valores. Deje que el valor sea de cualquier tipo, necesitamos almacenarlo en algún lugar para poder usarlo en toda la consola / script. Los nombres de variables en PowerShell comienzan con $ , como en $ Variable1 , y los valores se asignan usando = , como $ Variable1 = "Valor 1". PowerShell admite una gran cantidad de tipos de variables; como cadenas de texto, enteros, decimales, matrices e incluso tipos avanzados como números de versión o direcciones IP.

Variable simple

Todas las variables en powershell comienzan con un signo de dólar estadounidense ( $ ). El ejemplo más simple de esto es:

$foo = "bar"

Esta declaración asigna una variable llamada foo con un valor de cadena de "barra".

Eliminando una variable

Para eliminar una variable de la memoria, se puede usar el cmdlet Remove-Item . Nota: El nombre de la variable NO incluye el $ .

Remove-Item Variable:\foo

Variable tiene un proveedor para permitir que la mayoría de los cmdlets * -item funcionen de manera similar a los sistemas de archivos.

Otro método para eliminar la variable es usar el cmdlet Remove-Variable y su alias rv

$var = "Some Variable" #Define variable 'var' containing the string 'Some Variable'
$var #For test and show string 'Some Variable' on the console

Remove-Variable -Name var
$var 

#also can use alias 'rv'
rv var

Alcance

El ámbito predeterminado para una variable es el contenedor adjunto. Si está fuera de un script u otro contenedor, el alcance es Global . Para especificar un alcance , se le $scope:varname prefijo al nombre de variable $scope:varname así:

$foo = "Global Scope"
function myFunc {
    $foo = "Function (local) scope"
    Write-Host $global:foo
    Write-Host $local:foo
    Write-Host $foo
}
myFunc
Write-Host $local:foo
Write-Host $foo

Salida:

    Global Scope
    Function (local) scope
    Function (local) scope
    Global Scope
    Global Scope

Leyendo una salida de CmdLet

De forma predeterminada, powershell devolvería la salida a la entidad llamante. Considere el siguiente ejemplo,

Get-Process -Name excel   

Esto simplemente devolvería el proceso en ejecución que coincide con el nombre excel, a la entidad llamante. En este caso, el host de PowerShell. Imprime algo como

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id  SI ProcessName                                                                                                                     
-------  ------    -----      ----- -----   ------     --  -- -----------                                                                                                                     
   1037      54    67632      62544   617     5.23   4544   1 EXCEL 

Ahora, si asigna la salida a una variable, simplemente no imprimirá nada. Y, por supuesto, la variable mantiene la salida. (Ya sea una cadena, Objeto - Cualquier tipo para esa materia)

$allExcel = Get-Process -Name excel

Entonces, digamos que tiene un escenario donde desea asignar una variable por un nombre dinámico, puede usar el parámetro -OutVariable

Get-Process -Name excel -OutVariable AllRunningExcel

Tenga en cuenta que aquí falta el $. Una diferencia importante entre estas dos asignaciones es que, también imprime el resultado además de asignarlo a la variable AllRunningExcel. También puede optar por asignarlo a otra variable.

$VarOne = Get-Process -Name excel -OutVariable VarTwo

Aunque, el escenario anterior es muy raro, ambas variables $ VarOne y $ VarTwo tendrán el mismo valor.

Ahora considera esto,

Get-Process -Name EXCEL -OutVariable MSOFFICE
Get-Process -Name WINWORD -OutVariable +MSOFFICE

La primera declaración simplemente obtendría el proceso de Excel y lo asignaría a la variable MSOFFICE, y luego ejecutaría los procesos de ms word y lo "agregaría" al valor existente de MSOFFICE. Se vería algo como esto,

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id  SI ProcessName                                                                                                                     
-------  ------    -----      ----- -----   ------     --  -- -----------                                                                                                                     
   1047      54    67720      64448   618     5.70   4544   1 EXCEL                                                                                                                           
   1172      70    50052      81780   584     1.83  14968   1 WINWORD     

Asignación de listas de múltiples variables

Powershell permite la asignación múltiple de variables y trata casi todo como una matriz o lista. Esto significa que en lugar de hacer algo como esto:

$input = "foo.bar.baz"
$parts = $input.Split(".")
$foo = $parts[0]
$bar = $parts[1]
$baz = $parts[2]

Simplemente puede hacer esto:

$foo, $bar, $baz = $input.Split(".")

Dado que Powershell trata las asignaciones de esta manera como si fueran listas, si hay más valores en la lista que elementos en su lista de variables a las que asignarlos, la última variable se convierte en una matriz de los valores restantes. Esto significa que también puedes hacer cosas como esta:

$foo, $leftover = $input.Split(".") #Sets $foo = "foo", $leftover = ["bar","baz"]
$bar = $leftover[0] # $bar = "bar"
$baz = $leftover[1] # $baz = "baz"

Arrays

La declaración de arrays en Powershell es casi lo mismo que crear una instancia de cualquier otra variable, es decir, se usa una sintaxis de $name = . Los elementos de la matriz se declaran separándolos con comas ( , ):

$myArrayOfInts = 1,2,3,4
$myArrayOfStrings = "1","2","3","4"

Añadiendo a un arry

Agregar a una matriz es tan simple como usar el operador + :

$myArrayOfInts = $myArrayOfInts + 5
//now contains 1,2,3,4 & 5!

Combinando matrices juntas

De nuevo, esto es tan simple como usar el operador +

$myArrayOfInts = 1,2,3,4
$myOtherArrayOfInts = 5,6,7
$myArrayOfInts = $myArrayOfInts + $myOtherArrayOfInts
//now 1,2,3,4,5,6,7


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow