【问题标题】:Powershell Multipart WMI query outputPowershell Multipart WMI 查询输出
【发布时间】:2017-01-04 08:09:36
【问题描述】:

使用此代码时:

$Prodservers = Get-ADComputer -Filter {OperatingSystem -like '*Server*'} -SearchScope Subtree -SearchBase $ProdSB -Server $DCprod -Credential $ProdCred -ErrorAction SilentlyContinue |
               select -Expand DnsHostname 
foreach ($P in $Prodservers) {
    [PSCustomObject]@{
        Hostname = $P
        'Support team' = (Invoke-Command -ComputerName $P -ScriptBlock {$env:supportteam} -Credential $ProdCred) 
        'Local Admins' = (Invoke-Command -ComputerName $P -ScriptBlock {$ADSIComputer = [ADSI]('WinNT://localhost,computer');$lgroup = $ADSIComputer.psbase.children.find('Administrators',  'Group');$lgroup.psbase.invoke('members') | % {$_.GetType().InvokeMember('Name',  'GetProperty',  $null,  $_, $null)}}  -Credential $ProdCred)
        'Host Reachable' = [bool](Invoke-Command -ComputerName $P -ScriptBlock {1} -Credential $ProdCred)
    }
}

这可行,但是本地管理员组中超过两个成员的组成员返回类似于此:

{管理员、域管理员、产品服务器管理员...

我将如何扩展输出以显示完整的成员资格? 同样在用于仅选择与组名 x 或 y 匹配或返回 True 的某些组的指针之后是组 x 存在等。

【问题讨论】:

    标签: powershell output wmi


    【解决方案1】:

    您可能会遇到输出显示格式问题,其中列数据超出了 PowerShell 中表格格式的可显示宽度。

    您可以尝试使用Format-List cmdlet 在列表中显示内容,而不是查看具有多个成员的本地管理员组是否正确显示。查看上面的链接以了解它的帮助,但使用它的基本示例是:

    Get-Service | Format-List
    

    至于您的过滤问题,您似乎正在使用反射来调用收集该数据的方法,因此使用 PS cmdlet 来提供帮助会更加困难,因此我建议您像现在一样获取该数据,但是单独进行,放入一个临时变量中,然后在那里过滤数据,选择您想要的特定组,使用类似这样的方法来匹配您的组名,并在 if 语句中,将相关数据放入另一个变量中,然后您将其用于你的最终输出。

    if ($item -match "groupNameX") { #Then... }
    

    【讨论】:

    • 谢谢 Shogan,我怀疑是这样的。试图弄清楚我如何为它做等价的 expandproperty。
    【解决方案2】:

    终于解决了。

    遇到this 答案。

    首先,找到一个将成员资格作为 PSObject 属性输出的脚本块:

                    $SB = {
                    $members = net localgroup administrators | 
                    where {$_ -AND $_ -notmatch "command completed successfully"} | 
                    select -skip 4
                    New-Object PSObject -Property @{
                    Members=$members
                    }
                }
    

    然后修改了本地管理员一栏:

    'Local Admins' = $admins.Members -join ','
    

    输出仍然被截断,但是现在而不是 export-CSV 将列内容显示为 System.Object[] 它现在显示完整的输出,并在 -join 中指定了分隔符。

    【讨论】:

      猜你喜欢
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-07
      相关资源
      最近更新 更多