4

いくつかの事実:

と呼ばれる変数にオブジェクトを割り当て、$aそのプロパティの1つが変更されると、変数$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 .>

$posXしかし、最新の状態を維持し、472代わりに常に新しい値()を保存したい場合はどうすればよいですか?302

私の質問:

オブジェクトのプロパティへの参照を変数に格納したいと思います。つまり、オブジェクトのプロパティが変更されるたびに変数を更新する必要があります。これどうやってするの?ありがとう。

4

2 に答える 2

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

このよう$bにして、呼び出されたときに常に更新されます。

于 2012-06-06T08:09:13.607 に答える
3

関数を作ってみませんか?

function posX(){ $bochsWindow.Position.X }

そして、それをとして使用しposXます。別の方法はスクリプトブロックです。

それ以外は、これを行うための簡単な方法はわかりません。

于 2012-06-06T08:21:40.227 に答える