Powershell GET-ADКомпьютерный список и foreach Получить WMI_Networkconf - PullRequest
0 голосов
/ 05 марта 2019

Я просто пытаюсь вывести все компьютеры из AD и хочу показать мне IP, DNS-имя, Mac-адрес и описание.

Я получил часть WMI, работающую на моем локальном компьютере, но как только я попробую ее с списком компьютеров AD, он выдает ошибки, которые я не могу решить самостоятельно.

Я знаю, что чтение WMI предоставляется в нашей внутренней сети, так как мы также используем WMI Monitoring.

Код 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!"
    }
  }

Ответы [ 2 ]

1 голос
/ 06 марта 2019

Попробуйте и доложите ...

# 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, а уровень обслуживания / ресурсов.

См. Этот Q & A

1 голос
/ 05 марта 2019

Я считаю, что проблема связана с циклом 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!"
  }
}
...