Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
163 / 50 / 5
Регистрация: 03.06.2020
Сообщений: 580

Win32_PingStatus есть варианта для списка компьютеров? Для определения Resolved

01.06.2021, 15:03. Показов 3726. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем ДОБРОГО!
Суть проблемы. Необходима таблица ( из текстового даже не пытаюсь, слишком накладно ), конечно с переводом в excell + фильтр с заголовком:
Имя Компьютера Операционная система IPV4Address ProtocolAddressResolved Обновление порядкого номера Ориент.последняя дата логона
Взял готовый для скана, который отлично работает, но с другим вложением в {}
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Import-module ActiveDirectory
 
Workflow PingStatus
{
 
$Computers = (Get-ADComputer -Filter *).Name | Sort-Object #  -Descending All Hosts Servers Computers On increasing По нарастающей в имени компьютера
$NowTime = (Get-Date -uFormat "%d-%m-%y@%H-%M-%S")
 
$PathOut = "F:\Publ\....\PingStatus-$NowTime.csv" # Output Result
ForEach -Parallel ($Computer in $Computers)     
{
InlineScript{
$Result = GWMI Win32_PingStatus -Filter "Address='$Computer' AND ResolveAddressNames='true'" | Select-Object IPV4Address,ProtocolAddressResolved
$Os = Get-ADComputer -Filter '$Computer' -Properties *
$output = [ordered]@{
            "Имя Компьютера" = $Computer
            "Операционная система" = $Os.OperatingSystem
            "IPV4Address" = $Result.IPV4Address            
            "ProtocolAddressResolved" = $Result.IPV4Address.ProtocolAddressResolved
            "Обновление порядкого номера" = $Os.uSNCreated                                
            "Ориент.последняя дата логона" = $Os.LastLogonDate                                
            }
                $report = New-Object -TypeName PSObject -Property $output
    Write-Output $report 
        $report | EPCSV -Path $PathOut -Encoding "UTF8" -noTypeInformation -Delimiter ";" -Append  
}
}
}
PingStatus
в CSV:
Операционная система IPV4Address ProtocolAddressResolved Обновление порядкого номера Ориент.последняя дата логона
169.254.147.210
169.254.147.210
169.254.147.210
........................................ ...
результат в консоле:
Имя Компьютера :
Операционная система :
IPV4Address : 169.254.147.210
ProtocolAddressResolved :
Обновление порядкого номера :
Ориент.последняя дата логона :
PSComputerName : localhost
PSSourceJobInstanceId : 75d9af1a-f650-4c47-82ca-930d8edaab29

