Bagikan melalui


Menjalankan perintah di shell

PowerShell adalah shell baris perintah dan bahasa skrip yang digunakan untuk otomatisasi. Mirip dengan shell lain, seperti bash di Linux atau Windows Command Shell (cmd.exe), PowerShell memungkinkan Anda menjalankan perintah apa pun yang tersedia di sistem Anda, bukan hanya perintah PowerShell.

Jenis perintah

Untuk shell apa pun dalam sistem operasi apa pun, ada tiga jenis perintah:

  • Kata kunci bahasa shell adalah bagian dari bahasa pemrograman shell.

    • Contoh kata kunci bash meliputi: if, then, else, elif, dan fi.
    • Contoh kata kunci cmd.exe meliputi: dir, copy, move, if, dan echo.
    • Contoh kata kunci PowerShell meliputi: for, foreach, try, catch, dan trap.

    Kata kunci bahasa shell hanya dapat digunakan dalam lingkungan runtime shell. Tidak ada file yang dapat dieksekusi, di luar shell, yang menyediakan fungsionalitas kata kunci.

  • perintah OS-native adalah file yang dapat dieksekusi yang diinstal dalam sistem operasi. Program eksekusi dapat dijalankan dari terminal baris perintah apa pun, seperti PowerShell. Ini termasuk file skrip yang mungkin mengharuskan shell lain berfungsi dengan baik. Misalnya, jika Anda menjalankan skrip batch Windows (file.cmd) di PowerShell, PowerShell menjalankan cmd.exe dan meneruskan file batch untuk eksekusi.

  • perintah khusus lingkungan Shell adalah perintah yang ditentukan dalam file eksternal yang hanya dapat digunakan dalam lingkungan runtime shell. Ini termasuk skrip dan fungsi, atau dapat menjadi modul yang dikompilasi secara khusus yang menambahkan perintah ke runtime shell. Di PowerShell, perintah ini dikenal sebagai cmdlet (diucapkan "command-lets").

Menjalankan perintah asli

Perintah asli apa pun dapat dijalankan dari baris perintah PowerShell. Biasanya Anda menjalankan perintah persis seperti yang Anda lakukan di bash atau cmd.exe. Contoh berikut menunjukkan menjalankan perintah grep di bash di Ubuntu Linux.

sdwheeler@circumflex:~$ grep sdwheeler /etc/passwd
sdwheeler:x:1000:1000:,,,:/home/sdwheeler:/bin/bash
sdwheeler@circumflex:~$ pwsh
PowerShell 7.2.6
Copyright (c) Microsoft Corporation.

https://aka.ms/powershell
Type 'help' to get help.

Setelah memulai PowerShell di Ubuntu, Anda dapat menjalankan perintah yang sama dari baris perintah PowerShell:

PS /home/sdwheeler> grep sdwheeler /etc/passwd
sdwheeler:x:1000:1000:,,,:/home/sdwheeler:/bin/bash

Meneruskan argumen ke perintah bawaan

Sebagian besar shell mencakup fitur untuk menggunakan variabel, mengevaluasi ekspresi, dan menangani string. Namun, setiap shell melakukan ini secara berbeda. Di PowerShell, semua parameter dimulai dengan karakter tanda hubung (-). Dalam cmd.exe, sebagian besar parameter menggunakan karakter garis miring (/). Alat baris perintah lainnya mungkin tidak memiliki karakter khusus untuk parameter.

Setiap shell memiliki caranya sendiri untuk menangani dan mengevaluasi string pada baris perintah. Saat menjalankan perintah asli di PowerShell yang mengharapkan string dikutip dengan cara tertentu, Anda mungkin perlu menyesuaikan cara Anda meneruskan string tersebut.

Untuk informasi selengkapnya, lihat artikel berikut ini:

PowerShell 7.2 memperkenalkan fitur eksperimental baru PSNativeCommandArgumentPassing yang meningkatkan penanganan perintah asli. Untuk informasi selengkapnya, lihat $PSNativeCommandArgumentPassing.

Menangani output dan kesalahan

