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.
-eqEşittir
-neEşit değil
-gtŞundan büyük:
-geBüyük veya eşittir
-ltDaha az
-leKüçük veya eşit
-Like*joker karakterini kullanarak eşleştirin-NotLike*joker karakteri kullanıldığında eşleşmiyor-MatchBelirtilen normal ifadeyle eşleşir
-NotMatchBelirtilen normal ifadeyle eşleşmiyor
-ContainsBir koleksiyonun belirtilen bir değeri içerip içermediğini belirler
-NotContainsBir koleksiyonun belirli bir değer içerip içermediğini belirler
-InBelirtilen değerin bir koleksiyonda olup olmadığını belirler
-NotInBelirtilen değerin bir koleksiyonda olup olmadığını belirler
-ReplaceBelirtilen 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
- Biçimlendirmeyi mümkün olduğunca sağa doğru yapmak neden gereklidir?
%takma adı için gerçek cmdlet'in ne olduğunu nasıl belirlersiniz?- Kaydettiğiniz komut dosyalarında veya başkalarıyla paylaştığınız kodlarda neden takma ad kullanmamalısınız?
- Kayıt defteri sağlayıcılarından biriyle ilişkili sürücülerde dizin listesi gerçekleştirin.
- 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