Aracılığıyla paylaş


5. Bölüm - Biçimlendirme, diğer adlar, sağlayıcılar, karşılaştırma

Önkoşullar

Bu bölümde gösterilen bazı örnekler için SqlServer PowerShell modülü gereklidir. SqlServer PowerShell modülü ve yükleme yönergeleri hakkında daha fazla bilgi için bkz. SQL Server PowerShell'e genel bakış. Sonraki bölümlerde de kullanılır. İndirin ve Windows laboratuvar ortamı bilgisayarınıza yükleyin.

Sağa Biçimlendir

Bölüm 4'te, mümkün olduğunca sola doğru filtrelemeyi öğrendiniz. Bir komutun çıkışını el ile biçimlendirme kuralı, mümkün olduğunca sağa doğru gerçekleşmesi gerekmesi dışında bu kurala benzer.

En yaygın biçim komutları Format-Table ve Format-List'dir. Format-Wide ve Format-Custom de kullanılabilir, ancak daha az yaygındır.

Bölüm 3'te belirtildiği gibi, özel biçimlendirme kullanılmadığı sürece dörtten fazla özellik döndüren bir komut varsayılan olarak listeye atanır.

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

Biçimlendirmeyi Format-Table el ile geçersiz kılmak ve çıktıyı liste yerine tabloda göstermek için cmdlet'ini kullanın.

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

Get-Service için varsayılan çıkış, bir tablodaki üç özelliktir.

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

Varsayılan biçimlendirmeyi Format-List geçersiz kılmak ve sonuçları bir listede döndürmek için cmdlet'ini kullanın.

Get-Service -Name w32time | Format-List

Dikkat edin ki yalnızca Get-Service'dan Format-List'e aktarım yapılması ek özelliklerin geri dönmesini sağladı. Bu, belirli bir komutun biçiminin arka planda nasıl ayarlandığı nedeniyle her komutta gerçekleşmez.

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

Biçim cmdlet'leriyle dikkat edilmesi gereken bir numaralı şey, PowerShell'deki normal nesnelerden farklı biçim nesneleri üretmeleridir.

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...

Bunun anlamı, biçim komutlarının diğer komutların çoğuna yönlendirilememesidir. Bazı Out-* komutlara aktarılabilirler, ancak hepsi bu kadar. Bu nedenle, satırın en sonunda herhangi bir biçimlendirme gerçekleştirmek istiyorsunuz (sağa biçimlendir).

Takma Adlar

PowerShell'deki takma ad, bir komut için daha kısa bir addır. PowerShell bir takım yerleşik takma ad içerir ve kendi takma adlarınızı da tanımlayabilirsiniz.

Get-Alias Cmdlet, diğer adları bulmak için kullanılır. Bir komutun diğer adını zaten biliyorsanız, diğer adın hangi komutla ilişkilendirileceğini belirlemek için Name parametresi kullanılır.

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

Name parametresinin değeri için birden çok diğer ad belirtilebilir.

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

Genellikle name parametresinin konumsal bir parametre olduğundan atlanmış olduğunu görürsünüz.

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

Bir komutun diğer adlarını bulmak istiyorsanız Tanım parametresini kullanmanız gerekir.

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

Tanım parametresi konum olarak kullanılamaz, bu nedenle belirtilmesi gerekir.

Takma adlar, birkaç tuş vuruşunu kaydeder ve konsola komut yazdığınızda sorun teşkil etmez. Betiklerde veya kaydettiğiniz veya başkalarıyla paylaştığınız kodlarda kullanılmamalıdır. Bu kitapta daha önce belirtildiği gibi, tam cmdlet ve parametre adlarını kullanmak kendi kendini belgelemektir ve anlaşılması kolaylaşır.

Kendi diğer adlarınızı oluştururken dikkatli olun çünkü bunlar yalnızca mevcut bilgisayarınızdaki PowerShell oturumunda var.

Sağlayıcılar

PowerShell'deki sağlayıcı, veri deposuna dosya sistemi benzeri erişim sağlayan bir arabirimdir. PowerShell'de birkaç yerleşik sağlayıcı vardır.

Get-PSProvider

Aşağıdaki sonuçlarda görebileceğiniz gibi kayıt defteri, diğer adlar, ortam değişkenleri, dosya sistemi, işlevler, değişkenler, sertifikalar ve WSMan için yerleşik sağlayıcılar vardır.

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}

