Advertisement
  1. Code
  2. Scripts

Kekuatan PowerShell, Bagian 2

Scroll to top
Read Time: 8 min
This post is part of a series called The Power of PowerShell.
The Power of PowerShell, Part 1

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.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.