Biçimlendirme, takma adlar, sağlayıcılar, karşılaştırma


Gereksinimler

Bu bölümde gösterilen örneklerin bazıları için SQL Server PowerShell modülü gereklidir. Modül, SQL Server Management Studio'nun (SSMS) bir parçası olarak kurulur. Daha sonraki bölümlerde de kullanılır. Windows 10 laboratuvar ortamı bilgisayarınıza indirip yükleyin.

Sağa Biçimlendir

4. Bölümde mümkün olduğunca sola doğru filtrelemeyi öğrendiniz. Bir komutun çıktısını manuel olarak biçimlendirme kuralı, mümkün olduğu kadar sağda gerçekleşmesi gerekmesi dışında bu kurala benzer.

En yaygın format komutları Format-Table ve Format-List'tir. Format-Wide ve Format-Custom da 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 özelliği varsayılan olarak bir listeye döndüren bir komut.

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

Biçimlendirmeyi manuel olarak geçersiz kılmak ve çıktıyı liste yerine tabloda göstermek için Format-Table 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 çıktı, bir tablodaki üç özelliktir.

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

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

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

Get-Service'i Format-List'e aktarmanın ek özellikler döndürmesine neden olduğuna dikkat edin. Bu, belirli bir komutun formatının perde arkasında ayarlanma şekli nedeniyle her komutta gerçekleşmez.

Biçim cmdlet'leriyle ilgili 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.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...

Bunun anlamı, format komutlarının diğer komutların çoğuna aktarılamamasıdır. Bazı Out-* komutlarına yönlendirilebilirler, ancak hepsi bu. Bu nedenle herhangi bir formatlamayı satırın en sonunda yapmak istiyorsunuz (sağdaki format).

Takma adlar

PowerShell'deki takma ad, bir komutun daha kısa adıdır. PowerShell bir dizi yerleşik takma ad içerir ve ayrıca kendi takma adlarınızı da tanımlayabilirsiniz.

Get-Alias cmdlet'i takma adları bulmak için kullanılır. Bir komutun takma adını zaten biliyorsanız, takma adın hangi komutla ilişkilendirildiğini belirlemek için Ad parametresi kullanılır.

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

Ad parametresinin değeri için birden fazla takma ad belirtilebilir.

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

Konumsal bir parametre olduğu için Ad parametresinin sıklıkla atlandığını göreceksiniz.

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

Bir komutun takma adlarını bulmak istiyorsanız Tanım parametresini kullanmanız gerekir.

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

Tanım parametresi konumsal olarak kullanılamaz, dolayısıyla belirtilmesi gerekir.

Takma adlar size birkaç tuş vuruşu tasarrufu sağlayabilir ve konsola komut yazarken sorun yaratmaz. Bunlar, kaydettiğiniz veya başkalarıyla paylaştığınız komut dosyalarında veya herhangi bir kodda kullanılmamalıdır. Bu kitapta daha önce de belirtildiği gibi, tam cmdlet ve parametre adlarının kullanılması, kendi kendini belgelemeyi sağlar ve anlaşılması daha kolaydır.

Kendi takma adlarınızı oluştururken dikkatli olun çünkü bunlar yalnızca bilgisayarınızdaki mevcut PowerShell oturumunuzda mevcut olacaktır.

Sağlayıcılar

PowerShell'deki sağlayıcı, dosya sisteminin bir veri deposuna erişmesine izin veren bir arayüzdür. PowerShell'de çok sayıda yerleşik sağlayıcı vardır.

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}

Önceki sonuçlarda görebileceğiniz gibi, kayıt defteri, takma adlar, ortam değişkenleri, dosya sistemi, işlevler, değişkenler, sertifikalar ve WSMan için yerleşik sağlayıcılar bulunmaktadır.

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

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

Active Directory PowerShell modülü ve SQLServer PowerShell modülü gibi üçüncü taraf modüllerin her ikisi de kendi PowerShell sağlayıcısını ve PSDrive'ı ekler.

Active Directory ve SQL Server PowerShell modüllerini içe aktarın.

Import-Module -Name ActiveDirectory, SQLServer

Ek PowerShell sağlayıcılarının eklenip eklenmediğini kontrol edin.

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}

Önceki sonuç kümesinde, biri Active Directory için, diğeri SQL Server için olmak üzere iki yeni PowerShell sağlayıcısının mevcut olduğuna dikkat edin.

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

Karşılaştırma Operatörleri

PowerShell, değerleri karşılaştırmak veya belirli kalıplarla eşleşen değerleri bulmak için kullanılan bir dizi karşılaştırma işleci içerir. Tablo 5-1, PowerShell'deki karşılaştırma işleçlerinin bir listesini içerir.

-eq

Eşittir

-ne

Eşit değil

-gt

Şundan büyük:

-ge

Büyük veya eşittir

-lt

Daha az

-le

Küçük veya eşit

-Like

* joker karakterini kullanarak eşleştirin

-NotLike

* joker karakteri kullanıldığında eşleşmiyor

-Match

Belirtilen normal ifadeyle eşleşir

-NotMatch

Belirtilen normal ifadeyle eşleşmiyor

-Contains

Bir koleksiyonun belirtilen bir değeri içerip içermediğini belirler

-NotContains

Bir koleksiyonun belirli bir değer içerip 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ğeri değiştirir

