我在PowerShell 5.0下測試Windows 10 Preview上的某些腳本時碰到過這個問題,但我也能夠在一些使用Win 8.1和PS4的機器上調用它。 0(不是所有的都是)。阻止添加成員cmdlet在添加新成員時調用ScriptProperty成員
基本上調用添加會員cmdlet將被調用該對象中的所有成員ScriptProperty,這是一件好事之下PS 2或3
當執行這段代碼中是不會發生的時候:
$global:BaseObject = New-Object PSObject
$global:BaseObject | Add-Member ScriptProperty "Test" { Write-Warning "I shouldn't see this during next Add-Member call!" }
$global:BaseObject | Add-Member NoteProperty "Test2" 2
...您可以在最後一次添加成員呼叫後看到登錄到控制檯的警告消息。
任何想法爲什麼會發生這種情況,以及如何防止它?或者爲什麼這確實發生在某些機器上,而沒有發生在具有相同PowerShell版本的其他機器上?
更新:
如低於此提到看起來像在PowerShell中的錯誤。我能夠發現它出現在PS 4以及PS 5預覽版中,如果您的System.Management.Automation.dll版本爲6.3.9600.17400或更新版本(由於某些原因,我們的某些8.1版機器在6.3.9600.17090版本中擁有它工作正常)。我會向微軟提交一個錯誤。
當你使用'Add-Member'時,你是否看到了結果對象,好像你用'-PassThru'調用了它?您發佈的代碼是您正在運行的實際代碼嗎?在PS4中,我無法在ISE中或控制檯主機中重現。 – briantist 2014-12-03 16:36:42
猜測的位,但它是否只是在每次操作後返回對象?如果你管到「Out-Null」,它還會發生嗎? – arco444 2014-12-03 16:42:09
@briantist我沒有使用-PassThru,使用它實際上調用了scriptproperty 6次:) – 2014-12-03 17:13:29