Bab 5 - Pemformatan, alias, penyedia, perbandingan

Persyaratan

Modul PowerShell SQL Server diperlukan oleh beberapa contoh yang ditunjukkan dalam bab ini. Modul diinstal sebagai bagian dari SQL Server Management Studio (SSMS). Ini juga digunakan dalam bab berikutnya. Unduh dan instal di komputer lingkungan lab Windows 10 Anda.

Format Kanan

Di Bab 4, Anda belajar memfilter sejauh mungkin ke kiri. Aturan untuk memformat output perintah secara manual mirip dengan aturan tersebut kecuali perlu terjadi sejauh mungkin ke 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 default ke daftar kecuali pemformatan kustom digunakan.

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

Format-Table Gunakan cmdlet untuk mengambil alih pemformatan secara manual dan memperlihatkan output dalam tabel alih-alih 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

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

Get-Service -Name w32time | Format-List
Name                : w32time
DisplayName         : Windows Time
Status              : Running
DependentServices   : {}
ServicesDependedOn  : {}
CanPauseAndContinue : False
CanShutdown         : True
CanStop             : True
ServiceType         : Win32ShareProcess

Perhatikan bahwa hanya pipa Get-Service untuk Format-List membuatnya mengembalikan properti tambahan. Ini tidak terjadi pada setiap perintah karena cara pemformatan untuk perintah tertentu disiapkan di belakang layar.

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.Object obj)
GetHashCode                             Method     int GetHashCode()
GetType                                 Method     type GetType()
ToString                                Method     string ToString()
autosizeInfo                            Property   Microsoft.PowerShell.Commands.Inter...
ClassId2e4f51ef21dd47e99d3c952918aff9cd Property   string ClassId2e4f51ef21dd47e99d3c9...
groupingEntry                           Property   Microsoft.PowerShell.Commands.Inter...
pageFooterEntry                         Property   Microsoft.PowerShell.Commands.Inter...
pageHeaderEntry                         Property   Microsoft.PowerShell.Commands.Inter...
shapeInfo                               Property   Microsoft.PowerShell.Commands.Inter...

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

Name                                    MemberType Definition
----                                    ---------- ----------
Equals                                  Method     bool Equals(System.Object obj)
GetHashCode                             Method     int GetHashCode()
GetType                                 Method     type GetType()
ToString                                Method     string ToString()
ClassId2e4f51ef21dd47e99d3c952918aff9cd Property   string ClassId2e4f51ef21dd47e99d3c9...
groupingEntry                           Property   Microsoft.PowerShell.Commands.Inter...
shapeInfo                               Property   Microsoft.PowerShell.Commands.Inter...

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

Name                                    MemberType Definition
----                                    ---------- ----------
Equals                                  Method     bool Equals(System.Object obj)
GetHashCode                             Method     int GetHashCode()
GetType                                 Method     type GetType()
ToString                                Method     string ToString()
ClassId2e4f51ef21dd47e99d3c952918aff9cd Property   string ClassId2e4f51ef21dd47e99d3c9...
formatEntryInfo                         Property   Microsoft.PowerShell.Commands.Inter...
outOfBand                               Property   bool outOfBand {get;set;}
writeStream                             Property   Microsoft.PowerShell.Commands.Inter...

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

Name                                    MemberType Definition
----                                    ---------- ----------
Equals                                  Method     bool Equals(System.Object obj)
GetHashCode                             Method     int GetHashCode()
GetType                                 Method     type GetType()
ToString                                Method     string ToString()
ClassId2e4f51ef21dd47e99d3c952918aff9cd Property   string ClassId2e4f51ef21dd47e99d3c9...
groupingEntry                           Property   Microsoft.PowerShell.Commands.Inter...

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

Name                                    MemberType Definition
----                                    ---------- ----------
Equals                                  Method     bool Equals(System.Object obj)
GetHashCode                             Method     int GetHashCode()
GetType                                 Method     type GetType()
ToString                                Method     string ToString()
ClassId2e4f51ef21dd47e99d3c952918aff9cd Property   string ClassId2e4f51ef21dd47e99d3c9...
groupingEntry                           Property   Microsoft.PowerShell.Commands.Inter...

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

Alias

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

Get-Alias Cmdlet 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    Source
-----------     ----                                               -------    ------
Alias           gcm -> Get-Command

Beberapa alias dapat ditentukan untuk nilai parameter Nama .

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

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

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

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

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

Parameter Definisi tidak dapat digunakan secara posisional sehingga harus ditentukan.

Alias dapat menyimpan 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 akan ada di sesi PowerShell Anda saat ini di komputer Anda.

Penyedia

Penyedia di PowerShell adalah antarmuka yang memungkinkan sistem file seperti akses ke datastore. Ada sejumlah penyedia bawaan di PowerShell.

Get-PSProvider
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}
Certificate          ShouldProcess                      {Cert}
WSMan                Credentials                        {WSMan}

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