Get-ADComputer : Переменная: "Computer" обнаружена в выражении: $Computer не имеет определения.
At PingStatus:13 char:13
+
+ CategoryInfo : InvalidArgument: ( [Get-ADComputer], ArgumentException
+ FullyQualifiedErrorId : Переменная: "Computer" обнаружена в выражении: $Computer не имеет определения.,Microsoft.ActiveDirectory.M anagement.Commands.GetADComputer
+ PSComputerName : [localhost]

Имя Компьютера :
Операционная система :
IPV4Address : 169.254.147.210
ProtocolAddressResolved :
Обновление порядкого номера :
Ориент.последняя дата логона :
PSComputerName : localhost
PSSourceJobInstanceId : 75d9af1a-f650-4c47-82ca-930d8edaab29


Ethernet adapter VirtualBox Host-Only Network:

DNS-суффикс подключения . . . . . :
Описание. . . . . . . . . . . . . : VirtualBox Host-Only Ethernet Adapter
Физический адрес. . . . . . . . . : 0A-00-27-00-00-0E
DHCP включен. . . . . . . . . . . : Да
Автонастройка включена. . . . . . : Да
Автонастройка IPv4-адреса . . . . : 169.254.147.210(Основной)
упорно берет локальный адрес VB и никого больше.
По отдельности все команды отрабатывают. Стартуем модуль AD. Т.е. если создать переменную
$Computers = (Get-ADComputer -Filter *).Name
Есть список после вывода $Computers
GWMI Win32_PingStatus -Filter "Address='NameNetBIOS' AND ResolveAddressNames='true'" | Select-Object IPV4Address,ProtocolAddressResolved
Типа операционки надо брать из AD.
Как запустить список, если нет GWMI -Class ... -ComputerName 'NameNetBIOS', а есть лишь -Filter Address='$Computer', что похоже не одно и тоже.
Необходима проверка в сети для разрешений ResolvedDNS.
Или здесь надо использовать через функцию из https://powershell.one/wmi/roo... pingstatus
PowerShell
1
2
$iprange = 1..200 | ForEach-Object { "192.168.8.$_" }
Test-OnlineFast -ComputerName $iprange
Но здесь не будет информации о Resolved. Смысл, надо уточнить, для каких хостов прошли в домене все разрешения от DNS. Есть подозрения, для некоторых не проходят. Примерно 30 %. Почему будет второй задачей. Пока надо их найти.
Почему не берет переменную $Computer?
На хостах, где есть подозрения на отсутствие разрешения от DNS все команды теста домена проходят.
NLTEST /DCLIST:<NameDomain>
NLTEST /DNSGETDC:<NameDomain>
NLTEST /DSGETDC:<NameDomain>
с указанием всех DC, DNS
Если комп. вывести и ввести в домен, ProtocolAddressResolved чудесным образом получает нужное значение, а не пустое поле.

Добавлено через 1 час 5 минут
апик:
не изменяет замена:
$Os = Get-ADComputer -Filter '$Computer' -Properties *
на
$Os = Get-ADComputer -Identity '$Computer' -Properties *
Да ещё. Проблема вылезла из-за отсутствия доступа по управлению компьютером, RDP, удаленный реестр на проблемных компьютерах.
Не исключено из-за невозможности запустить службы MpsSvc ( MS брандмауэр ), eventlog ( журнал событий, где можно было б посмотреть причину ). Вирус вне подозрения. В сети работает КES10, все обновления и лог вирусов в порядке. Т.е. на указанных компах их нет и не было.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.06.2021, 15:03
Ответы с готовыми решениями:

Вывод картинки для каждого варианта списка комбобокса
Вывод картинки для каждого варианта списка комбобокса при выборе фирмы нужно что б менялось лого. подскажите или направьте где...

Создать аналог WMI Win32_PingStatus для удаленных хостов
Всем привет! Прошу помощи гуру VBS. Для проверки доступности с удаленного компа некоторого хоста, обычно используется WMI класс...

Какой процессор выбрать для игр (есть 3 варианта)
Ребят столкнулся с такой проблемкой. Не знаю какой процессор выбрать ДЛЯ ИГР. Есть 3 варианта. 1)CPU AMD FX-8120 BOX Black Edition...

25
163 / 50 / 5
Регистрация: 03.06.2020
Сообщений: 580
02.06.2021, 14:07  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Wizard333 Посмотреть сообщение
Reset-ComputerMachinePassword
локально на проблемном всё прошло, после ребута без эффекта
Удаленно ответ вида: Operation failed with the following exception: Сервер не работоспособен.
Точка в конце прямо порадовала.
Но направление интересное и наверное правильное. Для компа требуется какой-то сброс. Не понятно чего и где. Скорее на в ADUC и где-то на домен-контроллере. На самом компе пока кроме NETDOM.exe не знаю что сделать. Но это равносильно выводу и вводу в домен. Как и обновление SID. Пробовал туулзой от Руссиновича, но просто пришлось по новой вводить в домен. С заменой профиля. Т.к. не сделал сброс в ADUC.
0
163 / 50 / 5
Регистрация: 03.06.2020
Сообщений: 580
02.07.2021, 13:16  [ТС]
Пожалуй тему можно перевести в разряд [РЕШЕНО]. Во всяком случае на этом этапе. Ну или не ожидать продолжение сериала от перцев выше "Ну на @#$ ..."
Конечно скрипт начала топика не тянет ни что. Как по выхлопу, так и работе.
Напомню, что бы не листать много ( даже одну ) страниц.
Задача найти сетевые имена компов, которые включаются за выбираемый интервал, но не имеют управление и не пингуются. Хотя можно ограничить вкл и пинг. Но также актуально когда была сессия и когда завершается аренда DHCP.
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
Import-module ActiveDirectory
 
