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.
Parametre bağlama, PowerShell'in hangi parametre kümesinin kullanıldığını belirlemek ve değerleri komutun parametreleriyle ilişkilendirmek (bağlamak) için kullandığı işlemdir. Bu değerler komut satırından ve işlem hattından gelebilir.
Parametre bağlama işlemi, adlandırılmış ve konumsal komut satırı bağımsız değişkenlerini bağlayarak başlar. Komut satırı bağımsız değişkenlerini bağladıktan sonra PowerShell herhangi bir işlem hattı girişini bağlamaya çalışır. Değerlerin işlem hattından bağlanmasının iki yolu vardır. İşlem hattı girişini kabul eden parametreler aşağıdaki özniteliklerden birine veya her ikisine de sahiptir:
- ValueFromPipeline - İşlem hattındaki değer, türüne göre parametreye bağlıdır. Bağımsız değişkenin türü parametrenin türüyle eşleşmelidir.
- ValueFromPipelineByPropertyName - İşlem hattındaki değer, adına göre parametresine bağlıdır. İşlem hattındaki nesne, parametrenin adıyla veya diğer adlarından biriyle eşleşen bir özelliğe sahip olmalıdır. Özelliğin türü parametresinin türüyle eşleşmeli veya dönüştürülebilir olmalıdır.
Parametre bağlama hakkında daha fazla bilgi için bkz . about_Parameter_Binding.
Parametre bağlamasını görselleştirmek için kullanın Trace-Command
Parametre bağlama sorunlarını gidermek zor olabilir. Parametre bağlama işlemini görselleştirmek için trace-Command cmdlet'ini kullanabilirsiniz.
Aşağıdaki senaryoyu değerlendirin. ve olmak üzere iki metin dosyası file1.txt
[file2].txt
içeren bir dizininiz var.
PS> Get-ChildItem
Directory: D:\temp\test\binding
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 5/17/2024 12:59 PM 0 [file2].txt
-a--- 5/17/2024 12:59 PM 0 file1.txt
Dosya adlarını işlem hattı üzerinden cmdlet'ine Remove-Item
geçirerek dosyaları silmek istiyorsunuz.
PS> 'file1.txt', '[file2].txt' | Remove-Item
PS> Get-ChildItem
Directory: D:\temp\test\binding
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 5/17/2024 12:59 PM 0 [file2].txt
yalnızca silindiğini Remove-Item
file1.txt
ve silinmediğini [file2].txt
unutmayın. Dosya adı, joker karakter ifadesi olarak kabul edilen köşeli ayraçlar içerir. kullanarakTrace-Command
, dosya adının path parametresine Remove-Item
bağlı olduğunu görebilirsiniz.
Trace-Command -PSHost -Name ParameterBinding -Expression {
'[file2].txt' | Remove-Item
}
çıkışı Trace-Command
ayrıntılı olabilir. Her çıkış satırına bir zaman damgası ve izleme sağlayıcısı bilgileri eklenir. Bu örneğin çıktısı için, ön ek bilgileri okunmasını kolaylaştırmak için kaldırılmıştır.
BIND NAMED cmd line args [Remove-Item]
BIND POSITIONAL cmd line args [Remove-Item]
BIND cmd line args to DYNAMIC parameters.
DYNAMIC parameter object: [Microsoft.PowerShell.Commands.FileSystemProviderRemoveItemDynamicParameters]
MANDATORY PARAMETER CHECK on cmdlet [Remove-Item]
CALLING BeginProcessing
BIND PIPELINE object to parameters: [Remove-Item]
PIPELINE object TYPE = [System.String]
RESTORING pipeline parameter's original values
Parameter [Path] PIPELINE INPUT ValueFromPipeline NO COERCION
BIND arg [[file2].txt] to parameter [Path]
Binding collection parameter Path: argument type [String], parameter type [System.String[]],
collection type Array, element type [System.String], no coerceElementType
Creating array with element type [System.String] and 1 elements
Argument type String is not IList, treating this as scalar
Adding scalar element of type String to array position 0
BIND arg [System.String[]] to param [Path] SUCCESSFUL
Parameter [Credential] PIPELINE INPUT ValueFromPipelineByPropertyName NO COERCION
Parameter [Credential] PIPELINE INPUT ValueFromPipelineByPropertyName NO COERCION
Parameter [Credential] PIPELINE INPUT ValueFromPipelineByPropertyName WITH COERCION
Parameter [Credential] PIPELINE INPUT ValueFromPipelineByPropertyName WITH COERCION
MANDATORY PARAMETER CHECK on cmdlet [Remove-Item]
CALLING ProcessRecord
CALLING EndProcessing
kullanarakGet-Help
, path parametresinin Remove-Item
veya işlem hattından ByValue
ByPropertyName
dize nesnelerini kabul ettiğini görebilirsiniz. LiteralPath , işlem hattından ByPropertyName
dize nesnelerini kabul eder.
PS> Get-Help Remove-Item -Parameter Path, LiteralPath
-Path <System.String[]>
Specifies a path of the items being removed. Wildcard characters are permitted.
Required? true
Position? 0
Default value None
Accept pipeline input? True (ByPropertyName, ByValue)
Accept wildcard characters? true
-LiteralPath <System.String[]>
Specifies a path to one or more locations. The value of LiteralPath is used exactly as it's
typed. No characters are interpreted as wildcards. If the path includes escape characters,
enclose it in single quotation marks. Single quotation marks tell PowerShell not to interpret
any characters as escape sequences.
Required? true
Position? named
Default value None
Accept pipeline input? True (ByPropertyName)
Accept wildcard characters? false
çıktısı Trace-Command
, parametre bağlamanın komut satırı parametrelerini bağlayarak başladığını ve ardından işlem hattı girişinin geldiğini gösterir. İşlem hattından bir dize nesnesi aldığını görebilirsiniz Remove-Item
. Bu dize nesnesi Path parametresine bağlıdır.
BIND PIPELINE object to parameters: [Remove-Item]
PIPELINE object TYPE = [System.String]
RESTORING pipeline parameter's original values
Parameter [Path] PIPELINE INPUT ValueFromPipeline NO COERCION
BIND arg [[file2].txt] to parameter [Path]
...
BIND arg [System.String[]] to param [Path] SUCCESSFUL
Path parametresi joker karakterleri kabul ettiğinden, köşeli ayraçlar joker karakter ifadesini temsil eder. Ancak, bu ifade dizindeki hiçbir dosyayla eşleşmiyor. Dosyanın tam yolunu belirtmek için LiteralPath parametresini kullanmanız gerekir.
Get-Command
, LiteralPath parametresinin veya ByValue
işlem hattından ByPropertyName
girişi kabul ettiğini gösterir. Ve iki diğer adı PSPath
olduğunu ve LP
.
PS> (Get-Command Remove-Item).Parameters.LiteralPath.Attributes |
>> Select-Object ValueFrom*, Alias* | Format-List
ValueFromPipeline : False
ValueFromPipelineByPropertyName : True
ValueFromRemainingArguments : False
AliasNames : {PSPath, LP}
Bu sonraki örnekte, Get-Item
bir FileInfo nesnesi almak için kullanılır. Bu nesnenin PSPath adlı bir özelliği vardır.
PS> Get-Item *.txt | Select-Object PSPath
PSPath
------
Microsoft.PowerShell.Core\FileSystem::D:\temp\test\binding\[file2].txt
Ardından FileInfo nesnesi öğesine Remove-Item
geçirilir.
Trace-Command -PSHost -Name ParameterBinding -Expression {
Get-Item *.txt | Remove-Item
}
Bu örneğin çıktısı için ön ek bilgileri kaldırılmış ve her iki komut için parametre bağlamasını gösterecek şekilde ayrılmıştır.
Bu çıktıda, konumsal parametre değerini Path parametresine bağladığını Get-Item
görebilirsiniz.*.txt
BIND NAMED cmd line args [Get-Item]
BIND POSITIONAL cmd line args [Get-Item]
BIND arg [*.txt] to parameter [Path]
Binding collection parameter Path: argument type [String], parameter type [System.String[]],
collection type Array, element type [System.String], no coerceElementType
Creating array with element type [System.String] and 1 elements
Argument type String is not IList, treating this as scalar
Adding scalar element of type String to array position 0
BIND arg [System.String[]] to param [Path] SUCCESSFUL
BIND cmd line args to DYNAMIC parameters.
DYNAMIC parameter object: [Microsoft.PowerShell.Commands.FileSystemProviderGetItemDynamicParameters]
MANDATORY PARAMETER CHECK on cmdlet [Get-Item]
Parametre bağlama için izleme çıkışında, işlem hattından bir FileInfo nesnesi aldığını görebilirsinizRemove-Item
. FileInfo nesnesi bir String nesnesi olmadığından Path parametresine bağlanamaz.
FileInfo nesnesinin PSPath özelliği, LiteralPath parametresinin diğer adıyla eşleşir. PSPath aynı zamanda bir String nesnesidir, bu nedenle tür zorlaması olmadan LiteralPath parametresine bağlanabilir.
BIND NAMED cmd line args [Remove-Item]
BIND POSITIONAL cmd line args [Remove-Item]
BIND cmd line args to DYNAMIC parameters.
DYNAMIC parameter object: [Microsoft.PowerShell.Commands.FileSystemProviderRemoveItemDynamicParameters]
MANDATORY PARAMETER CHECK on cmdlet [Remove-Item]
CALLING BeginProcessing
CALLING BeginProcessing
CALLING ProcessRecord
BIND PIPELINE object to parameters: [Remove-Item]
PIPELINE object TYPE = [System.IO.FileInfo]
RESTORING pipeline parameter's original values
Parameter [Path] PIPELINE INPUT ValueFromPipeline NO COERCION
BIND arg [D:\temp\test\binding\[file2].txt] to parameter [Path]
Binding collection parameter Path: argument type [FileInfo], parameter type [System.String[]],
collection type Array, element type [System.String], no coerceElementType
Creating array with element type [System.String] and 1 elements
Argument type FileInfo is not IList, treating this as scalar
BIND arg [D:\temp\test\binding\[file2].txt] to param [Path] SKIPPED
Parameter [Credential] PIPELINE INPUT ValueFromPipelineByPropertyName NO COERCION
Parameter [Path] PIPELINE INPUT ValueFromPipelineByPropertyName NO COERCION
Parameter [Credential] PIPELINE INPUT ValueFromPipelineByPropertyName NO COERCION
Parameter [LiteralPath] PIPELINE INPUT ValueFromPipelineByPropertyName NO COERCION
BIND arg [Microsoft.PowerShell.Core\FileSystem::D:\temp\test\binding\[file2].txt] to parameter [LiteralPath]
Binding collection parameter LiteralPath: argument type [String], parameter type [System.String[]],
collection type Array, element type [System.String], no coerceElementType
Creating array with element type [System.String] and 1 elements
Argument type String is not IList, treating this as scalar
Adding scalar element of type String to array position 0
BIND arg [System.String[]] to param [LiteralPath] SUCCESSFUL
Parameter [Credential] PIPELINE INPUT ValueFromPipelineByPropertyName WITH COERCION
MANDATORY PARAMETER CHECK on cmdlet [Remove-Item]
CALLING ProcessRecord
CALLING EndProcessing
CALLING EndProcessing
PowerShell