【问题标题】:Invoke-Command returning data调用命令返回数据
【发布时间】:2014-05-14 20:33:45
【问题描述】:

我正在编写一个脚本来查询远程服务器的配置信息并将数据返回到 gridview 输出。我遇到的问题是返回数据的格式。

如果我这样做......

((Get-CimInstance -ClassName Win32_Processor).NumberOfLogicalProcessors | Measure-Object).Count
((Get-CimInstance -ClassName Win32_PhysicalMemory).Capacity | Measure-Object -Sum).Sum /1GB

在 ps1 中并使用 Invoke-Command 在远程服务器上运行它,我得到一个只有这样数字的数组。

2
4

如何有效地从多台机器收集这些信息以及上下文?我尝试了远程工作,但我一次不能真正运行超过 2 个工作。我想像这样将工作分散到所有目标服务器。

【问题讨论】:

    标签: powershell remoting invoke-command


    【解决方案1】:

    这些值实际上具有计算机名称,例如:

    30# $r = Invoke-Command ...
    31# $r[0]
    4
    32# $r[0].PSComputerName
    hillr2
    

    默认情况下,PowerShell 只是不显示数字的该信息。你可以这样做:

    32# icm hillr2 -ScriptBlock {
    >>> $NumLogCpu = (Get-CimInstance Win32_Processor).NumberOfLogicalProcessors
    >>> $MemSize = ((Get-CimInstance Win32_PhysicalMemory).Capacity | Measure-Object -Sum).Sum /1GB
    >>> [pscustomobject]@{NumLogCpu=$NumLogCpu;MemSize=$MemSize}
    >>> }
    
    
    NumLogCpu      : 4
    MemSize        : 8.00390625
    PSComputerName : hillr2
    RunspaceId     : fb03fedd-2771-46cf-916a-f31ec7c8298b
    

    这需要 PowerShell v3 或更高版本的 [pscustomobject] 类型加速器。

    【讨论】:

    • 好吧,我没想到。我尝试了 psobject 路由,但我遇到的问题是从脚本中获取信息(psobject)。所以我使用 $x = Invoke-Command .\script.ps1 运行脚本,我可以使用 $x(“2”和“4”的数组)从查询中恢复数据,但我似乎无法获得 psobject自己回来了。我需要退货吗?
    • 我很想将 [pscustomobject]@{ComputerName=$CompNm;NumLogCpu=$NumLogCpu;MemSize=$MemSize} 作为一个对象返回,这样我就可以将它们“堆叠”起来用于 gridview。跨度>
    • 没关系,我刚刚知道了。我需要为 pscustomobject 分配一个变量并在脚本末尾重复它以将其返回为 $x。
    猜你喜欢
    • 2016-07-02
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    相关资源
    最近更新 更多