[英]Declare get accessors in PowerShell cmdlet parameters
根據MSDN :
“必須在公共非靜態字段或屬性上聲明參數。應在屬性上聲明參數。該屬性必須具有公共集訪問器,如果指定了ValueFromPipeline或ValueFromPipelineByPropertyName關鍵字,則該屬性必須具有公共get訪問器。”
為什么我必須在我的cmdlet ValueFromPipeline
參數中聲明get訪問器? 據我所知,PowerShell只需要將它們的值放入,而不是將它們讀出來。 謝謝(順便說一句,我只是好奇這個行為:))。
PowerShell 在分配從管道獲取的新值之前, 讀取使用ValueFromPipeline
或ValueFromPipelineByPropertyName
標記的參數的默認值以進行備份。
請考慮以下cmdlet:
New-Post -Title <string>
Set-Post -InputObject <Post> -Title <string>
以下適用情況:
New-Post
cmdlet 將新創建的Post
對象返回到具有 Title
屬性的管道 Set-Post
cmdlet上的InputObject
屬性標記為ValueFromPipeline = true
Set-Post
cmdlet上的Title
屬性標記為ValueFromPipelineByPropertyName = true
。 將它們與以下命令結合使用:
New-Post -Title "Foo" | Set-Post
並在Set-Post
cmdlet的Title
屬性的get訪問器上設置斷點會產生以下堆棧跟蹤:
如您所見,在將Set-Post
cmdlet上的Title
屬性與來自管道的對象上的相應屬性的值綁定的過程中,將調用CmdletParameterBinderController.GetDefaultParameterValue
方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.