PowerShell juga memiliki beberapa aliran output lebih banyak daripada shell lainnya. Cangkang bash dan cmd.exe memiliki stdout dan stderr . PowerShell memiliki enam aliran output. Untuk informasi selengkapnya, lihat about_Redirection dan about_Output_Streams.

Secara umum, output yang dikirim ke stdout oleh perintah asli dikirim ke aliran Success di PowerShell. Output yang dikirim ke stderr oleh perintah bawaan dikirim ke aliran Kesalahan di PowerShell.

Ketika perintah asli memiliki kode keluar bukan nol, $? diatur ke $false. Jika kode keluar nol, $? diatur ke $true.

Namun, ini berubah di PowerShell 7.2. Rekaman kesalahan yang dialihkan dari perintah asli, seperti saat menggunakan operator pengalihan (2>&1), tidak ditulis ke variabel $Error PowerShell dan variabel preferensi $ErrorActionPreference tidak memengaruhi output yang dialihkan.

Banyak perintah bawaan menulis ke stderr sebagai aliran alternatif untuk informasi tambahan. Perilaku ini dapat menyebabkan kebingungan di PowerShell saat memeriksa kesalahan, dan informasi keluaran tambahan dapat hilang jika $ErrorActionPreference diatur ke status yang menonaktifkan output.

PowerShell 7.3 menambahkan fitur eksperimental baru PSNativeCommandErrorActionPreference yang memungkinkan Anda mengontrol apakah output ke stderr diperlakukan sebagai kesalahan. Untuk informasi selengkapnya, lihat $PSNativeCommandUseErrorActionPreference.

Menjalankan perintah PowerShell

Seperti yang disebutkan sebelumnya, perintah PowerShell dikenal sebagai cmdlet. Cmdlet dikumpulkan ke dalam modul PowerShell yang dapat dimuat sesuai permintaan. Cmdlet dapat ditulis dalam bahasa .NET yang dikompilasi atau menggunakan bahasa skrip PowerShell itu sendiri.

Perintah PowerShell yang menjalankan perintah lain

Operator panggilan PowerShell (&) memungkinkan Anda menjalankan perintah yang disimpan dalam variabel dan diwakili oleh string atau blok skrip. Anda dapat menggunakan ini untuk menjalankan perintah asli atau perintah PowerShell. Ini berguna dalam skrip ketika Anda perlu membangun parameter baris perintah secara dinamis untuk perintah asli. Untuk informasi selengkapnya, lihat operator panggilan .

Cmdlet Start-Process dapat digunakan untuk menjalankan perintah asli, tetapi hanya boleh digunakan ketika Anda perlu mengontrol bagaimana perintah dijalankan. Cmdlet memiliki parameter untuk mendukung skenario berikut:

  • Jalankan perintah menggunakan kredensial yang berbeda
  • Sembunyikan jendela konsol yang dibuat oleh proses baru
  • Alihkan stdin, stdout, dan stderr
  • Menggunakan direktori kerja yang berbeda untuk perintah

Contoh berikut menjalankan perintah asli sort.exe dengan aliran input dan output yang dialihkan.

$processOptions = @{
    FilePath = "sort.exe"
    RedirectStandardInput = "TestSort.txt"
    RedirectStandardOutput = "Sorted.txt"
    RedirectStandardError = "SortError.txt"
    UseNewEnvironment = $true
}
Start-Process @processOptions

Untuk informasi selengkapnya, lihat Mulai Proses.

Di Windows, cmdlet Invoke-Item melakukan tindakan default untuk item yang ditentukan. Misalnya, menjalankan file yang dapat dieksekusi atau membuka file dokumen menggunakan aplikasi yang terkait dengan jenis file dokumen. Tindakan default bergantung pada jenis item dan diselesaikan oleh penyedia PowerShell yang menyediakan akses ke item.

Contoh berikut membuka repositori kode sumber PowerShell di browser web default Anda.

Invoke-Item https://github.com/PowerShell/PowerShell

Untuk informasi selengkapnya, lihat Invoke-Item.