$Path = $env:Temp
$NowTime = (Get-Date -uFormat "%d-%m-%y@%H-%M-%S")
$DHCP = GC -Path D:\Script\ListDHCP.txt # Скопы DHCP в текстовом файле
 
ForEach ($DHCP in $DHCP)
        {
netsh DHCP Server 172.31.240.201 Scope $DHCP show clients 1 | Out-File -filePath $Path\_dc\Vlan.txt -Encoding "UTF8" -Append
(GC -Path $Path\_dc\Vlan.txt | Sort-Object | Group-Object | % {$_.group | Select -First 1}) | Set-Content -Path $Path\_dc\VlanRezult.txt -Force
        }
                    Workflow PingStatus
{
   param([string[]]$Computers)
 
ForEach -Parallel -ThrottleLimit 50 ($Computer in $Computers)
 {  
  $Path = $env:Temp
 
      Sequence {
 
$LastLogDHCP = GC -Path "$Path\_dc\VlanRezult.txt" | Select-String -SimpleMatch $Computer -CaseSensitive -Context 0
$Result = (GWMI Win32_PingStatus -Filter "Address='$Computer' AND ResolveAddressNames='true'")
$Os = (Get-ADComputer -Identity $Computer -Properties *)
$Ping = ping $Computer -n 1 -l 1 | Select-String "потерь"
                            
                            $output = [ordered]@{
    "Имя Компьютера" = $Computer
    "Операционная система" = $Os.OperatingSystem
    "Доступ" = $Ping
    "IPV4Address" = $Result.IPV4Address            
    "ProtocolAddressResolved" = $Result.ProtocolAddressResolved
    "Аренда сессии по DHCP" = $LastLogDHCP                                
    "Обновление порядкого номера" = $Os.uSNCreated                                
    "Ориент.последняя дата логона" = $Os.LastLogonDate
    "Отсутствие доступа" = $Result.PrimaryAddressResolutionStatus                                
                                                                        }
 
                $report = New-Object -TypeName PSObject -Property $output
    Write-Output $report 
        $report | EPCSV -Path "$Path\_dc\PingTestStatusWorkFlowDhcp-Srv01.csv" -Encoding "UTF8" -noTypeInformation -Delimiter ";" -Append  
 
                     } 
 }
 
}
$Computers = (Get-ADComputer -Filter *).Name | Sort-Object #  -Descending All Hosts Servers Computers On increasing По нарастающей в имени компьютера
PingStatus -Computer $Computers
 
                        RNI -Path "$Path\_dc\PingTestStatusWorkFlowDhcp-Srv01.csv" -NewName "$Path\_dc\PingTestStatusWorkFlowDhcp-Srv01-$NowTime.csv" -Force    
CP -Path "$Path\_dc\*.csv" -Destination "\\ServerScan\ScanOut" -Force
                                RI -Path $Path\_dc\*.* -Force
