Indonesian (Bahasa Indonesia) translation by Ari Ana (you can also view the original English article)
Pada bagian pertama, saya menunjukkan kepada Anda beberapa hal keren yang dapat Anda lakukan dengan PowerShell, meliputi sejarah PowerShell, dan menjelajahi secara mendalam kemampuan PowerShell sebagai bahasa scripting yang kuat yang mendukung pemrograman prosedural, fungsional, dan berorientasi objek.
Pada bagian kedua, saya akan membahas shell interaktif, profil, dan prompt, dan saya akan membandingkan PowerShell terhadap Bash.
PowerShell: Shell Interaktif
PowerShell dirancang dari mendapatkan-pergi sebagai shell interaktif untuk admin Windows sys dan power user. Ini berfokus pada sejumlah kecil konsep, pengalaman yang sangat konsisten, dan pipeline objek untuk rantai dan menggabungkan perintah, menyaringnya, dan memformatnya. Sistem bantuannya yang kuat, yang juga menganut format yang konsisten, adalah kesenangan untuk digunakan.
Mari kita lihat sebagian dari itu dalam aksinya.
Mendapatkan Bantuan
Sistem bantuan yang komprehensif dapat diakses melalui Get-Help
.
1 |
PS C:\WINDOWS\system32> Help Invoke-WebRequest |
2 |
|
3 |
NAME |
4 |
Invoke-WebRequest |
5 |
|
6 |
SYNOPSIS |
7 |
Gets content from a web page on the Internet. |
8 |
|
9 |
|
10 |
SYNTAX |
11 |
Invoke-WebRequest [-Uri] <Uri> [-Body <Object>] [-Certificate <X509Certificate>] [-CertificateThumbprint <String>] [-ContentType <String>] [-Credential <PSCredential>] [-DisableKeepAlive] [-Headers |
12 |
<IDictionary>] [-InFile <String>] [-MaximumRedirection <Int32>] [-Method {Default | Get | Head | Post | Put | Delete | Trace | Options | Merge | Patch}] [-OutFile <String>] [-PassThru] [-Proxy <Uri>] |
13 |
[-ProxyCredential <PSCredential>] [-ProxyUseDefaultCredentials] [-SessionVariable <String>] [-TimeoutSec <Int32>] [-TransferEncoding {chunked | compress | deflate | gzip | identity}] |
14 |
[-UseBasicParsing] [-UseDefaultCredentials] [-UserAgent <String>] [-WebSession <WebRequestSession>] [<CommonParameters>] |
15 |
|
16 |
|
17 |
DESCRIPTION |
18 |
The Invoke-WebRequest cmdlet sends HTTP, HTTPS, FTP, and FILE requests to a web page or web service. It parses the response and returns collections of forms, links, images, and other significant HTML |
19 |
elements. |
20 |
|
21 |
This cmdlet was introduced in Windows PowerShell 3.0. |
22 |
|
23 |
|
24 |
RELATED LINKS |
25 |
Online Version: https://go.microsoft.com/fwlink/?LinkId=821826 |
26 |
Invoke-RestMethod |
27 |
ConvertFrom-Json |
28 |
ConvertTo-Json |
29 |
|
30 |
REMARKS |
31 |
To see the examples, type: "get-help Invoke-WebRequest -examples". |
32 |
For more information, type: "get-help Invoke-WebRequest -detailed". |
33 |
For technical information, type: "get-help Invoke-WebRequest -full". |
34 |
For online help, type: "get-help Invoke-WebRequest -online" |
Untuk mendapatkan bantuan yang lebih mendetail dan melihat contoh, gunakan switch yang tepat: -examples
, -details
, atau -full
.
Jika Anda tidak yakin apa nama perintahnya, cukup gunakan kata kunci dan PowerShell akan menunjukkan kepada Anda semua perintah yang tersedia yang mengandung kata kunci ini. Mari kita lihat cmdlet apa yang terkait dengan CSV yang tersedia:
1 |
PS C:\Users\the_g> Get-Help -Category Cmdlet csv | select name |
2 |
|
3 |
Name |
4 |
---- |
5 |
ConvertFrom-Csv |
6 |
ConvertTo-Csv |
7 |
Export-Csv |
8 |
Import-Csv |
Saya membuat pipeline kecil di mana saya membatasi panggilan Get-Help hanya ke kategori Cmdlet dan kemudian menyalurkannya ke "select" (alias untuk Select-Object) agar hanya mendapatkan properti "name".
Bekerja dengan File dan Direktori
Anda dapat melakukan hampir semua yang Anda gunakan: menavigasi ke berbagai direktori, mencantumkan file dan sub-direktori, memeriksa isi file, membuat direktori dan file, dll.
1 |
PS C:\Users\the_g> mkdir test_dir | select name |
2 |
|
3 |
Name |
4 |
---- |
5 |
test_dir |
6 |
|
7 |
PS C:\Users\the_g> cd .\test_dir |
8 |
|
9 |
PS C:\Users\the_g\test_dir> "123" > test.txt |
10 |
|
11 |
PS C:\Users\the_g\test_dir> ls | name Name ---- test.txt |
12 |
|
13 |
PS C:\Users\the_g\test_dir> get-content .\test.txt |
14 |
123
|
Bekerja dengan Penyedia Lain
Dengan PowerShell, Anda dapat memperlakukan banyak hal sebagai sistem file dan menavigasi mereka menggunakan cd
dan memeriksa isinya menggunakan ls/dir
. Berikut beberapa penyedia tambahan:
1 |
Provider Drive Data store |
2 |
-------- ----- ---------- |
3 |
Alias Alias: Windows PowerShell aliases |
4 |
|
5 |
Certificate Cert: x509 certificates for digital signatures |
6 |
|
7 |
Environment Env: Windows environment variables |
8 |
|
9 |
Function Function: Windows PowerShell functions |
10 |
|
11 |
Registry HKLM:, HKCU: Windows registry |
12 |
|
13 |
Variable Variable: Windows PowerShell variables |
14 |
|
15 |
WSMan WSMan: WS-Management configuration information |
Mari kita periksa lingkungan dan lihat variabel lingkungan yang berhubungan dengan Go di luar sana (di mesin saya):
1 |
PS C:\Users\the_g> ls env:GO* |
2 |
|
3 |
Name Value |
4 |
---- ----- |
5 |
GOROOT C:\GO\ |
6 |
GOPATH C:\Users\the_g\Documents\Go |
Pemformatan
PowerShell mendorong penyusunan cmdlet dengan switch standar dan membuat pipeline. Pemformatan adalah konsep eksplisit di mana di akhir pipeline Anda memasang formatter. PowerShell secara default memeriksa jenis objek atau objek di ujung pipa dan menerapkan formatter default. Tetapi Anda dapat menimpanya dengan menentukan formatter Anda sendiri. Formatter hanyalah cmdlet. Berikut ini keluaran sebelumnya ditampilkan dalam format daftar:
1 |
PS C:\Users\the_g> ls env:GO* | Format-List |
2 |
|
3 |
Name : GOROOT |
4 |
Value : C:\Go\ |
5 |
|
6 |
Name : GOPATH |
7 |
Value : c:\Users\the_g\Documents\Go |
Profil
Power user yang menggunakan baris perintah sering memiliki banyak tugas, pipeline, dan kombinasi perintah favorit dengan switch default yang mereka sukai. Profil PowerShell adalah file skrip PowerShell yang dimuat dan dijalankan setiap kali Anda memulai sesi baru. Anda dapat meletakkan semua barang favorit Anda di sana, membuat alias dan fungsi, mengatur variabel lingkungan, dan banyak hal lainnya.
Saya suka membuat alias navigasi ke direktori yang sangat berlapis, mengaktifkan lingkungan virtual Python, dan membuat pintasan ke perintah eksternal yang sering saya jalankan, seperti git dan docker.
Bagi saya, profil sangat diperlukan karena perintah dan switche PowerShell yang sangat mudah dibaca dan konsisten sering kali terlalu panjang, dan alias bawaan seringkali menjadi masalah daripada sebuah bantuan (saya diskusikan nanti). Ini adalah cuplikan sebagian dari profil saya:
1 |
#---------------------------
|
2 |
#
|
3 |
# D O C K E R
|
4 |
#
|
5 |
#---------------------------
|
6 |
Set-Alias -Name d -Value docker |
7 |
|
8 |
function di { d images } |
9 |
#---------------------------
|
10 |
#
|
11 |
# G I T
|
12 |
#
|
13 |
#---------------------------
|
14 |
Set-Alias -Name g -Value git |
15 |
function gs { g status } |
16 |
function gpu { g pull --rebase } |
17 |
|
18 |
#-------------------------
|
19 |
#
|
20 |
# C O N D A
|
21 |
#
|
22 |
#-------------------------
|
23 |
function a { activate.ps1 $args[0] } |
24 |
|
25 |
#------------------------
|
26 |
#
|
27 |
# N A V I G A T I O N
|
28 |
#
|
29 |
#------------------------
|
30 |
|
31 |
function cdg { cd $github_dir } |
32 |
# MVP
|
33 |
function cdm { a ov; cdg; cd MVP } |
34 |
|
35 |
# backend
|
36 |
function cdb { a ov; cdg; cd backend } |
37 |
|
38 |
# scratch
|
39 |
function cds { a ov; cdg; cd scratch } |
40 |
|
41 |
# backend packages
|
42 |
function cdbp { cdb; cd packages } |
43 |
|
44 |
# Go workspace
|
45 |
function cdgo { cd $go_src_dir } |
Prompt
PowerShell memungkinkan Anda menyesuaikan command prompt Anda. Anda perlu menentukan fungsi yang disebut prompt()
. Anda dapat melihat fungsi promt bawaan:
1 |
PS C:\Users\the_g> gc function:prompt |
2 |
|
3 |
"PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) "; |
4 |
# .Link
|
5 |
# http://go.microsoft.com/fwlink/?LinkID=225750
|
6 |
# .ExternalHelp System.Management.Automation.dll-help.xml
|
7 |
|
8 |
|
9 |
PS C:\Users\the_g> |
Berikut ini adalah fungsi prompt kustom yang menampilkan waktu saat ini di samping direktori saat ini:
PS C:\Users\the_g> function prompt {"$(get-date) $(get-location) > "}
1 |
10/09/2016 12:42:36 C:\Users\the_g > |
Anda bisa menjadi liar, tentu saja, dan menambahkan warna dan memeriksa berbagai kondisi seperti jika Anda berada di repositori git tertentu atau jika Anda admin.
Alias: Sisi Gelap
PowerShell mempunyai alias salah, menurut saya, pada dua bidang yang terpisah. Pertama, perintah alias
hanya memungkinkan penggantian nama perintah. Anda tidak dapat menambahkan penanda atau opsi umum untuk membuat perintah lebih bermanfaat dengan menjadikannya sebagai milik sendiri.
Misalnya, jika Anda ingin mencari dalam teks baris demi baris, Anda dapat menggunakan cmdlet Select-String
:
1 |
# Create a little text file with 3 lines
|
2 |
"@
|
3 |
ab
|
4 |
cd
|
5 |
ef
|
6 |
@" > 1.txt |
7 |
|
8 |
# Search for a line containing d
|
9 |
Get-Content 1.txt | Select-String d |
10 |
|
11 |
cd
|
Itu berfungsi, tetapi banyak orang ingin mengganti nama Select-String
menjadi grep
. Tapi grep
secara default case-sensitive, sementara Select-String
tidak. Bukan masalah besar—kita hanya akan menambahkan penanda -CaseSensitive
, seperti pada:
Set-Alias -Name grep -Value "Select-String -CaseSensitive"
Sayangnya, itu tidak berhasil:
1 |
16:19:26 C:\Users\the_g> Get-Content 1.txt | grep D |
2 |
grep : The term 'Select-String -CaseSensitive' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or |
3 |
if a path was included, verify that the path is correct and try again. |
4 |
At line:1 char:21 |
5 |
+ Get-Content 1.txt | grep D |
6 |
+ ~~~~ |
7 |
+ CategoryInfo : ObjectNotFound: (Select-String -CaseSensitive:String) [], CommandNotFoundException |
8 |
+ FullyQualifiedErrorId : CommandNotFoundException |
Nilai alias harus berupa cmdlet, fungsi, skrip, atau program. Tidak ada penanda atau argumen yang diizinkan.
Sekarang, Anda dapat melakukannya dengan mudah di PowerShell, tetapi Anda harus menggunakan fungsi dan bukan alias. Itu cukup membatasi alias untuk penggantian nama sederhana, yang juga dapat dilakukan oleh fungsi.
PowerShell vs. Bash
Di sisi shell interaktif, PowerShell dan Bash cukup sama. Bash lebih ringkas secara default, tetapi pipeline objek PowerShell membuat jalur pipa rumit lebih mudah dikelola. ,
Yang mengatakan, Anda mungkin dapat mencapai apa pun dengan salah satu dan jika Anda adalah power user maka Anda akan memiliki alias Anda sendiri, fungsi, dan jalan pintas untuk tugas-tugas umum. Di sisi scripting, PowerShell jauh melampaui Bash, dan untuk tujuan administrasi sistem bahkan mengalahkan Python, Ruby, dan teman-teman.
Aspek penting adalah ketersediaan. Bash sudah diinstal sebelumnya dengan kebanyakan distribusi *nix (kecuali jika secara khusus dilucuti) termasuk macOS. Ini juga dapat diinstal pada Windows melalui cygwin, git-bash, atau msys. PowerShell sudah terinstal di Windows dan baru-baru ini tersedia di Mac dan Linux.
Kesimpulan
Jika Anda menggunakan Windows sebagai mesin pengembangan atau jika Anda mengelola mesin Windows maka PowerShell adalah alat yang sangat diperlukan. Ini benar-benar superset dari shell Unix yang dipikirkan dengan baik, dan sudah terpasang sebelumnya.
PowerShell adalah rekayasa perangkat lunak yang luar biasa di tempat kerja. Ini berkembang lebih dari satu dekade, dan terus berinovasi sambil mempertahankan integritas konseptual aslinya. Switch baru-baru ini ke sumber terbuka dan sinyal lintas platform bahwa masih banyak yang harus ditunggu.