none
powershell - сравнение строк RRS feed

  • Вопрос

  • Не могу понять в чём прокол. Одинаковые строки не равны. Где-то непечатные ?

    <#
    http://blogs.technet.com/b/heyscriptingguy/archive/2011/10/07/use-powershell-to-identify-your-real-network-adapter.aspx
    #>
    $NetAdapter = Get-WmiObject win32_networkadapterconfiguration -Filter 'ipenabled = "true"'
    $NetAdapterName = $NetAdapter.Description
    
    $collection = Get-WmiObject -class Win32_PerfFormattedData_Tcpip_NetworkInterface
    foreach ($element in $collection) {
        write-host "[$($element.Name)]`t[$($NetAdapterName)]" -NoNewline
        if ($($element.Name) -eq $($NetAdapterName)) {
            write-host "`teq" 
        } else {
            write-host "`tne" 
        }
    }
    

    28 декабря 2013 г. 17:11

Ответы

  • Коротко

    $NetAdapterName = ((Get-WmiObject Win32_NetworkAdapterConfiguration -Filter 'ipenabled = "true"').Description -replace '\(R\)','[R]' -replace '/','_').tolower();
    if ( $NetAdapterName.Count -eq 1 ) {
        $NetAdapterCounter = "\Сетевой интерфейс($NetAdapterName)\Отправлено байт/с";
        $BytesSentPerSec = (Get-Counter -Counter $NetAdapterCounter -SampleInterval 1 -MaxSamples 1).CounterSamples.CookedValue;
        $BytesSentPerSec;
    } else {
        Write-Verbose 'Активно несколько сетевых интерфейсов' -verbose
    }
    

    • Помечено в качестве ответа KazunEditor 29 декабря 2013 г. 7:14
    28 декабря 2013 г. 20:06

Все ответы

  • Хм,

    один и тот же символ ® в названии адаптера конвертируется по разному. То в [R], то в (R)

    28 декабря 2013 г. 17:42
  • 1) Проверить,что  $NetAdapterName  не массив.

    2) Приведите пример вывода. Т.к. название сетевой карты может отличаться в данных классах.

    PS >  $NetAdapterName
    Atheros AR8121/AR8113/AR8114 PCI-E Ethernet Controller
    PS >  $collection.Name
    Atheros AR8121_AR8113_AR8114 PCI-E Ethernet Controller
    Можно заметить,что в первом случаи /,а во втором _.

    28 декабря 2013 г. 17:45
    Отвечающий
  • Да, похоже что в разных контекстах разные наборы запрещённых символов. :(

    (Get-Counter -listset 'Сетевой интерфейс').paths
    

    Как же связать Win32_NetworkAdapterConfiguration и Win32_PerfFormattedData_Tcpip_NetworkInterface ?

    В Win32_PerfFormattedData_Tcpip_NetworkInterface ничего кроме имени нет.

    Похоже нужен тупой replace.

    28 декабря 2013 г. 18:17
  • Вроде заработало

    <#
    http://blogs.technet.com/b/heyscriptingguy/archive/2011/10/07/use-powershell-to-identify-your-real-network-adapter.aspx
    
    http://technet.microsoft.com/en-us/library/hh849685.aspx
    Get-Counter -ListSet *
    
    CounterSetName     : Сетевой интерфейс
    MachineName        : .
    CounterSetType     : MultiInstance
    Description        : Объект 'Сетевой интерфейс' содержит счетчики, описывающие скорость, с которой происходит получение и передача пакетов или байтов через сетевое подключение TCP/IP. Кроме того, сюда
                          же входят счетчики различных ошибок для таких подключений.
    Paths              : {\Сетевой интерфейс(*)\Всего байт/с, \Сетевой интерфейс(*)\Пакетов/сек, \Сетевой интерфейс(*)\Получено пакетов/сек, \Сетевой интерфейс(*)\Отправлено пакетов/сек...}
    PathsWithInstances : ...
    Counter            : {\Сетевой интерфейс(*)\Всего байт/с, \Сетевой интерфейс(*)\Пакетов/сек, \Сетевой интерфейс(*)\Получено пакетов/сек, \Сетевой интерфейс(*)\Отправлено пакетов/сек...}
    #>
    cls
    $NetAdapterName = ((Get-WmiObject Win32_NetworkAdapterConfiguration -Filter 'ipenabled = "true"').Description -replace '\(R\)','[R]' -replace '/','_').tolower()
    #$NetAdapterCounter = "\Сетевой интерфейс(*)\Отправлено пакетов/сек"
    $NetAdapterCounter = "\Сетевой интерфейс($NetAdapterName)\Отправлено пакетов/сек"
    Get-Counter -Counter $NetAdapterCounter -Continuous                #-SampleInterval 1 -MaxSamples 1
    


    28 декабря 2013 г. 19:21
  • Коротко

    $NetAdapterName = ((Get-WmiObject Win32_NetworkAdapterConfiguration -Filter 'ipenabled = "true"').Description -replace '\(R\)','[R]' -replace '/','_').tolower();
    if ( $NetAdapterName.Count -eq 1 ) {
        $NetAdapterCounter = "\Сетевой интерфейс($NetAdapterName)\Отправлено байт/с";
        $BytesSentPerSec = (Get-Counter -Counter $NetAdapterCounter -SampleInterval 1 -MaxSamples 1).CounterSamples.CookedValue;
        $BytesSentPerSec;
    } else {
        Write-Verbose 'Активно несколько сетевых интерфейсов' -verbose
    }
    

    • Помечено в качестве ответа KazunEditor 29 декабря 2013 г. 7:14
    28 декабря 2013 г. 20:06