none
Powershell. If Else. как правильно составить условие? RRS feed

  • Вопрос

  • Доброго времени суток!

    Передо мной встала проблема назначить условие в скрипте. Так как ни разу этого не делал, столкнулся с трудностями, как правильно написать условие.

    Имеется скрипт:

    Clear-Variable -Name network
            Foreach($n in (gwmi Win32_NetworkAdapter -ComputerName $comps -Filter "PNPDeviceID like 'PCI%' or PNPDeviceID like 'USB%' or PNPDeviceID IS Null" | Select MACAddress, Name)){
                $network += $n.Name+" ["+$n.MACAddress+"];"
            }
            Write-Output $network

    При выведении списка сетевых устройств, есть устройство, ошибочно установленное на компьютеры в сети. И мне нужно, при условии фильтра -Filter "PNPDeviceID like 'PCI%' or PNPDeviceID like 'USB%' or PNPDeviceID IS Null", исключить из выведенного списка устройство имя которого "Сетевое подключение Intel(R) PRO/1000 MT" и пустой мак-адрес.

    То есть:

    Если имя= Сетевое подключение Intel(R) PRO/1000 MT и мак-адрес = пустой, то продолжить выполнение скрипта.

    Спасибо!

    29 июля 2014 г. 13:51

Ответы

  • $na = gwmi Win32_NetworkAdapter -ComputerName $comps -Filter "PNPDeviceID like 'PCI%' or PNPDeviceID like 'USB%' or PNPDeviceID IS Null" | Where {
    	!($_.Name -match "Сетевое подключение Intel\(R\) PRO/1000 MT" -and !$_.MACAddress)}
    Foreach($n in $na){
             $n.Name+" ["+$n.MACAddress+"];"
    }

    • Помечено в качестве ответа Pelev1n 30 июля 2014 г. 6:57
    29 июля 2014 г. 14:29
    Отвечающий

Все ответы

  • $na = gwmi Win32_NetworkAdapter -ComputerName $comps -Filter "PNPDeviceID like 'PCI%' or PNPDeviceID like 'USB%' or PNPDeviceID IS Null" | Where {
    	!($_.Name -match "Сетевое подключение Intel\(R\) PRO/1000 MT" -and !$_.MACAddress)}
    Foreach($n in $na){
             $n.Name+" ["+$n.MACAddress+"];"
    }

    • Помечено в качестве ответа Pelev1n 30 июля 2014 г. 6:57
    29 июля 2014 г. 14:29
    Отвечающий
  • Спасибо!

    как мне теперь увидеть какой у меня адаптер с мак-адресом?

    если после моего скрипта выводил такой результат: Сетевое подключение Intel(R) PRO/1000 MT [];Realtek PCIe GBE Family Controller [BC:EE:7B:74:AB:85];

    то сейчас мне выводит: \\WS-3A-03\root\cimv2:Win32_NetworkAdapter.DeviceID="13"

    как мне теперь вывести? 

    30 июля 2014 г. 6:34
  • Write-Output необязательно добавлять, но если он был добавлен,то :

    Foreach($n in $na){
            Write-Output $($n.Name+" ["+$n.MACAddress+"];")
    }


    • Изменено KazunEditor 30 июля 2014 г. 6:38
    30 июля 2014 г. 6:38
    Отвечающий
  • Write-Output необязательно добавлять, но если он был добавлен,то :

    Foreach($n in $na){
            Write-Output $($n.Name+" ["+$n.MACAddress+"];")
    }


    я добавляю Write-Output, чтоб видеть какое значение у переменой, и что будет писаться в БД. 

    после отладки всего скрипта, лишнее будет убираться.

    а так получается, что в данный момент выводится не то, что мне нужно.

    P.S. Вот что получилось:

    Clear-Variable -Name na
            Foreach($n in (gwmi Win32_NetworkAdapter -ComputerName $comps -Filter "PNPDeviceID like 'PCI%' or PNPDeviceID like 'USB%' or PNPDeviceID IS Null" | Where {
    	    !($_.Name -match "Сетевое подключение Intel\(R\) PRO/1000 MT" -and !$_.MACAddress)})){
                $na += $n.Name+" ["+$n.MACAddress+"];"
                }
            Write-Output $na

    Спасибо, за условие!

    • Изменено Pelev1n 30 июля 2014 г. 6:57
    30 июля 2014 г. 6:46