Время отработки около часа. Загрузка по всем ядрам. Определить аренду DHCP вполне актуально. Хотя есть чуть лишнее. Например, в ячейке Аренда сессии по DHCP
10.0.102.52 - 255.255.255.0 - 08-60-6e-76-7a-a5 -15.07.2021 19:26:32 -D- Comp5416.Domain.MY.com
Надо б и достаточно -15.07.2021 19:26:32
Но макросом VBA вполне можно сделать нужную таблицу.
Чуть разочеровало, можно запускать лишь на рабочей станции. Т.к. лишь здесь команда netsh имеет опцию
C:\Users\....>netsh DHCP /?
server [\\имя_сервера/IP_адрес] - Переключение на контекст указанного сервера. Отсутствие имени означает локальный сервер.
Пробовал вариант считывания \\ServerDHCP\C$\Windows\System32\dhcp\Dh cpSrvLog-<LastDay>.log последнего и в нем по имени хоста в строку. Но там также много мусора и также не лучший вариант, чем просто по netsh на рабочей станции.
Вариант на Ps 7.1 либо хуже ( хотя б из-за кодировки ) либо не имеет значительное уменьшение времени отработки скрипта. На 650 хостов отрабатывает около часа. Приемлемо. Можно запускать три раза за смену.
Вид таблицы
Имя КомпьютераОперационная системаДоступIPV4AddressProtocolAddressResolvedАренда сессии по DHCPОбновление порядкого номераОриент.последняя дата логонаОтсутствие доступа
Если значение Отсутствие доступа = 0, Ориент.последняя дата логона = дата два-три дня назад, Аренда сессии по DHCP = -14 дней от настоящей, Доступ = (100% потерь) - значит наши клиенты.
0
1658 / 273 / 66
Регистрация: 03.06.2020
Сообщений: 694
02.07.2021, 13:59
Цитата Сообщение от Segera Посмотреть сообщение
хотя б из-за кодировки
Что с ней не так? Везде UTF8.
В чем разница?

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 $ pwsh -c [console]::OutputEncoding
 
Preamble          :
BodyName          : utf-8
EncodingName      : Unicode (UTF-8)
HeaderName        : utf-8
WebName           : utf-8
WindowsCodePage   : 1200
IsBrowserDisplay  : True
IsBrowserSave     : True
IsMailNewsDisplay : True
IsMailNewsSave    : True
IsSingleByte      : False
EncoderFallback   : System.Text.EncoderReplacementFallback
DecoderFallback   : System.Text.DecoderReplacementFallback
IsReadOnly        : True
CodePage          : 65001
 
 $ powershell -c [console]::OutputEncoding
 
BodyName          : utf-8
EncodingName      : Unicode (UTF-8)
HeaderName        : utf-8
WebName           : utf-8
WindowsCodePage   : 1200
IsBrowserDisplay  : True
IsBrowserSave     : True
IsMailNewsDisplay : True
IsMailNewsSave    : True
IsSingleByte      : False
EncoderFallback   : System.Text.EncoderReplacementFallback
DecoderFallback   : System.Text.DecoderReplacementFallback
IsReadOnly        : True
CodePage          : 65001
 
 $ cmd /c chcp
Active code page: 65001
0
163 / 50 / 5
Регистрация: 03.06.2020
Сообщений: 580
02.07.2021, 14:44  [ТС]
Цитата Сообщение от lesser Посмотреть сообщение
Что с ней не так? Везде UTF8.
у вас отличные хелперы и таблицы. В реальности имеем чуть другое, если вывод локализованной версии ОС и запуск на локализованной версии. Типичный пример:
Ещё в PS 7.1 не пошла кодировка. Если заглавия перевести в LAT - проблема решена. Если на CYR, ответ:
��� ���������� : Comp0430
������������ ������� : Windows 7 Профессиональная
IPV4Address :
ProtocolAddressResolved :
������ :
���������� ��������� ������ : 33833
������.��������� ���� ������ : 17.06.2021 6:32:17
���������� ������� :

��� ���������� : Comp0807
������������ ������� : Windows 7 Профессиональная
IPV4Address :
ProtocolAddressResolved :
������ :
���������� ��������� ������ : 33678
������.��������� ���� ������ : 21.06.2021 9:19:15
���������� �������
Пробовал C1251, OEM, UTF8.
Но в таблице хелпера всё прекрасно. Но это мелочь в сравнении с остальным.
О чем может быть разговор, если в нативной 2019 по $PsVersionTable имеем:
PsVersion 5.1.17763.316
Может в ново-испеченной Windserv2022 уже по-другому. Пока нет желания работать впереди паровоза. Да и едва ли купят в ближайшие пять лет выше 2016-19.
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
02.07.2021, 16:28
Цитата Сообщение от Segera Посмотреть сообщение
Пробовал C1251, OEM, UTF8
точно?
файл с кириллицей, сохраненный в UTF8 прекрасно выводится кодом, также сохраненным в UTF8 в PS7.1.3
Кликните здесь для просмотра всего текста

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$xlsx  = 'C:\excel.xlsx'
$sheet = 'Лист1'
 
