PowerShell
Variables automáticas
Buscar..
Introducción
Las variables automáticas son creadas y mantenidas por Windows PowerShell. Uno tiene la capacidad de llamar a una variable casi cualquier nombre en el libro; Las únicas excepciones a esto son las variables que ya están siendo administradas por PowerShell. Estas variables, sin duda, serán los objetos más repetitivos que utilice en PowerShell junto a las funciones (como $? - indica el estado de éxito / falla de la última operación)
Sintaxis
-
$$
- Contiene el último token en la última línea recibida por la sesión. -
$^
: Contiene el primer token en la última línea recibida por la sesión. -
$?
- Contiene el estado de ejecución de la última operación. -
$_
- Contiene el objeto actual en la tubería
$ pid
Contiene el ID de proceso del proceso de alojamiento actual.
PS C:\> $pid
26080
Valores booleanos
$true
y $false
son dos variables que representan lógicas VERDADERO y FALSO.
Tenga en cuenta que debe especificar el signo de dólar como primer carácter (que es diferente de C #).
$boolExpr = "abc".Length -eq 3 # length of "abc" is 3, hence $boolExpr will be True
if($boolExpr -eq $true){
"Length is 3"
}
# result will be "Length is 3"
$boolExpr -ne $true
#result will be False
Tenga en cuenta que cuando utiliza booleano verdadero / falso en su código, escribe $true
o $false
, pero cuando Powershell devuelve un valor booleano, parece True
o False
$ nulo
$null
se utiliza para representar el valor ausente o indefinido.
$null
se puede usar como un marcador de posición vacío para el valor vacío en las matrices:
PS C:\> $array = 1, "string", $null
PS C:\> $array.Count
3
Cuando usamos la misma matriz que la fuente para ForEach-Object
, procesará los tres elementos (incluido $ null):
PS C:\> $array | ForEach-Object {"Hello"}
Hello
Hello
Hello
¡Ten cuidado! Esto significa que ForEach-Object
procesará incluso $null
por sí mismo:
PS C:\> $null | ForEach-Object {"Hello"} # THIS WILL DO ONE ITERATION !!!
Hello
Lo que es un resultado muy inesperado si lo comparas con el bucle foreach
clásico:
PS C:\> foreach($i in $null) {"Hello"} # THIS WILL DO NO ITERATION
PS C:\>
$ OFS
La variable llamada Output Field Separator contiene un valor de cadena que se utiliza al convertir una matriz en una cadena. Por defecto $OFS = " "
( un espacio ), pero se puede cambiar:
PS C:\> $array = 1,2,3
PS C:\> "$array" # default OFS will be used
1 2 3
PS C:\> $OFS = ",." # we change OFS to comma and dot
PS C:\> "$array"
1,.2,.3
$ _ / $ PSItem
Contiene el objeto / elemento que está siendo procesado actualmente por la canalización.
PS C:\> 1..5 | % { Write-Host "The current item is $_" }
The current item is 1
The current item is 2
The current item is 3
The current item is 4
The current item is 5
$PSItem
y $_
son idénticos y se pueden usar indistintamente, pero $_
es, con mucho, el más utilizado.
PS
Contiene el estado de la última operación. Cuando no hay error, se establece en True
:
PS C:\> Write-Host "Hello"
Hello
PS C:\> $?
True
Si hay algún error, se establece en False
:
PS C:\> wrt-host
wrt-host : The term 'wrt-host' is not recognized as the name of a cmdlet, function, script file, or operable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ wrt-host
+ ~~~~~~~~
+ CategoryInfo : ObjectNotFound: (wrt-host:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
PS C:\> $?
False
$ error
Matriz de los objetos de error más recientes. El primero en la matriz es el más reciente:
PS C:\> throw "Error" # resulting output will be in red font
Error
At line:1 char:1
+ throw "Error"
+ ~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (Error:String) [], RuntimeException
+ FullyQualifiedErrorId : Error
PS C:\> $error[0] # resulting output will be normal string (not red )
Error
At line:1 char:1
+ throw "Error"
+ ~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (Error:String) [], RuntimeException
+ FullyQualifiedErrorId : Error
Consejos de uso: cuando use la variable $error
en un cmdlet de formato (por ejemplo, format-list), tenga en cuenta que use el interruptor -Force
. De lo contrario, el cmdlet de formato generará el contenido de $error
en la forma mostrada anteriormente.
Las entradas de error pueden eliminarse, por ejemplo, $Error.Remove($Error[0])
.