2

好吧,我试图弄清楚这一点,但认为是时候询问互联网了。我想知道这是一个错误还是什么。

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

我的电脑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 参数?:这不是解决方案。

  1. 使用此参数时,powershell 窗口在 12GB 系统上使用大约 2GB 内存时崩溃;而我可以毫无问题地使用 start-job 到 12GB。我不妨以串行方式运行每个查询。

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

  3. 由于 SQL 实例名称不同,wmi 类名称也不同。所以我需要对多个类运行多个查询命令。虽然在技术上是可行的,但它更复杂,并且考虑到上述内存要求,限制为 2gb。我希望有人会知道如何让开始工作像它应该的那样工作。

所以我唯一没有尝试过的可能是我必须指定权限参数?

4

1 回答 1

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 服务器上进行过多测试(例如事件)时,它有时是合适的。

于 2011-07-20T13:59:28.767 回答