$oExcel = New-Object -com 'Excel.Application'
$wBook  = $oExcel.Workbooks.Open($xlsx)
$wSheet = $wBook.Sheets.Item($sheet)
 
$maxRows    = ($wSheet.UsedRange.Rows).count
$maxColumns = ($wSheet.UsedRange.Columns).count
 
$aList = @()
for ($r=2; $r -le $maxRows; $r++) {
  $oList = [PSCustomObject][Ordered]@{}
  for ($c=1; $c -le $maxColumns; $c++) {
    $oList|Add-Member -MemberType NoteProperty `
      -Name  $wSheet.UsedRange.Cells(1,$c).Text `
      -Value $wSheet.UsedRange.Cells($r,$c).Text
  }
  $aList += $oList
}
$aList
 
$oExcel.Quit()
if (!$oExcel.Quitting) {Stop-Process -Name EXCEL}
 
'';'======';''
 
$txt  = 'C:\txt.txt'
gc $txt

Файлы с кириллицей.7z
0
163 / 50 / 5
Регистрация: 03.06.2020
Сообщений: 580
02.07.2021, 19:23  [ТС]
Цитата Сообщение от alpap Посмотреть сообщение
файл с кириллицей
у меня ещё один повод порадоваться. У кого-то всё ОК с кириллицей в повере 7.1. Но учитывая практически идентичное время выполнения скрипта ( конечно в 7.1 с ForEach-Object ), интерес к семерке не большой.
Если вернуться к этой теме, хотелось бы допилить или попробовать как сделать блок в функции и реально ли это вложить в Sequence { ... }
$LastLogDHCP = GC -Path "$Path\_dc\VlanRezult.txt" | Select-String -SimpleMatch $Computer -CaseSensitive -Context 0
$Result = (GWMI Win32_PingStatus -Filter "Address='$Computer' AND ResolveAddressNames='true'")
$Os = (Get-ADComputer -Identity $Computer -Properties *)
$Ping = ping $Computer -n 1 -l 1 | Select-String "потерь"
вложенной функцией внутри Workflow PingStatus. Что-то пока не получается. Конечно, если это имеет смысл для меньшего времени выполнения скрипта.
Вторым вопросом, как минимизировать строку соответствия $Computer и выбрать лишь значение конца аренды DHCP в колонке "Аренда сессии по DHCP".
В исходном файле, считанным от netsh после удаления дублей, остается одна строка:
10.0.102.52 - 255.255.255.0 - 08-60-6e-76-7a-a5 -15.07.2021 19:26:32 -D- Comp5416.Domain.MY.com
разумеется для каждого Compхххх...com своё значение. Надо б оставить в этой ячейке лишь -15.07.2021 19:26:32 или хотя бы -15.07.2021
Это намного интереснее, чем что-то в семерке, для которой кстати есть своя тема. По вопросу что там интересного.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.07.2021, 19:23
Помогаю со студенческими работами здесь

Выбор компа для 2Д анимации. Есть только два варианта
Как обычно, как у всех, дилема выбора. Подбирается станция для проф анимации. Каждая сценка весит в среднем 7-8 тыс. картинок, в...

Есть ли аналог Mechanize для Ruby? (кроме варианта чистых сокетов)
сабж (PS: в гугле не нашел ничего)

Есть ли какая нибудь версия ubuntu для слабеньких компьютеров?
Здравствуйте! У моего друга очень слабый компьютер. Не могли бы вы подсказать, если ли какая нибудь версия ubuntu для слабеньких...

Есть ли программа для определения
Есть ли программа, которой задаешь урл сайта и она сама находит ключевые слова, которые в топе у этого сайта? Чтобы не подбирать запросы......

Есть ли способ использования одной мыши или клавиатуры для двух компьютеров одновременно?
Здравствуйте, у меня вопрос. есть ли способ использования одной мыши или клавиатуры для двух компьютеров одновременно. И нет я не про KVM...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru