Từ PowerShell Core 6.0, bạn có thể viết &
ở cuối lệnh và nó sẽ tương đương với việc chạy đường ống dẫn của bạn trong nền trong thư mục làm việc hiện tại .
Nó không tương đương với &
bash, nó chỉ là một cú pháp đẹp hơn cho tính năng công việc PowerShell hiện tại . Nó trả về một đối tượng công việc để bạn có thể sử dụng tất cả các lệnh khác mà bạn sẽ sử dụng cho các công việc. Ví dụ Receive-Job
:
C:\utils> ping google.com &
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
35 Job35 BackgroundJob Running True localhost Microsoft.PowerShell.M...
C:\utils> Receive-Job 35
Pinging google.com [172.217.16.14] with 32 bytes of data:
Reply from 172.217.16.14: bytes=32 time=11ms TTL=55
Reply from 172.217.16.14: bytes=32 time=11ms TTL=55
Reply from 172.217.16.14: bytes=32 time=10ms TTL=55
Reply from 172.217.16.14: bytes=32 time=10ms TTL=55
Ping statistics for 172.217.16.14:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 10ms, Maximum = 11ms, Average = 10ms
C:\utils>
Nếu bạn muốn thực thi một vài câu lệnh trong nền, bạn có thể kết hợp &
toán tử cuộc gọi , { }
khối tập lệnh và &
toán tử nền mới này như ở đây:
& { cd .\SomeDir\; .\SomeLongRunningOperation.bat; cd ..; } &
Dưới đây là một số thông tin từ các trang tài liệu:
từ những gì mới trong PowerShell Core 6.0 :
Hỗ trợ tạo nền cho các đường ống bằng ký hiệu (&) (# 3360)
Đặt &
ở cuối đường ống làm cho đường ống được chạy như một công việc PowerShell. Khi một đường ống được làm nền, một đối tượng công việc được trả về. Khi đường ống đang hoạt động như một công việc, tất cả các *-Job
lệnh ghép ngắn tiêu chuẩn có thể được sử dụng để quản lý công việc. Các biến (bỏ qua các biến cụ thể của quá trình) được sử dụng trong đường ống được tự động sao chép vào công việc để Copy-Item $foo $bar &
chỉ hoạt động. Công việc cũng được chạy trong thư mục hiện tại thay vì thư mục chính của người dùng. Để biết thêm thông tin về các công việc PowerShell, hãy xem about_Jobs .
từ about_operators / toán tử nền Ampersand & :
Toán tử Ampersand &
Chạy đường ống trước khi nó hoạt động trong PowerShell. Toán tử ampersand hoạt động tương tự như "toán tử ampersand" UNIX, vốn nổi tiếng chạy lệnh trước khi nó là một quá trình nền. Toán tử ampersand nền được xây dựng dựa trên các công việc PowerShell để nó chia sẻ rất nhiều chức năng Start-Job
. Lệnh sau chứa cách sử dụng cơ bản của toán tử nền và dấu.
Get-Process -Name pwsh &
Đây là chức năng tương đương với việc sử dụng sau đây Start-Job
.
Start-Job -ScriptBlock {Get-Process -Name pwsh}
Vì nó có chức năng tương đương với việc sử dụng Start-Job
, toán tử nền và trả về một Job
đối tượng giống như Start-Job does
. Điều này có nghĩa là bạn có thể sử dụng Receive-Job
và Remove-Job
giống như bạn đã từng sử dụng Start-Job
để bắt đầu công việc.
$job = Get-Process -Name pwsh &
Receive-Job $job
Đầu ra
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
0 0.00 221.16 25.90 6988 988 pwsh
0 0.00 140.12 29.87 14845 845 pwsh
0 0.00 85.51 0.91 19639 988 pwsh
$job = Get-Process -Name pwsh &
Remove-Job $job
Để biết thêm thông tin về các công việc PowerShell, hãy xem about_Jobs .
Start-Job
sẽ bị giết khi vỏ PS thoát ra. Ngược lại, có vẻ như một cái gì đó bắt đầu vớiStart-Process
sẽ tiếp tục chạy sau khi vỏ PS thoát ra. Đây là một sự khác biệt lớn .