好吧,我试图弄清楚这一点,但认为是时候询问互联网了。我想知道这是一个错误还是什么。
我正在尝试针对多台计算机启动作业,以确定哪些数据库名称驻留在它们上。
我的电脑1 系统设置为:Powershell 2.0、Windows 2k3 Enterprise x64
在 Computer1 上,我可以运行:
Start-Job -scriptblock {gwmi -query "select * from win32_computersystem" -ComputerName "Computer2"}
并且工作将永远停留在“运行”状态。但如果我在 shell 的作业脚本块之外运行相同的命令,则不会。
我在这里使用本地管理员(与我的域)凭据尝试了这种精确的设置,但结果相同。由于某种原因,它对我不起作用。
我尝试构建一个不使用 gwmi 的自定义 WMI dotnet 对象,但我得到了相同的结果!
-asjob 参数?:这不是解决方案。
使用此参数时,powershell 窗口在 12GB 系统上使用大约 2GB 内存时崩溃;而我可以毫无问题地使用 start-job 到 12GB。我不妨以串行方式运行每个查询。
此外,在 Gwmi 上使用 -Asjob 参数时永远不会回收内存,因此无法继续执行其他作业;即使在运行“remove-job * -force”或“[GC]::Collect()”之后,powershell.exe 的内存消耗仍然保持不变(再次与 start-job 不同)。
由于 SQL 实例名称不同,wmi 类名称也不同。所以我需要对多个类运行多个查询命令。虽然在技术上是可行的,但它更复杂,并且考虑到上述内存要求,限制为 2gb。我希望有人会知道如何让开始工作像它应该的那样工作。
所以我唯一没有尝试过的可能是我必须指定权限参数?