在多台机器上查询 NetAdapter

Query the NetAdapter on Multiple Machines

#列出我们将从中查询的机器

$Machines = Get-ADComputer -Filter * -SearchBase 'OU=Laptops,OU=Win10Modern,OU=LN,OU=Workstations,DC=cooley,DC=com' | Select-Object Name


#Getting the Network Adapter version for Wi-Fi Adapter

ForEach ($Machine in $Machines) {

 Get-NetAdapter | Select-Object Name,InterfaceDescription,DriverVersion,DriverDate,DriverProvider
 
} 

我认为您不能使用 Get-NetAdapter 连接到远程计算机。

但是您可以使用 Get-WmiObject Win32_NetworkAdapter -ComputerName .

像这样:

ForEach ($Machine in $Machines) {

    Get-WmiObject -Class Win32_NetworkAdapter -Filter "NetConnectionStatus = 2" -ComputerName $Machine
 
} 

您需要熟悉 Win32_NetworkAdapter class 的属性。您可以通过 运行 此命令查看所有属性:

Get-WmiObject -Class Win32_NetworkAdapter -ComputerName "Localhost" | fl * -Force

或者您可以使用此命令查看所有可用的属性(和方法)。

Get-WmiObject -Class Win32_NetworkAdapter -ComputerName "Localhost" | Get-Member

大多数电脑都会有不止一张网卡(有些是隐藏的),你必须过滤掉不相关的网卡。

目前,您的代码循环遍历变量 $Machines 中的 个对象 ,其中每个对象都有一个名为 Name 的 属性。

为了仅获取名称 values,请使用 Select-Object -ExpandProperty Name 或获取这样的名称数组:

# get an array of computernames
$Machines = (Get-ADComputer -Filter * -SearchBase 'OU=Laptops,OU=Win10Modern,OU=LN,OU=Workstations,DC=cooley,DC=com').Name

接下来遍历这些计算机名称并让每台计算机 运行 Get-NetAdapter cmdlet:

# capture the output(s) in variable $result
$result = foreach ($Machine in $Machines) {
    if (Test-Connection -ComputerName $Machine -Count 1 -Quiet) {
        Invoke-Command -ComputerName $Machine -ScriptBlock {
            Get-NetAdapter | Select-Object SystemName,Name,InterfaceDescription,
                             DriverVersion,DriverDate,DriverProvider,Status,AdminStatus
        }
    }
    else {
        Write-Warning "Computer '$Machine' does not respond"
    }
} 

# output on screen
$result

# or to GridView
$result | Out-GridView -Title 'NetAdapterInfo'

# or to CSV file
$result | Export-Csv -Path 'X:\NetAdapterInfo.csv' -NoTypeInformation

AdminStatus是一个设置(启用-->'up';禁用-->'down')
Status 是运行状态(连接 --> 'up';断开连接 --> 'down')