Tablo 5-1'de listelenen operatörlerin tümü büyük/küçük harfe duyarlı değildir. Büyük/küçük harfe duyarlı hale getirmek için Tablo 5-1'de listelenen operatörün önüne bir c yerleştirin. Örneğin, -ceq, -eq karşılaştırma operatörünün büyük/küçük harfe duyarlı versiyonudur.

Eşit karşılaştırma işleci kullanılarak uygun harf "PowerShell", küçük harf "powershell"e eşittir.

'PowerShell' -eq 'powershell'
True

Eşittir karşılaştırma operatörünün büyük/küçük harfe duyarlı sürümünü kullanmak eşit değildir.

'PowerShell' -ceq 'powershell'
False

Eşit olmayan karşılaştırma operatörü durumu tersine çevirir.

'PowerShell' -ne 'powershell'
False

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

5 -gt 5
False

Önceki örnekte büyüktür yerine büyük veya eşit kullanılması, beş beşe eşit olduğundan Boolean değerini döndürür.

5 -ge 5
True

Önceki iki örnekten elde edilen sonuçlara dayanarak, muhtemelen hem küçük hem de küçük veya eşit'in ne kadar işe yaradığını tahmin edebilirsiniz.

5 -lt 10
True

-Like ve -Match operatörleri deneyimli PowerShell kullanıcıları için bile kafa karıştırıcı olabilir. -Like, "beğen" eşleşmeleri gerçekleştirmek için * ve ? karakterleri joker karakteriyle birlikte kullanılır.

'PowerShell' -like '*shell'
True

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

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

1'den 10'a kadar olan sayıları bir değişkende saklamak için aralık operatörünü 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, $Numbers değişkeninin bir değer içerip içermediğini görmek için mantığı tersine çevirir.

$Numbers -notcontains 15
True

Önceki örnek Boolean true değerini döndürür çünkü $Numbers değişkeninin 15 içermediği doğrudur. Ancak 10 sayısını içerdiğinden test edildiğinde false olur.

$Numbers -notcontains 10
False

"İçinde" karşılaştırma operatörü ilk olarak PowerShell sürüm 3,0'da tanıtıldı. Bir değerin bir dizide "içinde" olup olmadığını belirlemek için kullanılır. $Numbers değişkeni birden fazla değer içerdiğinden bir dizidir.

15 -in $Numbers
False

Başka bir deyişle, -in, ters yön hariç, include karşılaştırma operatörüyle aynı testi gerçekleştirir.

10 -in $Numbers
True

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

15 -in $Numbers
False

Tıpkı -contains operatörü gibi, not da -in operatörünün mantığını tersine çevirir.

10 -notin $Numbers
False

$Numbers dizisi 10 içerdiğinden ve koşul, 10 içerip içermediğini belirlemek için test edildiğinden, önceki örnek false değerini döndürür.

15, $Numbers dizisinde "değildir", dolayısıyla Boolean değerini döndürür.

15 -notin $Numbers
True

-replace operatörü sadece düşünmenizi istiyor. Bir şeyin yerine geçmek için kullanılır. Bir değerin belirtilmesi, o değerin hiçbir şeyle değiştirilmesine neden olmaz. Aşağıdaki örnekte "Shell"i hiçbir şeyle değiştiriyorum.

'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'daki SQL Cumartesi günü her yıl konuşmaya çalıştığım bir etkinlik. Aşağıdaki örnekte "Cumartesi" kelimesini "Cumartesi" kısaltmasıyla değiştirdim.

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

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

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

Önceki örnekte "Cumartesi" kelimesinin değiştirilmediğine dikkat edin. Bunun nedeni, orijinalinden farklı bir durumda belirtilmiş olmasıdır. "Cumartesi" kelimesi orijinaliyle aynı durumda belirtildiğinde, Replace() yöntemi beklendiği gibi onun yerini alır.

'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'nde başarısız olmak gibi öngörülemeyen sorunlarla karşılaşabilirsiniz. Örnek olarak PowerShell Kodunu Diğer Kültürlerle Test Etmek İçin Pester Kullanma başlıklı blog makalesine bakın. Benim tavsiyem bu tür sorunların yaşanmaması için mümkün olduğunca yöntem yerine operatör kullanılmasıdır.

Karşılaştırma işleçleri önceki örneklerde gösterildiği gibi kullanılabilse de, normalde kendimi bunları bir tür filtreleme gerçekleştirmek için Where-Object cmdlet'iyle birlikte kullanırken buluyorum.

Özet

Bu bölümde Biçimlendirme Hakkı, Takma Adlar, Sağlayıcılar ve Karşılaştırma Operatörlerini içeren bir dizi farklı konuyu öğrendiniz.

Gözden geçirmek

  1. Biçimlendirmeyi mümkün olduğunca sağa doğru yapmak neden gereklidir?
  2. % takma adı için gerçek cmdlet'in ne olduğunu nasıl belirlersiniz?
  3. Kaydettiğiniz komut dosyalarında veya başkalarıyla paylaştığınız kodlarda neden takma ad kullanmamalısınız?
  4. Kayıt defteri sağlayıcılarından biriyle ilişkili sürücülerde dizin listesi gerçekleştirin.
  5. Değiştirme yöntemi yerine değiştirme operatörünü kullanmanın temel faydalarından biri nedir?

Önerilen Okuma

  • Format-Table
  • Format-List
  • Format-Wide
  • about_Aliases
  • about_Providers
  • about_Comparison_Operators
  • about_Arrays

İlgili makaleler