Dari PowerShell Core 6.0 Anda dapat menulis &
di akhir perintah dan itu akan setara dengan menjalankan pipeline di latar belakang di direktori kerja saat ini .
Ini tidak sama dengan &
di bash, itu hanya sintaks yang lebih bagus untuk fitur pekerjaan PowerShell saat ini. Ini mengembalikan objek pekerjaan sehingga Anda dapat menggunakan semua perintah lain yang akan Anda gunakan untuk pekerjaan. Sebagai contoh 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>
Jika Anda ingin menjalankan beberapa pernyataan di latar belakang, Anda dapat menggabungkan &
operator panggilan , { }
blok skrip dan &
operator latar belakang baru ini seperti di sini:
& { cd .\SomeDir\; .\SomeLongRunningOperation.bat; cd ..; } &
Berikut ini beberapa info dari halaman dokumentasi:
dari Apa yang Baru di PowerShell Core 6.0 :
Mendukung latar belakang pipa dengan ampersand (&) (# 3360)
Menempatkan &
di ujung pipa menyebabkan pipa dijalankan sebagai pekerjaan PowerShell. Ketika pipa dilatar belakangi, objek pekerjaan dikembalikan. Setelah pipa berjalan sebagai pekerjaan, semua *-Job
cmdlet standar dapat digunakan untuk mengelola pekerjaan. Variabel (mengabaikan variabel proses-spesifik) yang digunakan dalam pipa secara otomatis disalin ke pekerjaan sehingga Copy-Item $foo $bar &
berfungsi. Pekerjaan juga dijalankan di direktori saat ini, bukan direktori home pengguna. Untuk informasi lebih lanjut tentang pekerjaan PowerShell, lihat about_Jobs .
dari about_operators / Ampersand operator latar belakang & :
Ampersand operator latar belakang &
Jalankan pipa sebelum itu dalam pekerjaan PowerShell. Operator latar belakang ampersand bertindak serupa dengan "operator ampersand" UNIX yang terkenal menjalankan perintah sebelumnya sebagai proses latar belakang. Operator latar belakang ampersand dibuat di atas pekerjaan PowerShell sehingga berbagi banyak fungsi dengan Start-Job
. Perintah berikut berisi penggunaan dasar dari operator ampersand background.
Get-Process -Name pwsh &
Ini secara fungsional setara dengan penggunaan berikut dari Start-Job
.
Start-Job -ScriptBlock {Get-Process -Name pwsh}
Karena secara fungsional setara dengan menggunakan Start-Job
, operator latar belakang dan ampers mengembalikan Job
objek seperti Start-Job does
. Ini berarti bahwa Anda dapat menggunakan Receive-Job
dan Remove-Job
seperti yang Anda lakukan jika Anda sudah Start-Job
memulai pekerjaan.
$job = Get-Process -Name pwsh &
Receive-Job $job
Keluaran
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
Untuk informasi lebih lanjut tentang pekerjaan PowerShell, lihat about_Jobs .
Start-Job
akan terbunuh ketika shell PS keluar. Sebaliknya, sesuatu yang dimulai denganStart-Process
akan terus berjalan setelah PS shell keluar. Ini perbedaan utama .