Drive aktual yang digunakan penyedia ini untuk mengekspos datastore mereka dapat ditentukan dengan Get-PSDrive cmdlet. Get-PSDrive Cmdlet 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
----           ---------     --------- --------      ----
A                                      FileSystem    A:\
Alias                                  Alias
C                  14.41        112.10 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 Direktori Aktif dan modul PowerShell SQLServer baik menambahkan penyedia PowerShell dan PSDrive mereka sendiri.

Impor modul Active Directory dan SQL Server PowerShell.

Import-Module -Name ActiveDirectory, SQLServer

Periksa untuk melihat apakah ada penyedia PowerShell tambahan yang ditambahkan.

Get-PSProvider
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}

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

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 Incorporated LIABI...
109F1CAED645BB78B3EA2B94C0697C740733031C  CN=Microsoft Windows Hardware Compatibility,...

Operator perbandingan

PowerShell berisi sejumlah operator perbandingan yang digunakan untuk membandingkan nilai atau menemukan nilai yang cocok dengan pola tertentu. Tabel 5-1 berisi daftar operator perbandingan di PowerShell.

Operator Definisi
-eq Sama dengan
-ne Tidak sama dengan
-gt Lebih dari
-ge Lebih dari atau sama dengan
-lt Kurang dari
-le Kurang dari atau sama dengan
-Like Cocokkan * menggunakan karakter kartubebas
-NotLike Tidak cocok dengan menggunakan * karakter kartubebas
-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

Semua operator yang tercantum dalam Tabel 5-1 tidak peka huruf besar/kecil. Tempatkan di depan operator yang c tercantum dalam Tabel 5-1 untuk membuatnya peka huruf besar/kecil. Misalnya, -ceq adalah versi operator perbandingan -eq yang peka huruf besar/kecil.

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

'PowerShell' -eq 'powershell'
True

Ini tidak sama dengan menggunakan versi peka huruf besar/kecil dari operator perbandingan yang sama.

'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 semua bekerja dengan nilai string atau numerik.

5 -gt 5
False

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

5 -ge 5
True

Berdasarkan hasil dari dua contoh sebelumnya, Anda mungkin dapat menebak bagaimana kurang dari dan kurang dari atau sama dengan pekerjaan.

5 -lt 10
True

Operator -Like dan -Match dapat membingungkan, bahkan untuk pengguna PowerShell berpengalaman. -Like digunakan dengan wildcard karakter * dan ? untuk melakukan kecocokan "like".

'PowerShell' -like '*shell'
True

-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 $Numbers apakah variabel menyertakan 15.

$Numbers -contains 15
False

Tentukan apakah menyertakan angka 10.

$Numbers -contains 10
True

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

$Numbers -notcontains 15
True

Contoh sebelumnya mengembalikan true Boolean karena benar bahwa $Numbers variabel tidak berisi 15. Namun ini berisi angka 10 sehingga salah ketika diuji.

$Numbers -notcontains 10
False

Operator perbandingan "in" pertama kali diperkenalkan di PowerShell versi 3.0. Ini digunakan untuk menentukan apakah nilai adalah "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 kecuali dari arah yang berlawanan.

10 -in $Numbers
True

15 tidak ada dalam $Numbers array sehingga false dikembalikan dalam contoh berikut.

15 -in $Numbers
False

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

10 -notin $Numbers
False

Contoh sebelumnya mengembalikan false karena $Numbers array menyertakan 10 dan kondisi sedang diuji untuk menentukan apakah tidak berisi 10.

15 "tidak masuk" $Numbers array sehingga mengembalikan true Boolean .

15 -notin $Numbers
True

Operator -replace hanya ingin kau berpikir. Ini digunakan untuk menggantikan sesuatu. Menentukan satu nilai menggantikan nilai tersebut tanpa apa-apa. Dalam contoh berikut, saya mengganti "Shell" tanpa apa-apa.

'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, saya mengganti kata "Sabtu" 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 replace. Namun, -Replace operator tidak peka huruf besar/kecil secara default, dan metode Replace() peka huruf besar/kecil.

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

Perhatikan bahwa kata "Sabtu" tidak diganti dalam contoh sebelumnya. Ini karena ditentukan dalam kasus yang berbeda dari yang asli. Ketika kata "Sabtu" ditentukan dalam kasus yang sama dengan aslinya, metode Replace() memang menggantinya 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 tes Turki. Misalnya, lihat artikel blog berjudul Menggunakan Pester untuk Menguji Kode PowerShell dengan Budaya Lain. Rekomendasi saya adalah 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 menemukan diri saya menggunakannya dengan Where-Object cmdlet untuk melakukan beberapa jenis pemfilteran.

Ringkasan

Dalam bab ini, Anda telah mempelajari sejumlah topik berbeda untuk menyertakan Hak Pemformatan, Alias, Penyedia, dan Operator Perbandingan.

Tinjauan

  1. Mengapa perlu melakukan Pemformatan sejauh mungkin ke kanan?
  2. Bagaimana Anda menentukan apa cmdlet aktual 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 salah satu penyedia registri.
  5. Apa salah satu manfaat utama menggunakan operator pengganti alih-alih metode ganti?