在Start-Job scriptblock中,远程Get-WmiObject调用失败

时间:2011-07-20 03:12:15

标签: powershell jobs powershell-v2.0 hung start-job

好吧,我试图解决这个问题,但是现在是时候问互联网了。我想知道这是一个错误还是什么。

我正在尝试针对多台计算机启动作业,以确定哪些数据库名称驻留在它们上面。

我的计算机1系统设置为:Powershell 2.0,Windows 2k3 Enterprise x64

在Computer1上我可以运行:

Start-Job -scriptblock {gwmi -query "select * from win32_computersystem" -ComputerName "Computer2"}

这项工作将永远陷入“奔跑”状态。但是如果我在shell中的作业脚本块之外运行相同的命令,那就不行了。

我已尝试使用本地管理员(与我的域名)凭据进行此确切设置here,但结果相同。由于某种原因,它对我不起作用。

我已经尝试构建一个不使用gwmi的自定义WMI dotnet对象,但我得到了相同的结果!

-asjob参数?: 这不是解决方案。

  1. 使用此参数时,powershell窗口崩溃在12GB系统上使用的大约2GB内存;虽然我可以毫无问题地使用12GB的启动作业。我不妨以串行方式运行每个查询。

  2. 此外,在Gwmi上使用-Asjob参数时,永远不会回收内存,因此无法继续进一步的作业;即使在运行“remove-job * -force”或“[GC] :: Collect()”之后,powershell.exe的内存消耗仍然保持不变(再次,与start-job不同)。

  3. 由于SQL实例名称不同,因此wmi类名称会有所不同。所以我需要针对多个类运行多个查询命令。虽然技术上可行,但它更复杂,并且考虑到上述内存要求,限制为2GB。我希望有人能够知道如何开始工作。

  4. 所以我唯一没想过的就是我必须指定权限参数?

1 个答案:

答案 0 :(得分:0)

我使用Invoke-Command -asJob:

PS C:\> Invoke-Command -ComputerName "WM2008R2ENT" -ScriptBlock {gwmi -query "select * from win32_computesystem"} -AsJob

Id              Name            State      HasMoreData     Location             Command
--              ----            -----      -----------     --------             -------
1               Job1            Running    True            wm2008r2ent          gwmi -query "select * ...


PS C:\> Get-Job

Id              Name            State      HasMoreData     Location             Command
--              ----            -----      -----------     --------             -------
1               Job1            Completed  True            wm2008r2ent          gwmi -query "select * ...


PS C:\Développements> Receive-Job 1


Domain              : dom.fr
Manufacturer        : VMware, Inc.
Model               : VMware Virtual Platform
Name                : WM2008R2ENT
PrimaryOwnerName    : Utilisateur Windows
TotalPhysicalMemory : 683139072
PSComputerName      : wm2008r2ent

您可以用机器列表替换机器名称。不要尝试在脚本块中使用的CmdLets中再次编写'-Computername。


(编辑)的 我试试你的命令行,它适用于我从客户端Windows 7(64位)到W2K3(32位)

我的客户端不在服务器的域中,我使用域管理员凭据。

您是否从32位Powershell或64位Powershell进行了测试?

您是否尝试在远程计算机上停止WMI服务并清理WMI数据库,当您在WMI服务器上进行过多测试时(例如,使用事件),它有时是合适的。

相关问题