Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 14.06.2018
Сообщений: 19

Получение информации о NTP сервере

14.06.2018, 11:30. Показов 4380. Ответов 9
Метки ntp (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Задача следующая:

При помощи команды w32tm /query /status получаю массив данных из которых необходимо вытащить значения нескольких полей, например поле 1(Leap Indicator):

PS C:\Users\Administrator> w32tm /query /status
Leap Indicator: 3(last minute has 61 seconds)
Stratum: 0 (unspecified)
Precision: -6 (15.625ms per tick)
Root Delay: 0.0000000s
Root Dispersion: 0.0000000s
ReferenceId: 0x00000000 (unspecified)
Last Successful Sync Time: unspecified
Source: Local CMOS Clock
Poll Interval: 10 (1024s)

Создаю переменную $Status и присваиваю ей значение массива, затем при помощи select пытаюсь вытащить значение интересующего меня поля и присвоить его переменной "test":

$Status = & 'w32tm' '/query', '/status' - заношу в переменную значения массива данных
$Status|Select @{n="$test";e={$_.'Leap Indicator'}} - пытаюсь присвоить переменной $test значение поле Leap Indicator
$test - вывожу переменную(аналог cout для powershell)
Вот что мне отдает $test:

$test
-----


$test мне не отдает значение вышеупомянутого поля(Leap Indicator', а именно - "3(last minute has 61 seconds")), может Вы сможете подсказать где ошибка?
либо подсказать иной способ при помощи которого можно вытащить значение конкретно взятого поля в массиве.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.06.2018, 11:30
Ответы с готовыми решениями:

Получение информации об игровом сервере
Здравствуйте. Подскажите, пожалуйста, возможно ли получить на Delphi информацию об игровом сервере Counter-Strike? Определить...

Получение информации из реквизита на сервере
Здравствуйте. Подскажите пожалуйста: у меня есть справочник "Склады", у него реквизит "Объем". Мне нужно на форме документа при...

Получение текущего значения мирового времени через службы NTP
Привет! Я использую приведенный ниже программный код для получения текущего значения мирового времени через службы NTP. В данной...

9
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
14.06.2018, 11:56
Цитата Сообщение от Dennis87 Посмотреть сообщение
либо подсказать иной способ при помощи которого можно вытащить значение конкретно взятого поля в массиве.
PowerShell
1
2
3
4
5
6
7
8
9
10
$ntp_status = New-Object –TypeName PSObject –Prop @{}
(w32tm /query /status).Split([Environment]::NewLine) | %{
    if ($line = $_ -split ": ") {$ntp_status | Add-Member -NotePropertyName $line[0] -NotePropertyValue $line[1]}
}
 
'All Status:'
$ntp_status
''
'Leap Indicator:'
$ntp_status.'Leap Indicator'
0
Покинул форум
3700 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
14.06.2018, 16:05
KDE777, есть несколько подводных камней. Возврат w32tm: может быть и на русском, является массивом.
PowerShell
1
(w32tm /query /status).GetType().Name # вернет Object[]
Проще сделать так:
PowerShell
1
$test = [Regex]::Match((w32tm /query /status)[0], '[^\s]?\d+.+').Value
В виртуальной десятке возвращает значение индикатора помех (leap indicator), то есть все после двоеточия без лидирующего пробела.
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
14.06.2018, 16:57
Цитата Сообщение от greg zakharov Посмотреть сообщение
может быть и на русском
Dennis87 показал, что у него вывод на английском. Иначе действительно, в моём примере из-за языка системы поменяются все имена Property у $ntp_status. Если это кому-то нужно, можно сделать вариант, в котором имена Property будут заданы вручную...

Цитата Сообщение от greg zakharov Посмотреть сообщение
является массивом
Не вижу в этом проблемы. Не смотря на это мой пример работает.

Code
1
2
3
4
5
PS C:\> (w32tm /query /status).GetType()
 
IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array
Цитата Сообщение от greg zakharov Посмотреть сообщение
В виртуальной десятке возвращает значение индикатора помех (leap indicator), то есть все после двоеточия без лидирующего пробела.
В 10-ке не проверял, если так, тогда можно поменять -split ": " на -split ": ?"

Нашёл другую проблему - значения "ReferenceId" и "Last Successful Sync Time" содержат ещё двоеточия. С учётом этого можно поменять мой пример вот так:

PowerShell
1
2
3
4
5
6
7
$ntp_status = New-Object –TypeName PSObject –Prop @{}
(w32tm /query /status).Split([Environment]::NewLine) | %{
    if ( $line = $_.split(":",2) ) {$ntp_status | Add-Member -NotePropertyName $line[0] -NotePropertyValue $line[1].Trim()}
}
 
'All Status:'
$ntp_status
Code
1
2
3
4
5
6
7
8
9
10
11
12
All Status:
 
 
Leap Indicator            : 0(no warning)
Stratum                   : 6 (secondary reference - syncd by (S)NTP)
Precision                 : -6 (15.625ms per tick)
Root Delay                : 0.2492523s
Root Dispersion           : 0.2703997s
ReferenceId               : 0xC0A80201 (source IP:  10.10.10.10)
Last Successful Sync Time : 14.06.2018 14:56:18
Source                    : ********
Poll Interval             : 15 (32768s)
0
Покинул форум
3700 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
14.06.2018, 18:04
KDE777, все равно как-то жирно гонять данные в цикле, передавая данные по конвейеру Add-Member дабы тот добавил нудные данные в ранее созданный PSObject. Можно значительно сократить код за счет, скажем, ConvertFrom-Csv.
PowerShell
1
$ntp_status = ConvertFrom-Csv -In ((w32tm /query /status) -replace ':', ',') -H Status,Value
Что в итоге? В итоге получаем тот же массив, только с более простым обращением к элементам:
PowerShell
1
$ntp_status[0].Value
И так далее. Если подработать надфилем, можно получить алюминевый огурец (имею в виду те же грабли со временем).
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
14.06.2018, 18:09
Цитата Сообщение от greg zakharov Посмотреть сообщение
Можно значительно сократить код за счет, скажем, ConvertFrom-Csv
В этом варианте натыкаемся на:

Цитата Сообщение от KDE777 Посмотреть сообщение
Нашёл другую проблему - значения "ReferenceId" и "Last Successful Sync Time" содержат ещё двоеточия.
Code
1
2
3
4
5
6
7
8
9
10
11
Status                                                                               Value                                                                               
------                                                                               -----                                                                               
Leap Indicator                                                                       0(no warning)
Stratum                                                                              6 (secondary reference - syncd by (S)NTP)
Precision                                                                            -6 (15.625ms per tick) 
Root Delay                                                                           0.2492523s 
Root Dispersion                                                                      0.2703997s
ReferenceId                                                                          0xC0A80201 (source IP
Last Successful Sync Time                                                            14.06.2018 14
Source                                                                               ******** 
Poll Interval                                                                        15 (32768s)
0
Покинул форум
3700 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
14.06.2018, 18:18
Цитата Сообщение от KDE777
В этом варианте натыкаемся на...
Ну дык написано выше, что да, проблема со временем, доработка оставлена на автора темы. А ежели так желаете сатисфакции, то получайте готовое решение:
PowerShell
1
$ntp = ConvertFrom-Csv -In ((w32tm /query /status) -replace '^([^:]*?)\s*:\s*', '$1|') -H Status,Value -D '|'
1
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
14.06.2018, 18:36
Цитата Сообщение от greg zakharov Посмотреть сообщение
получайте готовое решение
Да, такой вариант отрабатывает с учётом дополнительных двоеточий. Хотя мне не нужен ни мой ни ваш вариант У Dennis87 есть два решения, может теперь сделать своё третье

Не по теме:

Но у себя в скрипте, если не требуется каких-то оптимизаций для скорости выполнения, я буду использовать $_.split(":",2) вместо -replace '^([^:]*?)\s*:\s*', '$1|', т.к. если спустя какое-то время понадобится что-то исправить, то вспоминать/разбираться для чего '^([^:]*?)\s*:\s*', '$1|' совсем не хочется :)

0
Покинул форум
3700 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
14.06.2018, 18:43
Цитата Сообщение от KDE777
...может теперь сделать своё третье
Отправная точка у автора темы есть, хотелось бы надеяться, что это послужит ему своего рода стимулом в личных исследованиях.
Цитата Сообщение от KDE777
...если спустя какое-то время понадобится что-то исправить...
Не можете запомнить что делает то или иное регулярное выражение, для этого есть комментарии. Впрочем, дело ваше.
0
0 / 0 / 0
Регистрация: 14.06.2018
Сообщений: 19
15.06.2018, 06:13  [ТС]
Большое спасибо за ответы.
p.s. я только в начале своих исследований...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.06.2018, 06:13
Помогаю со студенческими работами здесь

Организация информации на сервере
Всем привет. Я пытаюсь сделать свою CMS. Что-то типа блога. И вот упёрся в такой вопрос: как, где, и в каком виде размещать...

Организация информации на сервере
Всем привет. Я пытаюсь сделать свою CMS. Что-то типа блога. И вот упёрся в такой вопрос: как, где, и в каком виде размещать...

Поиск информации на сервере
Всем добрый день! Как можно найти и удалить строку, выделенную синим? Может есть какие-то программы управления сайтами? В админке...

Шифрование информации на сервере
Доброго времени суток, уважаемые! Я пока только разбираюсь в этом вопросе, но уже появилось опасение, что в ASP.NET по-сути, нет...

Получение изображение на сервере
Добрый день! Как получить изображение, которое приходит на сервер POST-запросом? И как проверить его размер?


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru