Powershell - 使用 ScriptProperty 删除 "own" 对象

Powershell - removing "own" object using ScriptProperty

Powershell V3+:
我正在编写一个模块,提供适合交互使用的各种 Cmdlet。我试图实现的是,变量(对象)在没有用户使用 remove-variable 的情况下被破坏。

示例:

$object = open-object -someparam
$object # returns something
close-object -reference $object
$object # is not defined anymore - similiar to remove-variable

我无法使上述方法正常工作,下面的替代方法也失败了。

$x = New-Object -TypeName PSCustomObject
$x | Add-Member -type NoteProperty -Name Justsomedata -Value Nomeaning
$x | Add-Member -type ScriptMethod -Name killme -Value { $this = $null }
$x
$x.killme()
$x # :-(

有什么建议吗?我想防止用户运行空间中的变量不再可用。

最好以明确表示不应再使用的方式更改对象的状态。例如,您可以将 属性 命名为 IsValidIsOpen,然后如果他们尝试使用它,您可以抛出异常。最好避免为用户实际删除变量,以防他们想要引用该对象,即使它不再有效。

但是,如果你真的想这样做,你可以试试这个:

$references = Get-Variable | Where-Object { $this -eq $_.Value}
$references | ForEach-Object { Remove-Variable $_.Name }