Búsqueda de sitios web

Bloque de secuencias de comandos de PowerShell | Guía completa del bloque de scripts de PowerShell


Introducción al bloque de scripts de PowerShell

El siguiente artículo proporciona un resumen del bloque de secuencias de comandos de PowerShell. Una colección de código o declaraciones encerradas en un {} se conoce como bloque de script. También puede considerarse como una expresión. Esto facilita a los desarrolladores segmentar el código en varias divisiones y el mismo código se puede utilizar en varios lugares con facilidad. Es como una función, pero scriptblock no tiene nombre. Podemos considerar scriptblock como una función anónima. La principal ventaja del scriptblock es que es fácilmente portátil. scriptblock como función puede aceptar parámetros de entrada y un valor de retorno.

Sintaxis del bloque de scripts de PowerShell

Un bloque de script se define de la siguiente manera:

{
//statement1
//statement2
//statement3
// statement 4
// statement 5
}

La salida de los cmdlets dentro del bloque de script se devuelve como un objeto único o como una matriz.

La palabra clave param se utiliza para indicar los parámetros de entrada para el bloque de script y la palabra clave return indica el valor de retorno. Una vez que se alcanza la línea de retorno, el control sale del bloque de script.

{
Param([type]$Parameter1 [,[type]$Parameter2])
//statement1
//statement2
//statement3
//statement 4
//statement 5
Return
}

Un scriptblock es un objeto de tipo .net framework System.Management.Automation.ScriptBlock. Ciertos cmdlets tienen un bloque de script como parámetro.

Ejemplo:

Código:

Invoke-Command -ScriptBlock { Get-Command }

Salida:

Diferencia entre función y bloque de script

La principal diferencia entre una función y un bloque de script es que una función no se puede asignar a una variable, mientras que un bloque de script se puede asignar como valor a una variable. scriptblock son fácilmente transportables y, por lo tanto, deben usarse con prudencia.

Ejemplo :

Declaración y llamada de funciones.

Código:

Function test
{
Write-host “test function”
Write-host “No parameters to the function”
}

Llamando a la función.

Código:

Test
Now lets see how to define and call a script block
$var={write-host “Example of script block” }
$var
& $var

Si se llama a $var, se muestra el siguiente resultado.

Salida:

Para llamar a un bloque de script y se debe utilizar el símbolo.

Pasar parámetro a scriptblock

Código:

Write-Host "example of passing parameters to scrpit block"
$ip= { Write-Host "my name is:$name" }
$name= 'vignesh'
$username = { Write-Host "my name is $($args[0])..." }

Salida:

Ejemplo #1:

Código:

Invoke-Command -ScriptBlock {
param(
$age = "12")
Write-Host "Age is $age" -ForegroundColor Green
}
Invoke-Command -ScriptBlock {
param(
$empid = "123")
Write-Host "emp id is $empid" -ForegroundColor Yellow
} -ArgumentList "Bad"

Salida:

Digamos que se llama a una variable dentro de un bloque de secuencia de comandos, el valor de la variable se cambia fuera del bloque de secuencia de comandos y luego se cambia dentro del bloque de secuencia de comandos. A esto se le llama establecimiento por referencia. Si no es necesario cambiar el valor, se debe utilizar el método GetNewClosure().

Ejemplo #2:

Código:

write-Host " example of reference"
>$a=1
$b=2
$c=3
$d=$a+$b+$c
$sb= {"sum is $d"}
Write-Host "Using closure"
write-Host " example of reference"
$a1=1
$b2=2
$c3=3
$e=$a1+$b2+$c3
$sb1= {"sum is $e"}.GetNewClosure()

Salida:

Iniciar proceso y finalizar

Al igual que una función, Iniciar proceso y Finalizar se pueden agregar a un bloque de secuencia de comandos. El bloque de inicio se utiliza para definir variables, rutas, etc. El bloque de proceso contiene el código para la manipulación. El bloque final está limpiando el código.

Ejemplo #1:

Código:

$test = {
begin { '[Begin  ] welcome to the demo' }
process { "[age] $_" }
end { Write-Output '[End    ] completed' }
}
22, 33, 44 | & $test

Salida:

Ejemplo #2:

Código:

Write-Host "Example of simple script block with invoke command"
Invoke-Command -ScriptBlock { Get-Date }
Write-Host "Example of creating and calling a simple script block"
$test={write-host “Example of defining and calling script  block” }
& $test
Write-Host "Script block is called above"
Write-Host "example of passing parameters to scrpit block"
$ip= { Write-Host "my name is:$name" }
$name= "suriya"
Write-Host "&$ip"
$username = { Write-Host "my name is $($args[0])..." }
& $username 'nandhini'
Write-Host "Script block with param is executed"
Write-Host "example of script block with param keyword"
Invoke-Command -ScriptBlock {
param(
$height = "5.2")
Write-Host "height is $height" -ForegroundColor Green
}
Invoke-Command -ScriptBlock {
param(
$design = "manager")
Write-Host "designation id is $design" -ForegroundColor Yellow
} -ArgumentList "manager"
write-Host " example of calling by reference"
$age=10
$boy=24
$csa=36
$dsa=$age+$boy+$csa
$sb= {"sum is $dsa"}
Write-Host "total &$dsa"
Write-Host "Using closure method"
write-Host " example of reference"
$a1=1
$b2=2
$c3=3
$e=$a1+$b2+$c3
$sb1= {"sum is $e"}.GetNewClosure()
$inputs = {
begin { '[Begin  ] welcome to the demo of script block' }
process { "[dob] $_" }
end { Write-Output '[End    ] finished' }
}
2020, 2033, 2044 | & $inputs

Salida:

Usando Delay-Bind en scriptblock

Cuando un parámetro acepta entrada como valor o como nombre de propiedad, se puede utilizar el enlace retardado en ese parámetro. Se puede hacer referencia al objeto canalizado dentro del bloque de script usando la variable $_. Esto es útil para ejecutar cmdlets complejos donde permite que un objeto produzca otros parámetros. Los nombres de los parámetros deben especificarse explícitamente al utilizar el enlace retardado. El parámetro no debe ser sin tipo, ni bloque de secuencia de comandos ni tipo de objeto. Si se utiliza el enlace retardado sin ingresar la entrada de la canalización, se generará un error.

Conclusión: bloque de secuencias de comandos de PowerShell

Por lo tanto, en este artículo vimos detalles sobre el bloque de secuencia de comandos, cómo definir un bloque de secuencia de comandos, cómo agregar y pasar parámetros al bloque de secuencia de comandos. También mostró con ejemplos apropiados cómo definir y llamar a un bloque de script. El artículo también contenía varios otros ejemplos relevantes relacionados con scriptblock. También vimos sobre el enlace retardado en scriptblock y su uso.

Artículos relacionados