【问题标题】:Powershell GET-ADComputer list and foreach Get WMI_NetworkconfPowershell GET-ADComputer list 和 foreach 获取 WMI_Networkconf
【发布时间】:2019-07-27 04:22:07
【问题描述】:

我只是想从 AD 中取出所有计算机,并希望向我显示 IP、DNS 名称、Mac 地址和描述。

我让 WMI 部分在我的本地计算机上工作,但是一旦我使用 AD 计算机列表尝试它,它就会抛出我自己无法解决的错误。

我知道在我们的内部网络中授予 WMI 读取权限,因为我们也使用 WMI 监控。

Powershell 代码:

$computerlist = Get-ADComputer -Filter * | select Name
  foreach($c in $computerlist)
  {
    try
    {
      gwmi -class "Win32_NetworkAdapterConfiguration" -ComputerName $c |
      select DNSHostName, MACAddress, IPAddress, Description |
      where IPAddress -NotLike "" |
      where Description -NotLike "VMware*"
    }

    catch
    {
      Write-Warning "$c is unreachable!"
    }
  }

【问题讨论】:

  • 您收到的错误信息是什么?
  • [1] 管道不能在行首工作 - 只能在行的 end 内或行尾。 [grin] ///// [2] 看看你的 $C 变量的内容。我怀疑它是一个 AD 对象,而不是简单的计算机名称。您可能需要使用 $C.<PropertyName> ,其中道具名称是您的 $C 对象包含的任何内容。
  • @HAL9256 RCP-Server 不可用 HRESULT: 0x800706BA
  • @Lee_Dailey [1] 是一个“图形”的东西,因为行会很长 [2] 我这样做了,它现在适用于某些名称,但仍然有更多错误然后通过
  • 在您寻求代码帮助时,发布不起作用的代码有点愚蠢。 [grin] PoSh 知道在管道之后继续,因此您可以在此之后换行。 ///// 请显示您正在讨论的代码...现在我不知道您的代码实际上是什么... [sigh ...]

标签: powershell foreach active-directory wmi


【解决方案1】:

我认为问题出在For 循环上。传递名称$c 不是将名称作为实际计算机名称传递,而是作为自定义 PS 对象传递。如果您执行Write-Host,您可以看到这一点:

$computerlist = Get-ADComputer -Filter * | select Name
foreach($c in $computerlist)
{
  Write-Host $c
}

@{Name=C1234}

您只需要引用属性,例如$c.Name 所以你的代码看起来像:

$computerlist = Get-ADComputer -Filter * | select Name
foreach($c in $computerlist)
{
  try
  {
    gwmi -class "Win32_NetworkAdapterConfiguration" -ComputerName $c.Name `
    |select DNSHostName, MACAddress, IPAddress, Description `
    |where IPAddress -NotLike "" `
    |where Description -NotLike "VMware*" `
  }
  catch
  {
    Write-Warning "$c is unreachable!"
  }
}

【讨论】:

  • 感谢信息,现在它适用于某些条目,但遗憾的是并非所有条目都会带来相同的错误
  • 还是一样(HRESULT: 0x800706BA)
【解决方案2】:

试试这个然后报告...

# Use a basic WMI connection check before checking the Network Adapter details
(Get-ADComputer -Filter *).Name | 
foreach {
    If((gwmi -ComputerName $PSItem -Class win32_process))
    {
        try
        {
            gwmi -class 'Win32_NetworkAdapterConfiguration' -ComputerName $PSItem | 
            select DNSHostName, MACAddress, IPAddress, Description |
            where IPAddress -NotLike "" | 
            where Description -NotLike '*VMware*'
        }
        catch
        {
            Write-Warning "When processing $PSItem, some other error occurred!"
        }
    }
    Else
    {
        Write-Warning -Message "WMI connection failed for host $PSItem, thus not reachable"
    }
}

OP 更新

至于……

感谢您的建议,但我仍然收到相同的错误消息 (HRESULT: 0x800706BA)

正如其他人所说,RPC 不是 PowerShell 特定的东西,它是服务/资源级别的东西。

See this Q&A

【讨论】:

  • 感谢您的建议,但我仍然收到相同的错误消息 (HRESULT: 0x800706BA)
  • 据我所知,大多数客户端不运行 WMI 服务,因为我们所有受监控的服务器现在都在完全运行,但不是客户端......因此我需要编写脚本启动在 GPO 之前或通过 GPO 的 WMI 服务。
  • 我让电脑运行 wmi 我发现那些没有响应的是运行 linux 系统的瘦客户端
猜你喜欢
  • 2014-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
  • 2018-09-29
  • 1970-01-01
  • 1970-01-01
  • 2020-08-28
相关资源
最近更新 更多