PowerShell:如何在Object Propertys上创建引用

fri*_*jet 4 shell powershell command-line pointers reference

一些事实:

当您将一个对象指向一个被调用的变量$a,然后其中一个属性发生变化时,该变量$a就会更新.

但是当我将对象的属性 $object.property(而不是对象本身)的值赋值给被调用的变量$b然后$object.property更改时,$b不会更新.这意味着,当前值存储在其中$object.property,但$b保持原样.

一个例子:

我将一个Window对象指向一个名为的变量$bochsWindow.然后一些属性改变,因为我移动窗口.但是当我打印出来时$bochsWindow,你可以看到它是最新的 - 这意味着,对象属性的所有新值也都存储在其中$bochsWindow.

但是如果尝试$bochsWindow在被调用的变量中存储属性$posX然后属性发生更改,$posX则不会更改.

PS .> $bochsWindow = (GetProcess bochs | Get-Window)
PS .> $bochsWindow


ProcessId    : 1536
ProcessName  : bochs
Position     : {X=54,Y=32,Width=650,Height=576}
IsMinimized  : False
IsMaximized  : False
WindowHandle : 3933134
Caption      : Bochs for Windows - Display


[[Moving Boch's Window By Hand]]
PS .> $bochsWindow


ProcessId    : 1536
ProcessName  : bochs
Position     : {X=0,Y=0,Width=650,Height=576}
IsMinimized  : False
IsMaximized  : False
WindowHandle : 3933134
Caption      : Bochs for Windows - Display


PS .> (Get-Window -ProcessName bochs)


ProcessId    : 1536
ProcessName  : bochs
Position     : {X=0,Y=0,Width=650,Height=576}
IsMinimized  : False
IsMaximized  : False
WindowHandle : 3933134
Caption      : Bochs for Windows - Display



PS .> $posX = $bochsWindow.Position.X
PS .> $posX
302
[[Moving Boch's Window By Hand]]
PS .> $posX
302
PS .> $bochsWindow.Position.X
472
PS .>
Run Code Online (Sandbox Code Playgroud)

但是,如果我想$posX保持最新并始终存储新值(472)而不是,我该怎么办?302

我的问题:

我想在变量中存储对象属性的引用.这意味着,我希望每次对象的属性更改时都会更新变量.我怎样才能做到这一点?谢谢.

CB.*_*CB. 6

不是琐碎的方式使用PSBreakpoint,但它是我所知道的唯一:

$global:bochsWindow = (GetProcess bochs | Get-Window) 
$act= @'
$global:b = $bochsWindow.Position.X 
'@
$global:sb = [scriptblock]::Create($act)
$global:b = Set-PSBreakpoint -Variable b -Mode Read -Action $global:sb
Run Code Online (Sandbox Code Playgroud)

这种方式$b总是在被调用时更新.