Bu sağlayıcıların veri depolarını kullanıma açmak için kullandıkları gerçek sürücüler cmdlet'iyle Get-PSDrive belirlenebilir. Get-PSDrive Cmdlet yalnızca sağlayıcılar tarafından kullanıma sunulan sürücüleri değil, aynı zamanda ağ paylaşımlarına eşlenen sürücüler de dahil olmak üzere Windows mantıksal sürücülerini görüntüler.

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

ActiveDirectory PowerShell modülü ve SqlServer PowerShell modülü gibi üçüncü taraf modülleri hem kendi PowerShell sağlayıcısını hem de PSDrive'ı ekler.

ActiveDirectory ve SqlServer PowerShell modüllerini içeri aktarın.

Import-Module -Name ActiveDirectory, SQLServer

Ek PowerShell sağlayıcıları eklenip eklenmediğini denetleyin.

Get-PSProvider

Aşağıdaki sonuç kümesinde, biri Active Directory ve diğeri SQL Server için olan iki yeni PowerShell sağlayıcısının mevcut olduğuna dikkat edin.

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}

Bu modüllerin her biri için bir PSDrive da eklendi.

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

PSDrive'lara geleneksel bir dosya sistemi gibi erişilebilir.

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...

Karşılaştırma İşleçleri

PowerShell, değerleri karşılaştırmak veya belirli desenlerle eşleşen değerleri bulmak için kullanılan çeşitli karşılaştırma işleçleri içerir. Aşağıdaki tabloda PowerShell'deki karşılaştırma işleçlerinin listesi yer alır.

Tabloda listelenen tüm işleçler harf duyarlılığına sahip değildir. Büyük/küçük harfe duyarlı olmalarını sağlamak için işlecin önüne bir c yerleştirin. Örneğin, -ceq eşittir (-eq) karşılaştırma işlecinin büyük/küçük harfe duyarlı bir sürümüdür.

Operatör Tanım
-eq Eşittir
-ne Eşit değil
-gt Daha büyük
-ge Büyüktür veya eşittir
-lt Daha az
-le Küçüktür ya da eşittir
-like Joker karakteri kullanarak * eşleştirme
-notlike * joker karakteri kullanılarak eşleşme sağlanamıyor
-match Belirtilen normal ifadeyle eşleşir
-notmatch Belirtilen normal ifadeyle eşleşmiyor
-contains Bir koleksiyonun belirtilen bir değer içerip içermediğini belirler
-notcontains Bir koleksiyonun belirli bir değer içermediğini belirler
-in Belirtilen değerin bir koleksiyonda olup olmadığını belirler
-notin Belirtilen değerin bir koleksiyonda olup olmadığını belirler
-replace Belirtilen değerin yerini alır

"PowerShell", "equals" karşılaştırma operatörü kullanılarak, küçük harfle yazılan "powershell" ile eşittir.

'PowerShell' -eq 'powershell'
True

Eşittir karşılaştırma işlecinin büyük/küçük harf duyarlı sürümü kullanılarak tam eşitlik sağlanamıyor.

'PowerShell' -ceq 'powershell'
False

Eşitlik olmayan karşılaştırma işleci, değerlendirmeyi tersine çevirir.

'PowerShell' -ne 'powershell'
False

Büyüktür, büyüktür veya eşittir, küçüktür ve küçüktür veya eşittir ifadelerinin tümü, dize veya sayısal değerlerle çalışır.

5 -gt 5
False

Önceki örnekte büyüktür yerine büyüktür veya eşittir kullanıldığında, beş beşe eşit olduğundan Boolean değeri doğru döndürülüyor.

5 -ge 5
True

Önceki iki örnekten elde ettiğiniz sonuçlara dayanarak, büyük olasılıkla hem "küçüktür" hem de "küçük veya eşittir" işleçlerinin nasıl çalıştığını tahmin edebilirsiniz.

5 -lt 10
True

-like ve -match işleçleri, deneyimli PowerShell kullanıcıları için bile kafa karıştırıcı olabilir. -like , joker karakterleri * ve ? ile "benzer" eşleşmeleri gerçekleştirmek için kullanılır.

'PowerShell' -like '*shell'
True

işleci, -match eşleştirmeyi gerçekleştirmek için normal bir ifade kullanır.

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

1 ile 10 arasında sayıları bir değişkende depolamak için aralık işlecini kullanın.

$Numbers = 1..10

$Numbers değişkeninin 15 içerip içermediğini belirleyin.

$Numbers -contains 15
False

10 sayısını içerip içermediğini belirleyin.

$Numbers -contains 10
True

