Bagikan melalui


Bab 5 - Pemformatan, alias, penyedia, perbandingan

Prasyarat

Modul SqlServer PowerShell diperlukan oleh beberapa contoh yang ditunjukkan dalam bab ini. Untuk informasi selengkapnya tentang modul SqlServer PowerShell dan instruksi penginstalan, lihat gambaran umum SQL Server PowerShell. Ini juga digunakan dalam bab berikutnya. Unduh dan instal di komputer lingkungan lab Windows Anda.

Format Rata Kanan

Di Bab 4, Anda belajar memfilter sejauh mungkin ke kiri. Aturan untuk memformat output perintah secara manual mirip dengan aturan tersebut, kecuali harus dilakukan sebisa mungkin ke arah kanan.

Perintah format yang paling umum adalah Format-Table dan Format-List. Format-Wide dan Format-Custom juga dapat digunakan, tetapi kurang umum.

Seperti disebutkan dalam Bab 3, perintah yang mengembalikan lebih dari empat properti akan berubah ke daftar kecuali jika pemformatan kustom digunakan.

Get-Service -Name w32time |
    Select-Object -Property Status, DisplayName, Can*
Status              : Running
DisplayName         : Windows Time
CanPauseAndContinue : False
CanShutdown         : True
CanStop             : True

Gunakan cmdlet Format-Table untuk mengesampingkan pemformatan secara manual dan memperlihatkan output dalam tabel, bukan daftar.

Get-Service -Name w32time |
    Select-Object -Property Status, DisplayName, Can* |
    Format-Table
Status  DisplayName  CanPauseAndContinue CanShutdown CanStop
------  -----------  ------------------- ----------- -------
Running Windows Time               False        True    True

Output default untuk Get-Service adalah tiga properti dalam tabel.

Get-Service -Name w32time
Status   Name               DisplayName
------   ----               -----------
Running  w32time            Windows Time

Gunakan cmdlet Format-List untuk mengambil alih pemformatan default dan mengembalikan hasilnya dalam daftar.

Get-Service -Name w32time | Format-List

Perhatikan bahwa dengan menyalurkan Get-Service ke Format-List memberikan properti tambahan. Ini tidak terjadi pada setiap perintah karena format untuk perintah tertentu sudah diatur di balik layar.

Name                : w32time
DisplayName         : Windows Time
Status              : Running
DependentServices   : {}
ServicesDependedOn  : {}
CanPauseAndContinue : False
CanShutdown         : True
CanStop             : True
ServiceType         : Win32OwnProcess, Win32ShareProcess

Hal nomor satu yang harus diperhatikan dengan cmdlet format adalah mereka menghasilkan objek format yang berbeda dari objek normal di PowerShell.

Get-Service -Name w32time | Format-List | Get-Member
   TypeName: Microsoft.PowerShell.Commands.Internal.Format.FormatStartData

