我正在使用powershell。有一个用托管C ++编写的类,它有C#包装器。当我在power shell中创建这个类的实例并稍后再调用它时,Powershell崩溃了。似乎powershell正在删除这些对象。我该怎么做才能阻止PowerShell删除这些对象。
'代码'
[int] $i
{
$i = New-Object int;
$i = 20;
}
Write-Host $i
for( [long] $j = 0; $j -le 1000; $j++ )
{
$newVar = New-Variable "aNewObject$j"
$newVar = $j;
}
if($i -eq $null)
{
Write-Host "I is destroyed"
}
这里的输出是: 20 我被摧毁了
任何想法。
答案 0 :(得分:1)
我认为您对PowerShell范围存在误解。这可以按照您的预期运行:
[int] $i
#{
$i = New-Object int;
$i = 20;
#}
Write-Host "i is $i"
for( [long] $j = 4000; $j -le 5000; $j++ )
{
$newVar = New-Variable "aNewObject$j"
$newVar = $j;
}
if($i -eq $null)
{
Write-Host "I is destroyed"
}
当您在作用域内部({}
内)设置变量时,PowerShell会执行copy-on-write
操作,以便在该作用域内修改变量的副本。这是为了防止您不知道调用您的函数所使用的变量的脚本中的混乱。请记住,PowerShell使用动态范围而不是词法范围。
此外,这一行:
$newVar = New-Variable "aNewObject$j"
除非在New-Variable上使用-PassThru
参数,否则不会为$ newVar分配任何内容。