【发布时间】:2018-09-22 07:15:17
【问题描述】:
与Terminate part of powershell script and continue相关。
与Powershell Job Always Shows Complete 部分相关。
我的脚本在本地运行并访问远程 PC 的注册表配置单元。我需要将注册表项的值写入$RegHive 变量。我想监控它作为一项工作,以防某些 PC 死机,我可以终止命令并转移到另一台 PC。
我的原始代码是:
$global:RegHive = $null
$job = Start-Job -ScriptBlock {
$RegHive = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("SomeKeyName", "SomePCName")
}
但是无论我做什么,变量$RegHive都是空的。
如果我这样做 $RegHive = (Get-Job | Receive-Job) 一些值被分配给 $RegHive 一方面看起来就像我会在没有作业/脚本块的情况下正常运行它,即:
$RegHive = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("SomeKeyName", "SomePCName")
甚至有相同的$RegHive.SubKeyCount
但是“正常”的有$RegHive.GetSubKeyName() 方法,而来自工作的没有。
如何避免使用Receive-Job 分配变量并直接在作为作业运行的脚本块内进行分配?
简单来说:
$job = Start-Job -ScriptBlock {$a = 1 + 2}
如果没有$a = (Get-job | Receive-job),如何让$a等于3?
【问题讨论】:
-
作业在单独的进程中执行。活动对象不能通过进程边界。
-
@PetSerAl,那这不可能吗?没有解决方法?比如可能将指针作为参数/全局变量/调用写入全局变量的函数传递(我尝试了最后两个,但无法使其工作)?
-
是的。此外,我不明白为什么你甚至想要传回配置单元对象而不是完成工作中的工作。
-
@AnsgarWiechers 重点是:我需要密钥本身的值(称为
$RegHive)以供以后使用。否则我将不得不在这个作业中添加整个脚本并在那里处理键值。如果这有意义的话,我想...... -
真正的问题是,在调用注册表值这样的快速操作中,为什么需要为它分配工作呢? - nvm 你说你有 getsubkeyname() 的问题
标签: powershell powershell-jobs