Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Ö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
- Biçimlendirmeyi mümkün olduğunca sağa doğru gerçekleştirmek neden gereklidir?
-
%takma adının gerçek cmdlet'inin ne olduğunu nasıl belirlersiniz? - Kaydettiğiniz betiklerde veya başkalarıyla paylaştığınız kodlarda neden alias veya takma adlar kullanmamalısınız?
- Kayıt defteri sağlayıcısıyla ilişkili sürücülerde bir dizin listesi gerçekleştirin.
- replace yöntemi yerine replace işlecini kullanmanın başlıca avantajlarından biri nedir?
Kaynaklar
- Tabloyu Biçimlendir
- Biçim Listesi
- Geniş Biçim
- Takma_Adlar_Hakkında
- sağlayıcılar_hakkında
- Karşılaştırma_Operatörleri_Hakkında
- Arrays hakkında
Sonraki adımlar
Sonraki bölümde akış denetimi, betik oluşturma, döngüler ve koşullu mantık hakkında bilgi edineceksiniz.
PowerShell