簡體   English   中英

在PowerShell cmdlet參數中聲明get訪問器

[英]Declare get accessors in PowerShell cmdlet parameters

根據MSDN

“必須在公共非靜態字段或屬性上聲明參數。應在屬性上聲明參數。該屬性必須具有公共集訪問器,如果指定了ValueFromPipeline或ValueFromPipelineByPropertyName關鍵字,則該屬性必須具有公共get訪問器。”

為什么我必須在我的cmdlet ValueFromPipeline參數中聲明get訪問器? 據我所知,PowerShell只需要將它們的值放入,而不是將它們讀出來。 謝謝(順便說一句,我只是好奇這個行為:))。

PowerShell 分配從管道獲取的新值之前, 讀取使用ValueFromPipelineValueFromPipelineByPropertyName標記的參數的默認值以進行備份。

請考慮以下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訪問器上設置斷點會產生以下堆棧跟蹤:

PowerShell中參數綁定的堆棧跟蹤

如您所見,在將Set-Post cmdlet上的Title屬性與來自管道的對象上的相應屬性的值綁定的過程中,將調用CmdletParameterBinderController.GetDefaultParameterValue方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM