Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 在启动作业脚本块内时,远程获取WMIOObject调用失败_Powershell_Jobs_Powershell 2.0_Hung_Start Job - Fatal编程技术网

Powershell 在启动作业脚本块内时,远程获取WMIOObject调用失败

Powershell 在启动作业脚本块内时,远程获取WMIOObject调用失败,powershell,jobs,powershell-2.0,hung,start-job,Powershell,Jobs,Powershell 2.0,Hung,Start Job,好吧,我试着想办法解决这个问题,但我想是时候问一下互联网了。我想知道这是一个bug还是什么 我正在尝试对多台计算机启动作业,以确定它们上驻留的数据库名称 我的Computer1系统设置为:Powershell 2.0、Windows 2k3 Enterprise x64 在Computer1上,我可以运行: Start-Job -scriptblock {gwmi -query "select * from win32_computersystem" -ComputerName "Compute

好吧,我试着想办法解决这个问题,但我想是时候问一下互联网了。我想知道这是一个bug还是什么

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

我的Computer1系统设置为:Powershell 2.0、Windows 2k3 Enterprise x64

在Computer1上,我可以运行:

Start-Job -scriptblock {gwmi -query "select * from win32_computersystem" -ComputerName "Computer2"}
工作将永远停留在“运行”状态。但如果在shell中的作业脚本块之外运行相同的命令,则不会

我用本地管理员(vs我的域)凭据尝试了这个精确的设置,但结果相同。因为某种原因,它对我不起作用

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

-asjob参数?: 这不是一个解决办法

  • 使用此参数时,powershell窗口在12GB系统上使用约2GB内存时崩溃;而我可以使用start job一直到12GB,没有任何问题。我不妨以串行方式运行每个查询

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

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


  • 所以我唯一没有尝试过的是,也许我必须指定authority参数

    我为此使用Invoke命令-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
    
    您可以用计算机列表替换计算机名称。不要再次尝试在脚本块中使用的cmdlet中编写“-Computername”


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

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

    您是否使用32位Powershell或64位Powershell进行了测试


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

    我使用Invoke命令-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
    
    您可以用计算机列表替换计算机名称。不要再次尝试在脚本块中使用的cmdlet中编写“-Computername”


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

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

    您是否使用32位Powershell或64位Powershell进行了测试


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

    启动作业
    用于在本地运行后台作业。我猜您在上面的代码示例中是指(并且实际使用)
    Invoke命令
    ?谢谢您的评论。不,我不是说调用命令。我正在扫描的大多数计算机没有启用WinRM,但它们确实启用了WMI。我想对远程计算机执行WMI查询。我尝试了您的示例,作业成功完成。
    Start job
    用于在本地运行后台作业。我猜您在上面的代码示例中是指(并且实际使用)
    Invoke命令
    ?谢谢您的评论。不,我不是说调用命令。我正在扫描的大多数计算机没有启用WinRM,但它们确实启用了WMI。我想对远程计算机执行WMI查询。我尝试了您的示例,作业成功完成。感谢您的评论。我正在扫描的大多数计算机没有启用WinRM,但它们确实启用了WMI。我想对远程计算机执行WMI查询。我在2008 x64系统上测试了上述代码,它正常工作。不幸的是,我真的需要在我的2003 x64机箱上运行:(您可以在其上安装Powershell V2软件包,您将获得WinRM服务。感谢您的建议,但我们讨论的是1300多台计算机可在其上安装该服务。除非其他人能够提出修复建议,否则我将努力寻找一个可供暂时使用的2008 box。我将在我的上下文中测试您的脚本行。)(客户端:Windows Seven 64位,服务器W2K3 R2 32位)它是有效的。远程计算机上的WMI服务可能会遇到一些问题,我用这种方式编辑我的答案。谢谢你的评论。我正在扫描的大多数计算机没有启用WinRM,但它们确实启用了WMI。我想对远程计算机执行WMI查询。我在2008 x64系统上测试了上述代码,代码正常工作。不,抱歉nately,我真的需要在我的2003 x64机箱上运行:(您可以在其上安装Powershell V2软件包,您将获得WinRM服务。感谢您的建议,但我们讨论的是1300多台计算机可在其上安装该服务。除非其他人能够提出修复建议,否则我将努力寻找一个可供暂时使用的2008 box。我将在我的上下文中测试您的脚本行。)(客户端:Windows Seven 64位,服务器W2K3 R2 32位),它可以工作。远程计算机上的WMI服务可能有问题,我用这种方式编辑我的答案。