-notcontains işleci, değişkenin bir değer içerip $Numbers içermediğini görmek için mantığı tersine çevirir.

$Numbers -notcontains 15

Önceki örnek, değişkenin 15 içermediği doğru olduğundan Boole değerini true $Numbers döndürür.

True

Ancak 10 sayısını içerdiğinden test edildiğinde false olur.

$Numbers -notcontains 10
False

Karşılaştırma -in işleci ilk olarak PowerShell sürüm 3.0'da kullanıma sunulmuştur. Bir değerin bir dizide olup olmadığını belirlemek için kullanılır. $Numbers değişken, birden çok değer içerdiğinden bir dizidir.

15 -in $Numbers
False

Başka bir deyişle, -in karşılaştırma işlecini içeren ile aynı testi gerçekleştirir ancak ters yönden yapar.

10 -in $Numbers
True

Onbeş dizide $Numbers olmadığından aşağıdaki örnekte false döndürülür.

15 -in $Numbers
False

Tıpkı -contains işleci gibi, not işleci -in işleci için mantığı tersine çevirir.

10 -notin $Numbers

$Numbers dizisi 10’u içerdiği için ve koşul da 10’u içermediğini test ettiği için, önceki örnek false döndürür.

False

Onbeş öğesinin $Numbers dizide olup olmadığını belirleyin.

15 -notin $Numbers

15, dizide $Numbers "yok" olduğundan Boole değerinin true değerini döndürür.

True

Operatör -replace tam da düşündüğünüz şeyi yapar. Bir şeyi değiştirmek için kullanılır. Bir değer belirtilmesi, bu değerin yerini hiçbir şey almaz. Aşağıdaki örnekte, "Shell" yerine hiçbir şeyle değiştirin.

'PowerShell' -replace 'Shell'
Power

Bir değeri farklı bir değerle değiştirmek istiyorsanız, değiştirmek istediğiniz desenden sonra yeni değeri belirtin. Baton Rouge'da SQL Saturday her yıl konuşmaya çalıştığım bir etkinlik. Aşağıdaki örnekte, "Cumartesi" sözcüğü "Sat" kısaltmasıyla değiştirilir.

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

Replace() gibi, replace işlecinin çalışma şekline benzer şeyleri değiştirmek için kullanılabilecek yöntemler de vardır. Ancak, -replace işleç varsayılan olarak büyük/küçük harfe duyarlı değildir ve Replace() yöntemi büyük/küçük harfe duyarlıdır.

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

"Cumartesi" sözcüğünün değiştirilmediğini fark edin. Bunun nedeni, özgün örnekten farklı bir durumda belirtiliyor olmasıdır.

SQL Saturday - Baton Rouge

"Saturday" sözcüğü özgün ile aynı durumda belirtildiğinde Replace() yöntemi, değiştirme işlemini beklendiği gibi gerçekleştirir.

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

Verileri dönüştürmek için yöntemler kullanırken dikkatli olun çünkü Türkiye Testi'nin başarısız olması gibi öngörülemeyen sorunlarla karşılaşabilirsiniz. Örneğin, PowerShell Kodunu Diğer Kültürlerle Test Etmek için Pester Kullanma başlıklı blog makaleme bakın. Bu tür sorunları önlemek için mümkün olduğunda yöntemler yerine işleçler kullanmanızı öneririm.

Karşılaştırma işleçleri önceki örneklerde gösterildiği gibi kullanılabilse de, bunları genellikle filtreleme gerçekleştirmek için cmdlet'iyle Where-Object birlikte kullanıyorum.

Özet

Bu bölümde Biçimlendirme Hakkı, Diğer Adlar, Sağlayıcılar ve Karşılaştırma İşleçleri gibi çeşitli konuları öğrendiniz.

Eleştiri

  1. Biçimlendirmeyi mümkün olduğunca sağa doğru gerçekleştirmek neden gereklidir?
  2. % takma adının gerçek cmdlet'inin ne olduğunu nasıl belirlersiniz?
  3. Kaydettiğiniz betiklerde veya başkalarıyla paylaştığınız kodlarda neden alias veya takma adlar kullanmamalısınız?
  4. Kayıt defteri sağlayıcısıyla ilişkili sürücülerde bir dizin listesi gerçekleştirin.
  5. replace yöntemi yerine replace işlecini kullanmanın başlıca avantajlarından biri nedir?

Kaynaklar

Sonraki adımlar

Sonraki bölümde akış denetimi, betik oluşturma, döngüler ve koşullu mantık hakkında bilgi edineceksiniz.