PowerShell'de Zorunlu Parametreler
Zorunlu Özelliğini Kullanma
PowerShell'de parametreleri zorunlu hale getirmek için Zorunlu özelliğini kullanın.
Zorunlu Özelliği Kullan:
function DisplayName {
param(
[Parameter(Mandatory=$true)]
[string]$Name
)
Write-Host $Name
}
DisplayName "John"ÇIKTI:
JohnÖncelikle function anahtar sözcüğünün başına gelen DisplayName adında bir işlev tanımladık. Bu fonksiyonun içinde, $Name parametresini tanımlamak için kullanılan param anahtar sözcüğünü (param() bloğu olarak da bilinir) kullandık. ; bu parametre string veri türündeydi.
param() bloğu aynı zamanda $Name parametresini temsil eden [Parameter()] özniteliğini de içeriyordu; zorunludur ve atlanamaz; bunun nedeni Zorunlu niteliğini $true olarak ayarlamamızdır. Yukarıdaki kodda $Name parametresinin bildirimi aşağıdaki özelliklere sahiptir:
- PowerShell konsolundan girdi alır.
- Zorunlu (zorunlu) bir parametredir.
- Bir
stringtipi değer alır.
Daha sonra yukarıdaki çıktıda görebileceğiniz gibi $Name parametresinin değerini yazdırmak için Write-Host cmdlet'ini kullandık. Son olarak, işleve argüman olarak "John" sağlayarak DisplayName yöntemini çağırdık.
Bir parametre ile bir argüman arasında açık bir fark olduğunu unutmayın; parametre değişkenin adıdır, argüman ise bu değişkenin içerdiği değerdir. Yukarıdaki örnekte
$Nameparametre,"John"ise argümandır.
$Name parametresinin değerini sağlamadan DisplayName işlevini çağırırsak ne olur? Bunu aşağıdaki örneği kullanarak yapalım.
Zorunlu Özelliği Kullan:
function DisplayName {
param(
[Parameter(Mandatory=$true)]
[string]$Name
)
Write-Host $Name
}
DisplayNameHATA:
cmdlet DisplayName at command pipeline position 1
Supply values for the following parameters:
Name:Bu sefer DisplayName fonksiyonunu çağırdığımız ancak $Name parametresi için gerekli olan değeri sağlamadığımız için yukarıda belirtilen hatayı aldık.
Şimdi bir program kullanıcısı olarak düşünün ve aşağıdaki kod parçacığında gösterildiği gibi bir tamsayı türü değeri iletmek gibi beklenmedik şeyler yapın ve sonuçları gözlemleyin.
Zorunlu Özelliği Kullan:
function DisplayName {
param(
[Parameter(Mandatory=$true)]
[string]$Name
)
Write-Host $Name
}
DisplayName 123ÇIKTI:
123
Yukarıdaki kod başarıyla yürütüldü ancak çalışmaması gerekiyor. Neden? Kod, $Name parametresinde saklanan zorunlu bir bağımsız değişken sağladığımız ve veri türünün param() içinde string olmasına karar verildiği için çalıştırıldı. engellemek. Yani bundan sonra her şey hatasız çalıştı ama alfabetik harfler dışında bir şey sağlanmışsa bu kodun çalışmamasını istiyoruz. Unutmayın, sayılar isim olamaz.
Bu, anlamsal hataları önlemek için bazı doğrulamalara sahip olmamız gerektiği anlamına gelir (bunlar, herhangi bir hata oluşturmayan ancak doğru şeyleri yapmayan kodla ilgili sorunlardır). Yalnızca string türü değerlerin nasıl doğrulanacağını ve kabul edileceğini öğrenmek için aşağıdaki bölüme bakın.
ValidatePattern ile Zorunlu'yu kullanın
Sağlanan bağımsız değişkeni doğrulamak amacıyla bir normal ifade tanımlamak için ValidatePattern özelliğiyle birlikte Zorunlu özelliğini kullanın.
Zorunlu Bağımsız Değişkenler için Modeli Doğrulama:
function DisplayName {
param(
[Parameter(Mandatory=$true)]
[ValidatePattern('^[a-zA-Z]+$')]
[string]$Name
)
Write-Host $Name
}
DisplayName 123
DisplayName "John"İlk İşlev Çağrısının Neden Olduğu Hata:
DisplayName: Cannot validate argument on parameter 'Name'. The argument "123" does not match the "^[a-zA-Z]+$" pattern. Supply an argument that matches "^[a-zA-Z]+$" and try the command again.İkinci İşlev Çağrısı için ÇIKIŞ:
JohnBurada DisplayName fonksiyonunu iki kez çağırdık; ilk çağrı için bağımsız değişken olarak 123 tamsayı değerini ilettik ve ikinci çağrı için "John" tipinde bir string değeri belirttik. kodu>. Ne yazık ki, ilk çağrıda yukarıdaki kod, belirtilen parametredeki bağımsız değişkeni doğrulayamadığını belirten bir hata görüntüledi. Buna karşılık, ikinci işlev çağrısında gayet iyi çalıştı. Neden?
Bunun nedeni, giriş değerini doğrulamak için [ValidatePattern()] özelliğini kullanmamızdır. Bu özellik, sağlanan bağımsız değişkeni doğrulamak için kullanılan bir normal ifadeyi aldı. Yukarıdaki durumda, bir veya daha fazla büyük ve küçük harfle eşleşen ^[a-zA-Z]+$ regex'ini kullandık. Burada + bir veya daha fazla harfle eşleşiyordu; ^ ve $, belirtilen modelin bir alt dizeyle değil, dizenin tamamıyla eşleştiğinden emin olmak için kullanıldı.
Gereksinimlere bağlı olarak öğrenebileceğiniz ValidateCount, ValidateLength ve ValidateSet gibi diğer doğrulama modellerini de kullanabiliriz. Burada. Artık, belirli bir değerler kümesinden zorunlu argümanı kabul etmek isteme olasılığımız da vardır. Bu durumda ValidateSet özelliğini kullanabiliriz. Bunu aşağıdaki bölümde öğrenelim.
ValidateSet ile Zorunlu'yu kullanın
Zorunlu özelliği, sağlanan bağımsız değişkeni doğrulamak için ValidateSet özelliğiyle birlikte kullanılır.
Zorunlu Argümanları Doğrulayın:
function DisplayName {
param(
[Parameter(Mandatory=$true)]
[ValidatePattern('^[a-zA-Z]+$')]
[ValidateSet('John', 'Mary')]
[string]$Name
)
Write-Host $Name
}
DisplayName "Mary"
DisplayName "John"
DisplayName "Martin"İlk İşlev Çağrısı için ÇIKIŞ:
Maryİkinci İşlev Çağrısı için ÇIKIŞ:
JohnÜçüncü İşlev Çağrısında Hata:
DisplayName: Cannot validate argument on parameter 'Name'. The argument "Martin" does not belong to the set
"John, Mary" is specified by the ValidateSet attribute. Supply an argument in the set and then try the command
again.Burada modeli doğruladık ve sağlanan argümanın tanımlanan kümeye ait olup olmadığını kontrol ettik. Bunun için, bir parametre argümanının geçerli değerlerinden bahsetmek için [ValidateSet()]'i kullandık; bu, yukarıdaki programın yalnızca "Mary" veya alması durumunda çalışacağı anlamına gelir. "John" bağımsız değişken olarak; aksi halde parametreyi doğrulayamadığını belirten bir hata üretecektir. Üç işlev çağrısının tümü için yukarıdaki çıktılara bakın.
Bu noktaya kadar string değerleri ve sayıları belirterek öğrendik, peki ya boş bir string ("") veya Zorunlu için parametresi; bu durumda, boş bir dize veya $null değeri sağlarsak? $null< iletirsek nitelikleri bir hata üretecektir. /code> değerini bağımsız değişken olarak kullanın.[ValidateSet()] ve [ValidatePattern()]
Neden? Bunun nedeni, ValidateSet'in argümanın kümeye ait olup olmadığını kontrol etmesidir. Aynı zamanda, ValidatePattern giriş argümanını eşleştirmeye çalışacak ve bir şeyler ters giderse her ikisi de bir hata üretecektir.
Şimdi, eğer bu niteliklerden herhangi birini (ne ValidateSet ne de ValidatePattern) kullanmazsak, boş bir dizeyi veya $null değerini nasıl tespit edebiliriz? Zorunlu argümanı mı? Bunu nasıl yapabileceğimizi aşağıdaki bölümde görelim.
ValidateNotNullOrEmpty ile Zorunlu'yu kullanın
Sağlanan bağımsız değişkenin ne boş bir dize ne de bir $null değeri olup olmadığını doğrulamak için ValidateNotNullOrEmpty özelliğiyle birlikte Mandatory özelliğini kullanın.
Zorunlu Argümanları Doğrulayın:
function DisplayName {
param(
[Parameter(Mandatory=$true)]
[ValidateNotNullOrEmpty()]
[string]$Name
)
Write-Host $Name
}
DisplayName "John"
DisplayName ""
DisplayName $nullİlk İşlev Çağrısı için ÇIKIŞ:
Johnİkinci İşlev Çağrısında Hata:
DisplayName: Cannot validate argument on parameter 'Name'. The argument is null or empty. Provide an argument that is
not null or empty, and then try the command again.Üçüncü İşlev Çağrısında Hata:
DisplayName: Cannot validate argument on parameter 'Name'. The argument is null or empty. Provide an argument that is
not null or empty, and then try the command again.Boş bir dizeyi ve $null'u tanımlamak için kullanılan ValidateNotNullOrEmpty() özelliği nedeniyle ikinci ve üçüncü işlev çağrısında bir hata aldık.
Yukarıdaki kod,
nullyerinenullveya"null"belirtirseniz,nulldeğerini ele alacağı için herhangi bir hata göstermez.stringtürü değeri olarak. Bu nedenle, bu durumu ele almak için aşağıda gösterildiği gibiValidatePatternözelliğini kullanmalıyız.
Zorunlu Argümanları Doğrulayın:
function DisplayName {
param(
[Parameter(Mandatory=$true)]
[ValidatePattern('^(?!null$)[a-zA-Z]+$')]
[string]$Name
)
Write-Host $Name
}
DisplayName "John"
DisplayName ""
DisplayName "null"
DisplayName null
DispalyName $nullİlk İşlev Çağrısı için ÇIKIŞ:
Johnİkinci İşlev Çağrısında Hata:
DisplayName: Cannot validate argument on parameter 'Name'. The argument "" does not match the "^(?!null$)[a-zA-Z]+$"
pattern. Supply an argument that matches "^(?!null$)[a-zA-Z]+$" and try the command again.Üçüncü İşlev Çağrısında Hata:
DisplayName: Cannot validate argument on parameter 'Name'. The argument "null" does not match the
"^(?!null$)[a-zA-Z]+$" pattern. Supply an argument that matches "^(?!null$)[a-zA-Z]+$" and try the command again.Dördüncü İşlev Çağrısında Hata:
DisplayName: Cannot validate argument on parameter 'Name'. The argument "null" does not match the
"^(?!null$)[a-zA-Z]+$" pattern. Supply an argument that matches "^(?!null$)[a-zA-Z]+$" and try the command again.Beşinci İşlev Çağrısında Hata:
DisplayName: Cannot validate argument on parameter 'Name'. The argument "" does not match the "^(?!null$)[a-zA-Z]+$"
pattern. Supply an argument that matches "^(?!null$)[a-zA-Z]+$" and try the command again.Boş dize ve $null değişkeni sağlanan normal ifadeyle eşleşmediğinden ikinci ve beşinci işlev çağrılarında hata aldık. Buna karşılık, üçüncü ve dördüncü işlev çağrıları bir hata görüntüledi çünkü yukarıdaki kod null değeri hariç tüm alfabetik kombinasyonları kabul ediyordu.
Birden Çok Zorunlu Nitelik Kullanma
PowerShell'de n parametrelerini zorunlu kılmak için n sayıda Zorunlu öznitelik kullanın.
Birden Çok Zorunlu Nitelik Kullanın:
function DisplayName {
param(
[Parameter(Mandatory=$true)]
[string]$FirstName,
[Parameter(Mandatory=$true)]
[string]$LastName
)
Write-Host $FirstName,$LastName
}
DisplayName "John" "Purell"ÇIKTI:
John Purelln parametrenin zorunlu olması için yukarıdaki örnekte gösterildiği gibi parametrenin adını bildirmeden önce [Parameter(Mandatory=$true)] kullanmamız gerekir. Başka bir durum, bir zorunlu parametrenin ve bir isteğe bağlı parametrenin bulunması olabilir. Bu durumda opsiyonel yapmak istediğimiz parametrenin Zorunlu özelliğini atlamamız gerekiyor. Aşağıdaki örneğe bakın.
Zorunlu ve İsteğe Bağlı Nitelikleri Kullanın:
function DisplayName {
param(
[Parameter(Mandatory=$true)]
[string]$FirstName,
[Parameter()]
[string]$LastName
)
Write-Host $FirstName,$LastName
}
DisplayName "John" "Purell"
DisplayName "John"ÇIKTI:
John Purell
John