Name                                    MemberType Definition
----                                    ---------- ----------
Equals                                  Method     bool Equals(System.Obj...
GetHashCode                             Method     int GetHashCode()
GetType                                 Method     type GetType()
ToString                                Method     string ToString()
autosizeInfo                            Property   Microsoft.PowerShell.C...
ClassId2e4f51ef21dd47e99d3c952918aff9cd Property   string ClassId2e4f51ef...
groupingEntry                           Property   Microsoft.PowerShell.C...
pageFooterEntry                         Property   Microsoft.PowerShell.C...
pageHeaderEntry                         Property   Microsoft.PowerShell.C...
shapeInfo                               Property   Microsoft.PowerShell.C...


   TypeName: Microsoft.PowerShell.Commands.Internal.Format.GroupStartData

Name                                    MemberType Definition
----                                    ---------- ----------
Equals                                  Method     bool Equals(System.Obj...
GetHashCode                             Method     int GetHashCode()
GetType                                 Method     type GetType()
ToString                                Method     string ToString()
ClassId2e4f51ef21dd47e99d3c952918aff9cd Property   string ClassId2e4f51ef...
groupingEntry                           Property   Microsoft.PowerShell.C...
shapeInfo                               Property   Microsoft.PowerShell.C...


   TypeName: Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData

Name                                    MemberType Definition
----                                    ---------- ----------
Equals                                  Method     bool Equals(System.Obj...
GetHashCode                             Method     int GetHashCode()
GetType                                 Method     type GetType()
ToString                                Method     string ToString()
ClassId2e4f51ef21dd47e99d3c952918aff9cd Property   string ClassId2e4f51ef...
formatEntryInfo                         Property   Microsoft.PowerShell.C...
outOfBand                               Property   bool outOfBand {get;set;}
writeStream                             Property   Microsoft.PowerShell.C...


   TypeName: Microsoft.PowerShell.Commands.Internal.Format.GroupEndData

Name                                    MemberType Definition
----                                    ---------- ----------
Equals                                  Method     bool Equals(System.Obj...
GetHashCode                             Method     int GetHashCode()
GetType                                 Method     type GetType()
ToString                                Method     string ToString()
ClassId2e4f51ef21dd47e99d3c952918aff9cd Property   string ClassId2e4f51ef...
groupingEntry                           Property   Microsoft.PowerShell.C...


   TypeName: Microsoft.PowerShell.Commands.Internal.Format.FormatEndData

Name                                    MemberType Definition
----                                    ---------- ----------
Equals                                  Method     bool Equals(System.Obj...
GetHashCode                             Method     int GetHashCode()
GetType                                 Method     type GetType()
ToString                                Method     string ToString()
ClassId2e4f51ef21dd47e99d3c952918aff9cd Property   string ClassId2e4f51ef...
groupingEntry                           Property   Microsoft.PowerShell.C...

Apa artinya ini adalah perintah format tidak dapat disalurkan ke sebagian besar perintah lainnya. Mereka dapat disalurkan ke beberapa perintah Out-*, namun hanya sebatas itu. Inilah sebabnya mengapa Anda ingin melakukan pemformatan apa pun di bagian paling akhir baris (format kanan).

Nama Lain

Alias di PowerShell adalah nama yang lebih pendek untuk perintah. PowerShell menyertakan sekumpulan alias bawaan dan Anda juga dapat menentukan alias Anda sendiri.

Cmdlet Get-Alias digunakan untuk menemukan alias. Jika Anda sudah mengetahui alias untuk perintah, parameter Nama digunakan untuk menentukan perintah apa yang dikaitkan dengan alias.

Get-Alias -Name gcm
CommandType     Name                                               Version
-----------     ----                                               -------
Alias           gcm -> Get-Command

Beberapa alias dapat ditentukan untuk nilai parameter Nama.

Get-Alias -Name gcm, gm
CommandType     Name                                               Version
-----------     ----                                               -------
Alias           gcm -> Get-Command
Alias           gm -> Get-Member

Anda sering melihat parameter Nama dihilangkan karena ini adalah parameter posisi.

Get-Alias gm
CommandType     Name                                               Version
-----------     ----                                               -------
Alias           gm -> Get-Member

Jika Anda ingin menemukan alias untuk perintah, Anda perlu menggunakan parameter Definisi.

Get-Alias -Definition Get-Command, Get-Member
CommandType     Name                                               Version
-----------     ----                                               -------
Alias           gcm -> Get-Command
Alias           gm -> Get-Member

Parameter Definisi tidak dapat digunakan secara posisional, sehingga harus disebutkan secara eksplisit.

Alias dapat menghemat beberapa penekanan tombol, dan tidak masalah saat Anda mengetik perintah ke konsol. Mereka tidak boleh digunakan dalam skrip atau kode apa pun yang Anda simpan atau bagikan dengan orang lain. Seperti disebutkan sebelumnya dalam buku ini, menggunakan cmdlet lengkap dan nama parameter adalah dokumentasi mandiri dan lebih mudah dipahami.

Berhati-hatilah saat membuat alias Anda sendiri karena hanya ada di sesi PowerShell Anda saat ini di komputer Anda.

Penyedia

Penyedia di PowerShell adalah antarmuka yang memungkinkan akses seperti sistem file ke penyimpanan data. Ada beberapa penyedia bawaan di PowerShell.

Get-PSProvider

Seperti yang Anda lihat dalam hasil berikut, ada penyedia bawaan untuk registri, alias, variabel lingkungan, sistem file, fungsi, variabel, sertifikat, dan WSMan.

Name                 Capabilities                 Drives
----                 ------------                 ------
Registry             ShouldProcess, Transactions  {HKLM, HKCU}
Alias                ShouldProcess                {Alias}
Environment          ShouldProcess                {Env}
FileSystem           Filter, ShouldProcess, Cr... {C, D}
Function             ShouldProcess                {Function}
Variable             ShouldProcess                {Variable}

Drive aktual yang digunakan penyedia ini untuk mengekspos penyimpanan data mereka dapat ditentukan dengan cmdlet Get-PSDrive. cmdlet Get-PSDrive tidak hanya menampilkan drive yang diekspos oleh penyedia tetapi juga menampilkan drive logis Windows, termasuk drive yang dipetakan ke berbagi jaringan.

Get-PSDrive
Name           Used (GB)     Free (GB) Provider      Root
----           ---------     --------- --------      ----
Alias                                  Alias
C                  18.56        107.62 FileSystem    C:\
Cert                                   Certificate   \
D                                      FileSystem    D:\
Env                                    Environment
Function                               Function
HKCU                                   Registry      HKEY_CURRENT_USER
HKLM                                   Registry      HKEY_LOCAL_MACHINE
Variable                               Variable
WSMan                                  WSMan

Modul pihak ketiga seperti modul PowerShell ActiveDirectory dan modul PowerShell SqlServer masing-masing menambahkan penyedia PowerShell dan PSDrive mereka sendiri.

Impor modul PowerShell ActiveDirectory dan SqlServer.

Import-Module -Name ActiveDirectory, SQLServer

Periksa untuk melihat apakah ada penyedia PowerShell tambahan yang ditambahkan.

Get-PSProvider

Perhatikan bahwa dalam serangkaian hasil berikut, dua penyedia PowerShell baru sekarang ada, satu untuk Direktori Aktif dan satu lagi untuk SQL Server.

Name                 Capabilities                       Drives
----                 ------------                       ------
Registry             ShouldProcess, Transactions        {HKLM, HKCU}
Alias                ShouldProcess                      {Alias}
Environment          ShouldProcess                      {Env}
FileSystem           Filter, ShouldProcess, Credentials {C, A, D}
Function             ShouldProcess                      {Function}
Variable             ShouldProcess                      {Variable}
ActiveDirectory      Include, Exclude, Filter, Shoul... {AD}
SqlServer            Credentials                        {SQLSERVER}

PSDrive untuk setiap modul tersebut juga ditambahkan.

Get-PSDrive
Name           Used (GB)     Free (GB) Provider      Root
----           ---------     --------- --------      ----
A                                      FileSystem    A:\
AD                                     ActiveDire... //RootDSE/
Alias                                  Alias
C                  19.38        107.13 FileSystem    C:\
Cert                                   Certificate   \
D                                      FileSystem    D:\
Env                                    Environment
Function                               Function
HKCU                                   Registry      HKEY_CURRENT_USER
HKLM                                   Registry      HKEY_LOCAL_MACHINE
SQLSERVER                              SqlServer     SQLSERVER:\
Variable                               Variable
WSMan                                  WSMan

PSDrives dapat diakses seperti sistem file tradisional.

Get-ChildItem -Path Cert:\LocalMachine\CA
   PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\CA

Thumbprint                                Subject
----------                                -------
FEE449EE0E3965A5246F000E87FDE2A065FD89D4  CN=Root Agency
D559A586669B08F46A30A133F8A9ED3D038E2EA8  OU=www.verisign.com/CPS Incorp....
109F1CAED645BB78B3EA2B94C0697C740733031C  CN=Microsoft Windows Hardware C...

Operator Perbandingan

PowerShell berisi berbagai operator perbandingan yang digunakan untuk membandingkan nilai atau menemukan nilai yang cocok dengan pola tertentu. Tabel berikut ini berisi daftar operator perbandingan di PowerShell.

Semua operator yang tercantum dalam tabel tidak peka terhadap besar kecilnya huruf. Untuk membuatnya sensitif terhadap huruf besar dan kecil, tempatkan c di depan operator. Misalnya, -ceq adalah versi pembeda huruf besar/kecil dari operator perbandingan sama dengan (-eq).

Pengelola Definisi
-eq Sama dengan
-ne Tidak sama dengan
-gt Lebih besar dari
-ge Lebih besar dari atau sama dengan
-lt Kurang dari
-le Kurang dari atau sama dengan
-like Sesuaikan menggunakan karakter wildcard *
-notlike Tidak sesuai menggunakan karakter kartu-bebas *.
-match Cocok dengan ekspresi reguler yang ditentukan
-notmatch Tidak cocok dengan ekspresi reguler yang ditentukan
-contains Menentukan apakah koleksi berisi nilai yang ditentukan
-notcontains Menentukan apakah koleksi tidak berisi nilai tertentu
-in Menentukan apakah nilai yang ditentukan ada dalam koleksi
-notin Menentukan apakah nilai yang ditentukan tidak ada dalam koleksi
-replace Menggantikan nilai yang ditentukan

Huruf yang tepat "PowerShell" sama dengan huruf kecil "powershell" menggunakan operator perbandingan yang sama.

'PowerShell' -eq 'powershell'
True

Tidak sama jika menggunakan versi peka huruf besar/kecil dari operator perbandingan 'equals'.

'PowerShell' -ceq 'powershell'
False

Operator perbandingan yang tidak sama membalikkan kondisi.

'PowerShell' -ne 'powershell'
False

Lebih besar dari, lebih besar dari atau sama dengan, kurang dari, dan kurang dari atau sama dengan semuanya bekerja dengan nilai string atau numerik.

5 -gt 5
False

Menggunakan lebih besar dari atau sama dengan alih-alih lebih besar dari pada contoh sebelumnya mengembalikan Boolean benar karena lima sama dengan lima.

5 -ge 5
True

Berdasarkan hasil dari dua contoh sebelumnya, Anda mungkin dapat menebak cara kerja dari "kurang dari" dan "kurang dari atau sama dengan".

5 -lt 10
True

Operator -like dan -match dapat membingungkan, bahkan untuk pengguna PowerShell yang berpengalaman. -like digunakan dengan karakter wildcard * dan ? untuk melakukan pencocokan pola "like".

'PowerShell' -like '*shell'
True

Operator -match menggunakan ekspresi reguler untuk melakukan pencocokan.

'PowerShell' -match '^.*shell$'
True

Gunakan operator rentang untuk menyimpan angka 1 hingga 10 dalam variabel.

$Numbers = 1..10

Tentukan apakah variabel $Numbers menyertakan 15.

$Numbers -contains 15
False

Tentukan apakah menyertakan angka 10.

$Numbers -contains 10
True

Operator -notcontains membalikkan logika untuk melihat apakah variabel $Numbers tidak berisi nilai.

$Numbers -notcontains 15

Contoh sebelumnya mengembalikan Boolean true karena benar bahwa variabel $Numbers tidak berisi 15.

True

Namun, ini berisi angka 10, sehingga salah saat diuji.

$Numbers -notcontains 10
False

Operator perbandingan -in pertama kali diperkenalkan di PowerShell versi 3.0. Ini digunakan untuk menentukan apakah nilai ada di dalam array. Variabel $Numbers adalah array karena berisi beberapa nilai.

15 -in $Numbers
False

Dengan kata lain, -in melakukan pengujian yang sama dengan operator berisi perbandingan tetapi dari arah sebaliknya.

10 -in $Numbers
True

Lima belas tidak berada dalam array $Numbers, jadi false dikembalikan dalam contoh berikut.

15 -in $Numbers
False

Sama seperti operator -contains, not membalikkan logika untuk operator -in.

10 -notin $Numbers

Contoh sebelumnya mengembalikan nilai false karena array $Numbers menyertakan 10 dan kondisi menguji apakah tidak berisi 10.

False

Tentukan apakah lima belas tidak ada dalam array $Numbers.

15 -notin $Numbers

15 "tidak terdapat" dalam array $Numbers sehingga mengembalikan Boolean true.

True

Operator -replace hanya ingin Anda berpikir. Ini digunakan untuk menggantikan sesuatu. Menentukan satu nilai menggantikan nilai tersebut dengan kosong. Dalam contoh berikut, Anda mengganti "Shell" dengan kosong.

'PowerShell' -replace 'Shell'
Power

Jika Anda ingin mengganti nilai dengan nilai yang berbeda, tentukan nilai baru setelah pola yang ingin Anda ganti. SQL Saturday di Baton Rouge adalah acara yang saya coba bicarakan setiap tahun. Dalam contoh berikut, kata "Sabtu" diganti dengan singkatan "Sat".

'SQL Saturday - Baton Rouge' -replace 'saturday','Sat'
SQL Sat - Baton Rouge

Ada juga metode seperti Replace() yang dapat digunakan untuk mengganti hal-hal yang mirip dengan cara kerja operator pengganti. Namun, operator -replace tidak memperhatikan perbedaan huruf besar/kecil secara default, sedangkan metode Replace() memperhatikan perbedaan huruf besar/kecil.

'SQL Saturday - Baton Rouge'.Replace('saturday','Sat')

Perhatikan bahwa kata "Sabtu" tidak diganti. Ini karena dinyatakan dalam kasus yang berbeda dari yang asli.

SQL Saturday - Baton Rouge

Ketika kata "Sabtu" ditentukan dalam kasus yang sama dengan aslinya, metode Replace() melakukan penggantian seperti yang diharapkan.

'SQL Saturday - Baton Rouge'.Replace('Saturday','Sat')
SQL Sat - Baton Rouge

Berhati-hatilah saat menggunakan metode untuk mengubah data karena Anda dapat mengalami masalah yang tidak terduga, seperti gagal Turkey Test. Misalnya, lihat artikel blog saya, Menggunakan Pester untuk Menguji Kode PowerShell dengan Budaya Lain. Saya sarankan menggunakan operator alih-alih metode jika memungkinkan untuk menghindari jenis masalah ini.

Meskipun operator perbandingan dapat digunakan, seperti yang ditunjukkan pada contoh sebelumnya, saya biasanya menggunakannya dengan cmdlet Where-Object untuk melakukan pemfilteran.

Ringkasan

Anda mempelajari beberapa topik dalam bab ini, termasuk Memformat dengan Benar, Alias, Penyedia, dan Operator Perbandingan.

Tinjauan

  1. Mengapa perlu melakukan pemformatan sejauh mungkin ke kanan?
  2. Bagaimana Anda menentukan cmdlet yang sebenarnya untuk alias %?
  3. Mengapa Anda tidak boleh menggunakan alias dalam skrip yang Anda simpan atau kode yang Anda bagikan dengan orang lain?
  4. Lakukan daftar direktori pada drive yang terkait dengan penyedia Registri.
  5. Apa salah satu manfaat utama menggunakan operator pengganti alih-alih metode ganti?

Referensi

Langkah berikutnya

Di bab berikutnya, Anda akan mempelajari tentang kontrol alur, pembuatan skrip, perulangan, dan logika kondisional.