Tìm kiếm trang web

Khối tập lệnh PowerShell | Hướng dẫn đầy đủ về khối tập lệnh PowerShell


Giới thiệu về khối tập lệnh PowerShell

Bài viết sau đây cung cấp thông tin tóm tắt về khối tập lệnh PowerShell. Tập hợp mã hoặc câu lệnh được đặt trong {} được gọi là scriptblock. Nó cũng có thể được coi là một biểu thức. Điều này giúp các nhà phát triển dễ dàng phân đoạn mã thành nhiều phần khác nhau và cùng một mã có thể được sử dụng ở nhiều nơi một cách dễ dàng. Nó giống như một hàm nhưng scriptblock không có tên. Chúng ta có thể coi scriptblock là một hàm ẩn danh. Ưu điểm chính của scriptblock là nó dễ dàng mang theo. scriptblock giống như một hàm có thể chấp nhận các tham số đầu vào và giá trị trả về.

Cú pháp của khối tập lệnh PowerShell

Một scriptblock được định nghĩa như sau:

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

Đầu ra của các lệnh ghép ngắn bên trong scriptblock được trả về dưới dạng một đối tượng hoặc dưới dạng một mảng.

Từ khóa param được sử dụng để biểu thị các tham số đầu vào cho scriptblock và từ khóa return biểu thị giá trị trả về. Khi đạt đến dòng trả về, điều khiển sẽ được thoát khỏi scriptblock

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

scriptblock là một đối tượng của loại khung .net System.Man Management.Automation.ScriptBlock. Một số lệnh ghép ngắn nhất định có khối tập lệnh làm tham số.

Ví dụ:

Mã:

Invoke-Command -ScriptBlock { Get-Command }

Đầu ra:

Sự khác biệt giữa chức năng và scriptblock

Sự khác biệt chính giữa hàm và scriptblock là hàm không thể được gán cho một biến trong khi scriptblock có thể được gán làm giá trị cho một biến. scriptblock có thể dễ dàng di chuyển và do đó nên được sử dụng một cách khôn ngoan.

Ví dụ :

Khai báo và gọi hàm.

Mã:

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

Gọi hàm.

Mã:

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

Nếu $var được gọi thì đầu ra bên dưới sẽ được hiển thị.

Đầu ra:

Để gọi khối tập lệnh và ký hiệu phải được sử dụng.

Truyền tham số cho scriptblock

Mã:

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])..." }

Đầu ra:

Ví dụ #1:

Mã:

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"

Đầu ra:

Giả sử một biến được gọi bên trong scriptblock, giá trị biến được thay đổi bên ngoài scriptblock sau đó nó được thay đổi bên trong scriptblock. Điều này được gọi là thiết lập bằng cách tham khảo. Nếu không cần thay đổi giá trị thì phải sử dụng phương thức GetNewClosure().

Ví dụ #2:

Mã:

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()

Đầu ra:

Bắt đầu quá trình và kết thúc

Giống như một hàm, quá trình Bắt đầu và Kết thúc có thể được thêm vào một khối tập lệnh. Khối bắt đầu được sử dụng để xác định các biến, đường dẫn, v.v. Khối quy trình chứa mã để thao tác. Khối cuối đang làm sạch mã.

Ví dụ #1:

Mã:

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

Đầu ra:

Ví dụ #2:

Mã:

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

Đầu ra:

Sử dụng Delay-Bind trong scriptblock

Khi một tham số chấp nhận đầu vào dưới dạng giá trị hoặc dưới dạng tên thuộc tính thì liên kết trễ có thể được sử dụng trên tham số đó. Đối tượng đường ống có thể được tham chiếu bên trong scriptblock bằng biến $_. Điều này hữu ích trong việc thực thi các lệnh ghép ngắn phức tạp trong đó điều này cho phép một đối tượng tạo ra các tham số khác. Tên tham số phải được chỉ định rõ ràng trong khi sử dụng liên kết độ trễ. Không được bỏ nhập tham số hoặc loại tập lệnh hoặc loại đối tượng. Nếu sử dụng liên kết trễ mà không nhập đầu vào đường ống thì sẽ xảy ra lỗi.

Kết luận - Khối tập lệnh PowerShell

Vì vậy, trong bài viết này, chúng ta đã thấy chi tiết về khối tập lệnh, xác định khối tập lệnh, thêm và truyền tham số cho khối tập lệnh. Nó cũng đưa ra các ví dụ thích hợp về cách xác định và gọi một khối tập lệnh. Bài viết cũng chứa nhiều ví dụ liên quan khác liên quan đến scriptblock. Chúng ta cũng đã biết về liên kết độ trễ trong scriptblock và cách sử dụng nó.

Bài viết liên quan