Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
#Круги добра
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр  Что обсуждали люди в 2024 году? Самое время вспомнить — через виммельбух Пикабу «Спрятано в 2024»! Печенька облегчит поиск предметов.

Спрятано в 2024

Поиск предметов, Казуальные

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • Animalrescueed Animalrescueed 36 постов
  • Oskanov Oskanov 7 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
0 просмотренных постов скрыто
DmitriitheFals
4 минуты назад
Лига Сисадминов
Серия Кудахтеры: powershell

Вспоминаем Powershell в нескольких частях. Часть 3. Обрабатываем, что получилось⁠⁠

Для ЛЛ: серия пометок по костылям

Вместо предисловия.
Недавно от бабки в поликлинике узнала, что творог опасен. «У знакомой внук дураком сделался через него. Его творогом кормили, от кальция родничок рано зарос, а мозг продолжал расти, и теперь он в ынторнэтах сидит, кнопки нажимает».
Тут много таких, творогом покалеченных

Конечная цель серии постов: написать свой очень маленький и очень кривой WSUS, поскольку развития WSUS больше не предвидится, но я про это писал
Часть 1. База из баз. Теория
Часть 1.1 Зачем ставить обновления на Linux и Windows и куда угодно, если в отделе работают проверенные электроником сотрудники, и все работает?
Часть 1.2 Чем плох WSUS, SCOM, прочее ПО, и факты в Ansible?
Часть 1.3 Почему Powershell, а не Python?
Часть 1.4 Прочие базовые вещи
Часть 1.5 Классы и объекты, для тех, кто пропускал школу
Часть 1.6 К теме обновлений в Windows
Часть 1.7 Как это все хранить и обрабатывать?
Часть 1.8 Давайте начинать. Мой первый класс
Часть 1.9 Немного магии, не очевидной с первого раза
Часть 1.10 Мой первый массив
Часть 1.11 Суй массив в файл. И забирай из файла
Часть 1.12 Теперь все вместе

Часть 2. Windows update
Часть 2.1 Служба обновлений и ее журнал
Часть 2.2 Настраиваем удаленный доступ
Часть 2.3 Ловим исключения
Часть 2.4 Проблема слишком больших прав
Часть 2.5 Разрешение удаленного подключения
Часть 2.6 Параллельная обработка задач, -parallel,  powershell jobs, Runspaces
Часть 2.7 И, наконец, получим первый список
Часть 2.8 Итого

Часть 3. Обрабатываем, что получилось
Часть 3.1 Немного про общую логику
Часть 3.2 В предыдущих сериях
Часть 3.3 Обновление списка обновлений
Часть 3.4 Обрабатываем оба списка сразу – список обновлений и список с сервера
Часть 3.5 Осталось только выгрузить в Excel
Часть 3.6 Отладка и наладка
Часть 3.7 Альтернативы?

Часть 3. Обрабатываем, что получилось

Часть 3.1 Немного про общую логику
Есть школьная логика, когда люди считают, что «нам нужен список всех обновлений, чтобы понять, какое обновление установлено! 111
Есть логика «ближе к Agile», когда нам не важно, какое обновление установлено, а важно, установлено ли последнее обновление, максимум предпоследнее.
В чем разница? В случае «школьной логики» последние лет 50 наверное, может больше, я в школе был травмирован абсолютно угашенной на голову преподавательницей химии, которой надо было не решение, правильное или неправильное, а соблюдение ее личной методологии решения. Абсолютно дурная бабка была.

Логика в моем случае в том, чтобы сначала получить MVP, minimum viable product, получить данные «как есть», и уже потом развивать код, добавляя в выгрузку, или в справку нужные мне данные.
Проблемы написать парсер Windows update нет никакой, может уже даже кем-то написан. Но мне не нужен полный список для решения моей частной задачи.
Задача в первом приближении написана не оптимально с точки зрения кода, объемов данных итд. Но опять же, мне не нужно решать глобальную задачу и делать комбайн с вертикальным взлетом, мне траву во дворе скосить, и скосить «сейчас».

Про это будет еще много отсылок в тексте.

Использование функций.
Использование функций дело, безусловно, полезное и правильное, с точки зрения читаемости кода. Проблема с Powershell в том, что в нем обработка ошибок в функции весьма странная и неудобная с непривычки. Поэтому функции я, конечно, использую, но в этом примере их будет меньше, чем стоило бы.
Например, получение списка обновлений NewKeinArray можно было спокойно вынести в функцию с параметром, или без.

Чистка кода от старого и закомментированного кода.
Для читаемости кода, конечно, было бы неплохо вычищать старый код.
Для прослеживания логики роста кода, чтобы спустя месяц было понятно, что было сделано и почему так было сделано, закомментированный код можно оставлять. Оба варианта сгодятся. Поскольку это учебная статья, то закомментированный код будет оставлен, для примеров и чтобы на него ссылаться.

Часть 3.2 В предыдущих сериях

В первой серии мы получили:
1) Файл nur-eine-datei.xml  c массивом( System.Array) из класса MeineErsteKlasse и генератор (mainefirstclass4pikabu .ps1) для создания этого файла.
Почему эта функция вынесена? Потому что генерация – это очень простой механизм, и его имеет смысл сделать отдельно. Можно ли сделать эту задачу как функцию в основном скрипте? Можно, но зачем? Это простая генерация файла со списком. Ниже попробую пояснить, почему именно так удобно именно мне.
2) Файл dieparole.txt с логином и паролем для удаленного сервера. Так делать не надо, хранение логинов и паролей в тексте – плохая практика. Нормальные люди разворачивают Vault.
3) Некорректно настроенный, так делать не надо, но для демонстрации сойдет, сервер с Windows. WinRM надо грамотно настраивать для безопасной работы!
4) Выгруженный список обновлений с этого сервера.
5) И код из части 2.

Что сделано не очень удобно, и, может, не очень правильно? Файл nur-eine-datei.xml  и оба скрипта должны лежать в одной папке, и называться одинаково в обоих исполняемых файлах. Можно было сделать запуск с параметром «путь к файлу», но, на мой взгляд, это только усложнит использование.

Первым делом переформируем список серверов для проверки.
В примере (2) есть строка

$MeineServerliste = @("192.168.211.150","192.168.211.151")

Первый сервер из нее доступен, второй – не существует.
В примере (2) есть еще одна ошибка, но я ее исправлю потом.
В достаточно большой инфраструктуре мы, зачастую, не знаем – доступен ли сервер, не доступен, но нам нужна общая картина – всего, из них доступно, из них не доступно.
Можно оптимизировать задачу как «сделать только список что доступно и что на них», можно оптимизировать задачу «все числится, из них не доступно». Это влияет на исполняемую логику в коде. Мне удобнее видеть ситуацию в виде общей таблицы.

Часть 3.3 Обновление списка обновлений
Перепишем первый скрипт, формирующий список обновлений, в следующем виде:

Class Updates{
[string]$OS
[string]$UpdateType
[string]$KB
[string]$KBDate
[string]$Other}

<#Для какого продукта он предназначен: Microsoft Server Operating System
Для какой версии продукта он предназначен: 24H2 (это Windows server 2025)
Номер: KB article numbers: 5063878
Дата выхода: 8/12/2025 #>
$Skriptversion = "12 from 05.09.2025"

$Ar2 = @()
$UPD =[Updates]::new()
$UPD.OS = "Server 2025 24H2" ; $UPD.UpdateType = "OS" ; $UPD.KB = "KB5063878"  ; $UPD.KBDate = "12.08.2025" ; $Ar2 += $UPD ;
# $MeinErstklassigesBeispiel | Format-Table –AutoSize
$PfadZurSpeicherdatenbank = $PSScriptRoot
$MeineErsteSicherungsdatei = $PfadZurSpeicherdatenbank + "\" + "nur-eine-datei-part12.xml"
Export-Clixml -Path $MeineErsteSicherungsdatei -InputObject $Ar2

# notepad $MeineErsteSicherungsdatei
# $NewKeinArray = Import-Clixml -Path $MeineErsteSicherungsdatei
# $NewKeinArray

Зачем? Во первых, нам не нужны проверки «через блокнот», сделанные для демонстрации «что там внутри». Во вторых, чтобы строка
$UPD.OS = "Server 2025 24H2" ; $UPD.UpdateType = "OS"
помещалась на экран.

Зачем так ?

Допустим, вы по каким-то причинам не перешли с сервера 2012R2 на сервер 2025, и вам нужно следить не только за тем, чтобы было или не было обновление на сервере 2025, но и за 2012.
При этом, поскольку подписки на расширенные обновления для 2012R2 у вас нет, то последнее обновление у вас будет от  10 октября 2023 года.
2023-10 Security Monthly Quality Rollup for Windows Server 2012 R2 for x64-based Systems (KB5031419)
Хотя, если бы вам на самом деле была нужна безопасность, то вы бы оформили подписку на обновления, и получали
2023-11 Security Monthly Quality Rollup for Windows Server 2012 R2 for x64-based Systems (KB5032249)
2023-12 Security Monthly Quality Rollup for Windows Server 2012 R2 for x64-based Systems (KB5033420)

И так далее, вплоть до
2025-08 Security Monthly Quality Rollup for Windows Server 2012 R2 for x64-based Systems (KB5063950)
2025-08 Security Monthly Quality Rollup for Windows Server 2012 for x64-based Systems (KB5063906)

В таком случае достаточно дописать одну строку в код:
$UPD.OS = "Server 2012 R200" ; $UPD.UpdateType = "OS" ; $UPD.KB = "KB5031419"  ; $UPD.KBDate = "10.2023" ; $Ar2 += $UPD ;

Читаемость сохраняется, думать не надо.

Да, конечно «правильнее в вакууме» было бы один раз взять и потратить два дня и распарсить весь список обновлений, или поискать готовый список, вдруг кто-то найдет.
Для рабочей задачи, которую я решаю, достаточно ручного добавления одной строки. Раз в месяц, может быть два раза в месяц, в случае выхода внепланового обновления.
В коде выше не специально, но была допущена ошибка. Найти ее и устранить предлагается самостоятельно.

Часть 3.4 Обрабатываем оба списка сразу – список обновлений и список с сервера

В переменной $DataRemote1 есть массив обновлений, а в $MeineServerliste[0] – имя сервера. Окей, и что с этим делать? Очевидно, создать новый класс, но сначала сделать то, чего делать нельзя.

Вспоминаем Powershell в нескольких частях. Часть 3. Обрабатываем, что получилось IT, Windows, Программирование, Powershell, Wsus, Microsoft, Длиннопост

Мне, не знаю как вам, не нужно обрабатывать весь список обновлений. Обновления в Windows последних (2016, 19, 22, 25) бывают:
Обновление стека обслуживания, например servicing stack update (KB5063666)
Кумулятивное плановое обновление, например 2025-08 Cumulative Update for Microsoft server operating system version 24H2 for x64-based Systems (KB5063878) (26100.4946)
Внеплановое обновление
Обновление dotnet, например
2025-07 Cumulative Update for .NET Framework 3.5 and 4.8.1 for Microsoft server operating system version 24H2 for arm64 (KB5056579)
Какие-то еще внеплановые обновление, типа обновления Edge и чего то там еще. Всякая мелочь.
Так нужно ли обрабатывать все 10-20-50 обновлений в списке установленных? Конечно, нет.
Поэтому:


$DataRemote2 = $DataRemote1 | Sort-Object -Property InstalledOn -Descending | Select-Object -First 4

Вот теперь заводим новый класс!

Class CurrentState{
[string]$Name
[string]$IP
[string]$IsActive
[string]$CurrentUpdateKB
[string]$CurrentUpdateKBDate
[string]$Other
[string]$LastInstalledKBFotTroubleshooting}

Remove-Variable TotalList -ErrorAction SilentlyContinue
$TotalList = @()

foreach ($ThisUpdate in $DataRemote2) {
$ThisServer = [CurrentState]::new()
$LastInstalledKBFotTroubleshooting = ""
foreach ($ThisUpdate2 in $DataRemote2){
$LastInstalledKBFotTroubleshooting = $LastInstalledKBFotTroubleshooting + $ThisUpdate2.HotFixID +'.'}

$ThisServer.LastInstalledKBFotTroubleshooting = $LastInstalledKBFotTroubleshooting

foreach ($BaseOfUpdate in $NewKeinArray) { 
$ThisServer.IP = $MeineServerliste[0]
Write-Host "This |"  $ThisUpdate.HotFixID " Base " $BaseOfUpdate.KB
if ($ThisUpdate.HotFixID -eq $BaseOfUpdate.KB) {
$ThisServer.CurrentUpdateKB = $ThisUpdate.HotFixID
$ThisServer.CurrentUpdateKBDate = $BaseOfUpdate.KBDate
$TotalList += $ThisServer
#break
}}

Remove-Variable LastInstalledKBFotTroubleshooting
Remove-Variable ThisServer  }

Часть 3.5 Осталось только выгрузить в Excel

В Powershell «из коробки» нет выгрузки в Excel. Есть txt, csv, xml. Внешний модуль для Excel, конечно, есть, но использовать его просто не хочется.
Однако, если вы сделаете

$CSVfile1 = $PfadZurSpeicherdatenbank + "\" + "MyExport1.csv"
Export-Csv -InputObject $TotalList -Path $CSVfile1
notepad $CSVfile1

То получите совсем не то, чего хотели, а что-то про #TYPE System.Object[]
Это совсем, совсем не то, что вам надо. Для решения этой проблемы есть несколько вариантов, самый читаемый, на мой взгляд,

$CSVfile2 = $PfadZurSpeicherdatenbank + "\" + "MyExport2.csv"
$CSVfile3 = $PfadZurSpeicherdatenbank + "\" + "MyExport3.csv"
$TotalList | Select * | Export-Csv -Path $CSVfile2 -Delimiter ";"
$TotalList | Select Ip, LastInstalledKBFotTroubleshooting | Export-Csv -Path $CSVfile3 -Delimiter ";"
notepad $CSVfile2
notepad $CSVfile3

Часть 3.6 Отладка и наладка

Что же делать, как же быть, если у вас поле CurrentUpdateKB – пустое? Не оказалось у вас установленного последнего обновления?
На мой взгляд, решение очевидно, нужно идти и ставить свежее обновление.


Но, если у вас другое мнение, то
Поле LastInstalledKBFotTroubleshooting у вас есть, Microsoft Update catalog доступен, дальше надо пояснять?

Часть 3.7 Альтернативы?

Пока обсуждал черновик с коллегами, выяснил что можно было решить эту задачу, инвентаризации, и попроще. Или иначе.
Можно было сделать, через, например, групповую политику, разовую задачу по выгрузке того, что мне нужно, в общую папку, в сотню – две файлов с разными именами. Потом уже гораздо проще решить задачу выборки из файлов.
Можно было выдернуть через Get-SilData, тоже вариант.
Можно было запросить SQL базу на WSUS, если она хоть как-то жива.  Там очень простой запрос.

Показать полностью 1
[моё] IT Windows Программирование Powershell Wsus Microsoft Длиннопост
0
Stenzor
Stenzor
1 час назад

Продолжение поста «Механика камбека: как работает предсказание в Dota 2»⁠⁠1


На следующий день я встретился с руководителем команды. Волновался максимально. Ехал не затем, чтобы просто найти работу. Лишь ради того, чтобы проверить свои идеи в деле. В живой атмосфере. Он спросил меня: «В каком формате ты бы хотел сотрудничать?». Я ответил, что пришел за победами, поэтому готов начать работу сию секунду и без начальной ЗП, можно только обговорить процент с призовых на турнирах. Меня не сильно интересовали деньги в тот момент, хотя я и понимал, что при таком раскладе мне придется не просто жить в Севастополе, а выживать. Но, когда речь идет о масштабной идее, которую нужно воплотить в реальность – о другом и думать не стоить.

Он кивнул. Сказал, что завтра устроит онлайн встречу. Меня пригласит как гостя на просмотр матча в Discord.

Наступил следующий день. Я подключился к ребятам, сказал, что буду смотреть, как они играют. Мне включили демонстрацию экрана и матч начался.

Команда казалась сильной. Слаженной. С хорошим контролем карты. Но… один из ключевых героев терял пик своей силы после 30 минуты. Рошана забрать забыли, и это дорогого стоило. В драфте были герои, которые толком не имели контрпик-потенциала против соперника. Что и следовало — всё развернулось не так, как ожидалось.

Это был мой первый опыт реального анализа профессиональной команды. Именно тогда я окончательно убедился: нельзя выбирать героев по чуйке; нельзя строить прогнозы на основе только лишь винрейтов, тем более с одного источника. Нужна система. Такая, которая бы показывала, как драфт работает и где есть пробоины.


Наступил следующий день. Я вошел в зал команды. Комнату окутывал полумрак, в котором светились неоновые вывески и витрины с арт-объектами из игр: древние мечи, доспехи, миниатюрные трофеи.

Организатор жестом указал на другую часть помещения. Ребята собрались за столом. Я подошел, сел в мягкое кресло. Мы кратко поболтали. Договорились: один матч, где я полностью беру на себя драфт.

Все пятеро сели за компы. Я встал за их спинами. Началась стадия драфта. Называл баны, пики. Тактические цели на игру. В голове был — концентрированный вакуум. Время будто замедлилось. Растягивалось, между словами, будто резина. Драфт получился не идеальным. Но что главное, правильным.

Игра началась. И пошла так, как и должна была. Соперник давил, мы несли потери. К 20 минуте игры база уже была под угрозой из-за сломанных башен. Первая половина выглядела больше как бойня. Не битва, а испытание на выживание. Цель была одна: дожить до 30 минуты. Организатор, помедлив, встал и вышел. Игроки крайне сосредоточенно били пальцами по клавиатуре – будто пытаясь исправить неизбежное. Сомнения висели в воздухе, как дым после взрыва – густой, тяжелый.

А за стенами — Севастополь. Тихий. Спокойный. Как будто внутри не разворачивался матч, а где-то далеко был просто вечер.

Но в нужный момент – ровно на 30 минуте – игрок вражеской команды отключается. Пауза. Мы ждем. В тишине слышен только гул системников и шорохи мыши.

Пауза отжимается. Соперник пытается зайти сломать бараки. Файт. Четыре смерти соперников. Полный переворот. Пишут «GG».

Экраны засияли падением трона наших оппонентов. Парни улыбаются. На душе чувствуется облегчение.

Я не стал отмечать неким важным событием, что перевернули игру мы ровно на 30 минуте. Было не нужно. Игра говорила сама за себя.

Мы немного посидели, поболтали о планируемом турнире в ближайшее время.

Через час вышел на улицу. Город был спокоен. Ветер гулял по улицам. Ребята разошлись кто куда. Домой, по делам. Мне же, идти особо было некуда. Впереди еще было много работы. Поищу базу, а там поглядим. Открыл телефон, зашел в заметки Telegram где горела старая фраза: «Это работает. Осталось построить так, чтобы работало всегда».

А дальше — уже совсем другая история


Продолжение поста «Механика камбека: как работает предсказание в Dota 2» IT, Нейронные сети, Игры, Технологии, Telegram (ссылка), Dota 2, Dota, Программа, Python, Приложение, Аналитика, Openai, Telegram, iOS, Android, Linux, Windows, Киберспорт, Apple, Веб-разработка, Длиннопост, Ответ на пост
Показать полностью 1
IT Нейронные сети Игры Технологии Telegram (ссылка) Dota 2 Dota Программа Python Приложение Аналитика Openai Telegram iOS Android Linux Windows Киберспорт Apple Веб-разработка Длиннопост Ответ на пост
8
1
Stenzor
Stenzor
2 часа назад

Механика камбека: как работает предсказание в Dota 2⁠⁠1

Мы не выбираем, когда приходит момент, чтобы всё доказать.

Только решаем. Пойдем ли мы ради этого хоть на край света.

Эта статья направлена на освещение механик приложения, которое я создал со своим товарищем. Суть приложения — предсказывание камбеков в Dota 2.

Тот, о ком пойдет речь, не был королем. Не носил плащ тренера с золотыми пуговицами. Не стоял на трибунах The International под ослепительными огнями. Он был Хоббитом среди великанов. Но в нём была искра. Идея, от которой уже не отказаться.


Путь, с которого всё начало меняться

Однажды я решил, что хочу работать аналитиком в реальной киберспортивной команде.

Не просто анализировать матчи в лайве. Отказаться от тренерства в дистанционном формате. Мне захотелось серьёзной, «мужицкой» команды — хотел видеть живые, настоящие эмоции и vibe киберспорта, как это было на LAN-сценах.

Написал товарищу, который тогда был тренером по CS в Севастополе. Мы давно были знакомы, еще со времен, когда учились вместе в IT сфере. Без подробных вопросов он ответил «Приезжай завтра».

«Завтра?» подумал я. Уже было поздно, а путь был не близкий. Нужно было добраться с одного конца Крыма в другой — в Севастополь. Но когда меня это останавливало? :)

Собрал рюкзак. Ноутбук. Пара футболок. И отправился на автостанцию.


Шел дождь. Солнце уже зашло за горизонт. Зонтик я, как всегда, решил не брать. Добираюсь до автостанции на такси. Автобус ушел. «Вот, незадача. Ну что-ж, погнали ловить попутки».

Словил первую машину. Водитель молодой, как и я. Весь салон в неоне. Громкая музыка. Без подробных диалогов добросил меня до ближайшей автостанции, ведущей на Симферополь.

Поблагодарил, кинул сотку на переднее сидение, стал ждать дальше. Зашел в магазин, купил газированной воды и булку. Дождь потихоньку стих. Одна машина, другая.. никто не останавливается. «А ведь и впрямь — подумал я, — часто ли я сам, когда был за рулем, подвозил незнакомцев? Нет, что уж там... просто проезжал мимо. А теперь и сам стою на обочине. Не скажу, что я мало дел добрых совершил за свою жизнь, но в карму толком не верю. Частенько считаю себя скептиком. Может, им и являюсь».

«ГАВ!» раздалось позади меня. Я обернулся. Передо мной стоял пес и вилял хвостом. Не долго думая бросил ему пол булки. Ему она явно нужнее чем мне. Повернувшись обратно, вдохнул свежего воздуха полной грудью и продолжил ловить попутки.

Некоторое время спустя остановилась машина. Спросил, куда едут, узнал, что нам по пути. Сел. Это были пара парней на отечественном автопроме. Ехали быстро, музыка играла громко. Беседа ни к чему не обязывает. Но один из парней вдруг заговорил. Начал спрашивать о моей точке назначения, и почему я решил отправиться в такой час на другой конец Крыма. Я без капли сомнения все рассказал: и про идею стать серьезным аналитиком, и о том, что давно занимаюсь разбором «внутренностей» компьютерной игры Dota 2.

Они же в ответ - сами стали рассказывать о том, что играют в доту и CS. Один даже вспомнил времена первой доты. Было ли мне интересно? Да, всегда приятно поболтать о чем-то что нравится не только тебе. Полезно? Возможно. Степень полезности порой трудно просчитать в уме. И все же — я слышал людей, которым игра дорога. А это всегда важно.


Когда путь становился испытанием

Доехали до окраины Симферополя. Попрощался с парнями. Было приятно, что поездка оказалась не скучной. Но тут встала очередная проблема. Последний автобус на Севастополь должен быть через 20-30 минут. А я черт знает где.

Быстрым шагом — через какие-то заборы, рельсовые пути, где только карта показывала дорогу. Рюкзак с ноутом прыгал на спине, как будто тоже волновался.

Сел на остановке у вокзала. Стал ждать. 15 минут.

Понимаю, автобуса нет. И осознаю...

Я не там.

Автобус проходит через совершенно другую остановку, а я тут расселся, будто бы собрался ехать обратно домой. «Ну, не без приключений» подумал я и вызвал такси.

Доехал до Западного автовокзала, который осуществляет транспортные перевозки в сторону Севастополя. Автобусы я там, конечно, уже и не ждал в такой час, но попутку с иного места и не поймать. Встал на остановку. Было тихо. Даже слишком. Ни перекатиполей, ни знакомых-незнакомых лиц.


Мужчина в старой куртке остановился. Спросил, куда мне нужно. И предложил подвезти. Не до моего пункта назначения — а до Бахчисарая. В целом, для меня и это было счастливым стечением обстоятельств.

Ехали. Болтали. Я стал рассказывать куда и зачем еду. Про доту, про драфты, про то, как сложно объяснить игрокам, что один герой может выглядеть сильным, но потерять свой боевой потенциал после условной 20 минуты. О том, как все решения принимаются на глаз, без системы.

Он слушал внимательно. Сказал, что давно не играл, но понимал. Ведь сам проходил через подобное. Даже привел пару параллелей с жизнью на флоте. Казалось бы.. чего тут общего? Дота и флот :)

Слова летели, как искры огней, домов, горящих за окном. И мы даже не заметили, как проехали Бахчисарай и попали в Севастополь. Я не стал расспрашивать как так получилось. Думаю, что он сам решил добросить меня. Порой мы совершаем такие поступки просто потому, что хотим, чтобы так было. И ничего не просим взамен.

И вот я — в Севастополе.

Продолжение оставлю в комментариях.


Что же внутри DotaDiviner? Приложения, в котором, как обещают разработчики ( то есть я ), есть алгоритм предрекающий перевороты игры?

1. Эффективность драфта

Что это:

Каждый герой получает оценку силы в зависимости от того, насколько он полезен на разных стадиях игры — ерлигейме, мидгейме, лейте.

  • У некоторых героев сильное ерли (например, Puck, Batrider, Viper), но они теряют ценность со временем

  • Другие набирают силу только к лейту (например, Dragon Knight, Morphling, Phantom Assassin)

  • Некоторые работают равномерно на протяжении всей игры (например, Abaddon, Rubick)

Зачем это нужно:

Чтобы понять:

  • Кто выигрывает ерли, а кто лейт

  • Где может быть перевес даже если темп героев средний

  • И почему команда с "сильными" героями может проиграть: просто она не подготовлена к нужной фазе игры

2. Синергия между героями

Что это:

Оценка, насколько герои работают вместе как команда , а не как набор случайных персонажей.

Примеры:

  • Хорошая синергия:
    Pangolier + Tusk + Bane + Shadow Fiend + Kunkka = давление в ерли, контроль карты, быстрые ганги

  • Плохая синергия:
    Chen + Templar Assassin + Magnus + Pangolier + Vengeful Spirit = хаос, мало контроля карты, слабый тимфайт

Зачем это нужно:

  • Чтобы понимать, почему один драфт сильнее другого , даже если винрейты кажутся одинаковыми

  • Чтобы видеть слабые места в составе, которые можно использовать самому или избегать при выборе героев

3. Контрпик

Что это:

Оценка, кто доминирует в противостоянии , основываясь на том, какие герои могут подавить ключевых игроков соперника.

Как бот считает:

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

  • Если соперник выбрал героя, который ломает твою систему игры — ты в зоне риска

Примеры:

  • Wraith King vs Brewmaster: плохой матчап — Wraith King не успевает за героями, которых не может быстро убить. Урон сосредоточен по одиночным целям. Ограниченная мобильность, а также полагается только на свою выживаемость в то время, как Brewmaster напротив закрывает преимуществом в мобильности

  • Slardar vs Naga Siren : контрпик, потому что Slardar не имеет хороших инструментов для борьбы с большим иллюзий. Уязвимость к оцепенению и ультимейту, так как Slardar будучи героем ближнего боя неизбежно попадет под ее воздействие. Кроме того, высокая сложность убийства с учетом любви Naga Siren к покупке таких айтемов как Butterfly

Зачем это нужно:

  • Понять, кто действительно доминирует по драфту

  • Увидеть, кто потеряет силу из-за выбора соперника

  • Это особенно ценно при просмотре профессиональных игр — часто там решающий контрпик определяет исход

4. Мобильность и выживаемость

Что это:

Два показателя, которые говорят о том, как герои перемещаются по карте и насколько они живучи в файтах.

Мобильность:

  • Отвечает за то, насколько быстро команда может перемещаться между линиями, начинать файты, зачищать кемпы, убивать рошана

  • Высокая мобильность = возможность перехватывать инициативу в нужный момент

Выживаемость:

  • Определяет, кто дольше остаётся в живых в teamfight’ах

  • Высокая выживаемость = больше шансов сохранить преимущество после давления

Как это влияет на игру:

  • Команды с высокой мобильностью чаще захватывают контроль карты

  • Команды с высокой выживаемостью лучше тянут лейт и меньше боятся байбеков


И БЛАБЛАБЛАБЛ. Давай уже к сути, написал тут кучу текста, который прочтут лишь процентов двадцать. Хочу увидеть реальные камбеки!!! А не все вот эти вот показатели.

Показатели важны. Как в строительстве, где есть несущая стена — основа конструкции. У неё есть и помощники: колонны, пилоны, торцевые стены и т.д. Без них конструкция стояла бы голой и беспомощной. Верно?

5. График темпа игры

Что это:

Визуализация поминутного сравнения силы команд.

Не прогноз победителя, а график силы нарастающий/падающий в течение игры.

Как читать график:

  • Линия выше линии соперника → эта команда имеет преимущество на указанной минуте

  • Линия ниже линии соперника → соперник доминирует в этот момент игры

  • Чем дальше линия от средней точки 0.5 → тем больше перевес между командами

  • Стабильный рост / падение к концу игры → показывает, у кого есть сильный лейт или кто теряет контроль

Почему это важно:

  • Можно предсказать камбеки

  • Увидеть, когда начнётся лейт

  • Понять, когда стоит инциировать активные события

  • И главное — не гадать на глаз , а иметь объективную картину

❗ПЕРЕЙДЕМ К ПРИМЕРУ❗

На иллюстрации графика «Преимущество команд в минуту игры» видно, что Radiant набирают силу к 25 минуте, и это совпадает с началом их камбека в реальном матче — что и означает - модель работает.

Механика камбека: как работает предсказание в Dota 2 IT, Нейронные сети, Игры, Технологии, Telegram (ссылка), Dota 2, Dota, Программа, Python, Приложение, Аналитика, Openai, Telegram, iOS, Android, Linux, Windows, Киберспорт, Apple, Веб-разработка, Длиннопост

The International 2025

И тут встает вопрос: выборка же слишком мала. Ты нам тут показываешь один скриншот, где все совпало, но когда я начну пользоваться, то точно не найду ничего подобного.

Я постарался, потратил какое-то количество времени и сделал. Мне, честно, даже понравилось. Буду это делать и дальше.

Реализовал галерею камбеков, где собрал все основные перевороты, которые были предскзааны за последние пару месяцев. Это не все. Но это те, которые я нашел вручную и поместил в простой и понятный интерфейс для наглядности.

🔗Попробовать и поглядеть больше скриншотов можно тут — добро пожаловать:

👉 Галерея точных прогнозов

👉 Telegram бот — DotaDiviner

👉 Скачать приложение — DotaDiviner

  • В App Store (iOS и Mac)

  • В Google Play (Android)

  • В Microsoft Store (Windows)

  • В мини-аппе Telegram бота

  • На Linux

В TG достаточно ввести команду /live. В приложении — воспользоваться функцией "Автоанализ" или ввести героев вручную — полный анализ драфта не заставит себя долго ждать.

ೃ⁀➷ В заключение

Diviner — не волшебная коробка.
Это инструмент, в который я вложил два года, тысячи матчей и хорошо запоминающуюся поездку на попутках в дождь.

Если ты игрок, стример, аналитик или даже обычный бродяга с улицы — попробуй его.
Не потому что я прошу.
А потому что ты, да-да, именно ты, заслуживаешь пройти не по поверхности, а сквозь игру. Как через лабиринт, и в руках у тебя уже есть карта.

Но это только начало.

Сейчас мы работаем над нейросетями NS1 и NS2 — двумя аналитиками в одном:

  • NS1 анализирует драфт до матча, как тренер перед битвой

  • NS2 смотрит в лайв, как шахматный гроссмейстер — предсказывает следующий ход, давление, момент камбека

Вместе они превратят Diviner из инструмента анализа в шахматный движок, который видит игру наперёд.
Не просто "график по прошлым данным", а прогноз, построенный на ритме.

Цель: не 60%, не 70%, а выше 80% точности, чтобы Diviner стал не просто помощником, а самым настоящим стандартом аналитики в Dota 2.

Carpe diem ˗ˏˋ ´ˎ˗ и да поможет нам Бог. Ave Maria☩

Показать полностью 1
[моё] IT Нейронные сети Игры Технологии Telegram (ссылка) Dota 2 Dota Программа Python Приложение Аналитика Openai Telegram iOS Android Linux Windows Киберспорт Apple Веб-разработка Длиннопост
3
12
DmitriitheFals
23 часа назад
Лига Сисадминов
Серия Кудахтеры: powershell

Вспоминаем Powershell в нескольких частях. Часть 2. Windows update⁠⁠

Для ЛЛ: серия пометок по костылям

Конечная цель серии постов: написать свой очень маленький и очень кривой WSUS, поскольку развития WSUS больше не предвидится, но я про это писал
Часть 1. База из баз. Теория
Часть 1.1 Зачем ставить обновления на Linux и Windows и куда угодно, если в отделе работают проверенные электроником сотрудники, и все работает?
Часть 1.2 Чем плох WSUS, SCOM, прочее ПО, и факты в Ansible?
Часть 1.3 Почему Powershell, а не Python?
Часть 1.4 Прочие базовые вещи
Часть 1.5 Классы и объекты, для тех, кто пропускал школу
Часть 1.6 К теме обновлений в Windows
Часть 1.7 Как это все хранить и обрабатывать?
Часть 1.8 Давайте начинать. Мой первый класс
Часть 1.9 Немного магии, не очевидной с первого раза
Часть 1.10 Мой первый массив
Часть 1.11 Суй массив в файл. И забирай из файла
Часть 1.12 Теперь все вместе

Часть 2. Windows update
Часть 2.1 Служба обновлений и ее журнал

Часть 2. Windows update
Часть 2.1 Служба обновлений и ее журнал
Часть 2.2 Настраиваем удаленный доступ
Часть 2.3 Ловим исключения
Часть 2.4 Проблема слишком больших прав
Часть 2.5 Разрешение удаленного подключения
Часть 2.6 Параллельная обработка задач, -parallel,  powershell jobs, Runspaces
Часть 2.7 И, наконец, получим первый список
Часть 2.8 Итого

Почему код написан вручную, а не через любой из ИИ?
Я пробовал и продолжаю пробовать. ИИ хорошо пишет маленькие задачи, и крайне полезен для сценариев «напиши вот так» - чтобы понять, как это работает. Но ИИ пишет странный код в некоторых сценариях, и написать промт для правки занимает столько же по времени, как написать правку самому.
Копилот вообще очень хорош, но не для всех сценариев.

Форматирование кода
Код не отформатирован отступами, пробелами, и так далее, для экономии места. Так делать, конечно, не надо.

Часть 2.1 Служба обновлений и ее журнал

Для второй части разберемся, что такое в первом приближении служба обновления, и что с ней как.

Для этого мне понадобится виртуальная машина, в моем случае с Windows Server 2025 Evaluation. Поскольку это Evaluation, и я не использую сабж в коммерческих целях, то мне не надо объяснять, что в данном случае это Fair use, насколько это возможно. Хотя для учебных целей мне бы и следовало купить и учебную лицензию (взять в институте), и Licence Windows Server CAL - Student only к нему.
Хотя мог бы сказать, как импортозаместители – что-то NVidia Microsoft дорого, давайте дешевле.

За работу обновления отвечает сервис wuauserv, он же Windows Update.
Он хранит свои логи много где, в том числе:
Events – Windows – Application - 
Microsoft-Windows-WindowsUpdateClient/Operational

И в текстовом файле - %systemroot%\Logs\CBS, остальное убрали в ETL (Windows Update log files)
Но про это позже, в части три.

Для просмотра обновлений есть ущербный, но мне сойдет, командлет
Get-HotFix

Осталось все ничего.
В составе Windows есть сервис WinRM , живет на портах TCP/5985 = HTTP и  TCP/5986 = HTTPS

Проверим локально:
netstat -an | findstr "5985"

Или по новой школе

Get-NetTCPConnection | where {$_.LocalPort -eq 5985}

Но вы можете посмотреть и параметры
get-Item WSMan:\localhost\Service\EnableCompatibilityHttpListener
get-Item WSMan:\localhost\Service\EnableCompatibilityHttpsListener

По умолчанию – false.
WinRM имеет свои настройки безопасности, подключений, итд. Если у вас что-то не работает, в 99% случаев эти настройки меняли сервисы имитационной безопасности, и сделали что-то плохое. Поэтому нужно знать, что они сделали, и как это чинить. Сами они это починить не могут. Сервисы имитационной безопасности, вообще все, ничего другого не умеют.

Часть 2.2 Настраиваем удаленный доступ

К делу. Заведем новый файл, в нем заведем переменную «где храним скрипты» и переменную версии, просто так чтобы была (не просто так)

$PfadZurSpeicherdatenbank = $PSScriptRoot
$Skriptversion = "10"
$MeineErsteLogin = $PfadZurSpeicherdatenbank + "\" + "dieparole.txt" #*

* Разрешается заменить dieparole на derparol. Если вы эльф

Проверим наличие файла с логином и паролем, и, если его нет, то предложим сохранить. Хранение файла с паролем не очень безопасно, и даже совсем не безопасно, но можно каждый раз вручную вводить.
Если файла нет, то создадим, и посмотрим что там внутри

$PfadZurSpeicherdatenbank = $PSScriptRoot
$Skriptversion = "10"
$MeineErsteLogin = $PfadZurSpeicherdatenbank + "\" + "dieparole.txt"
$DasPasswordFileExist  = Test-Path -Path $MeineErsteLogin
if ($DasPasswordFileExist -eq $false) {$DieParole = Get-Credential
Export-Clixml -Path $MeineErsteLogin -InputObject $DieParole}
notepad $MeineErsteLogin

Как легко заметить, имя пользователя хранится в открытом виде, пароль лежит в зашифрованном виде, но, еще раз, это не безопасно.

Заведем список серверов. В моем случае список сделан вручную, но вы легко можете сформировать список из AD (через Get-ADComputer  с фильтрами и без), или из любых других источников.
$MeineServerliste = @("192.168.10.155","192.168.10.156")

Для проверки доступности WinRM есть два командлета, или можно свой метод написать, если хочется. Командлеты: Test-NetConnection и Test-WSMan. Это не заменяющие, а дополняющие друг друга методы. Test-NetConnection ответит на вопрос «открыт ли TCP port и есть ли хотя бы пинг». Пинга может не быть, это нормально. Test-WSMan ответит на вопрос «ответил ли там кто-то»

Часть 2.3 Ловим исключения и ошибки

В powershell и любом коде иногда бывает событие «не смогла». Его надо обработать. Вариантов обработки много, это и классический  Try-Catch-Finally,  и варианты -ErrorAction and -ErrorVariable. Можно обрабатывать переменную $Error.
В чем проблема. Кроме часто встречаемого Silentlycontinue, нужно еще и ошибку как-то обработать.
Попробуем три варианта, с ошибками и без.

Remove-Variable Labubu1 -ErrorAction SilentlyContinue; Remove-Variable Labubu2 -ErrorAction SilentlyContinue
$GutenTag01 = Test-Netconnection -ComputerName $MeineServerliste[0] -Port 5985
$GutenTag02 = Test-WSMan -ComputerName $MeineServerliste[0]
$GutenTag03 = Test-WSMan -ComputerName $MeineServerliste[0] -Authentication Default  -Credential $DieParole
$GutenTag04 = Test-WSMan -ComputerName $MeineServerliste[0] -Authentication Default  -Credential $DieParole -ErrorVariable $Labubu1 -OutVariable $Labubu2

В моем случае сервер  $MeineServerliste[0] точно включен и доступен, но.
$GutenTag01 выдаст объект «проверено, доступно».
$GutenTag02 отдаст три какие-то строки.
$GutenTag03 и $GutenTag04 не отдадут ничего, хотя в выводе я получу ошибку

The WinRM client cannot  process the request. If the authentication scheme is different from Kerberos, or if the client computer is not joined to a domain, then HTTPS transport must be used or  the destination machine must be added to the TrustedHosts configuration setting. Use winrm.cmd to configure TrustedHosts.

Тот же текст, что падает в переменную $Labubu1. Можно обрабатывать и так.

Часть 2.4 Проблема слишком больших прав
На этапе выдачи прав, особенно в сложной среде, возникают проблемы. Наибольшая проблема – менеджмент и отдел имитационной безопасности, прочитавшие пособие по информационной безопасности. Выглядит это так, как будто вахтер баба Маша, женщина как вахтер уважаемая, пришла в оружейную комнату за пулеметом. Потому что почему бы и нет. В итоге пулемет будет валяться в углу, приходи кто хочет, бери что хочет.
Будьте крайне осторожны с делегированием и разрешениями на данном этапе.

Часть 2.5 Разрешение удаленного подключения
Вернемся к делу. Выполню на удаленном сервере Enable-PSRemoting и посмотрю, что изменится. А потом сделаю
Set-Item WSMan:\localhost\Client\TrustedHosts -Value 192.168.10.100
где 192.168.10.100 – IP моего ПК. Делать так в продуктивной среде, конечно, ни надо ни в коем случае.

Firewall тоже не забудьте настроить.

Часть 2.5 Выбор методики первичного сбора информации
Есть несколько вариантов первичного сбора информации.  Часть серверов может быть выключена. Часть не быть доступна с каким-то из логинов-паролей, или там не включен WinRM сервис. Или сервис включен, но не доступен, потому что так настроен Firewall.
Перед тем, как обрабатывать «весь список компьютеров», возможно, имеет смысл проверить «все ли включены и доступны», сократив список для обработки. Те, что не доступны, постепенно обработать вручную, или ввести для них дополнительные проверки.

Часть 2.6 Параллельная обработка задач, -parallel,  powershell jobs, Runspaces
Если у вас 1..10.. 100 серверов, то их можно обработать и последовательно. Пусть на каждый уйдет даже 5 минут, всего 500 минут, поставил на ночь сбор первичной статистики, утром собрал. Если же вам надо быстро, и, конечно, асинхронно, потому что таймаут на некоторые тесты по умолчанию полчаса, то у вас не так много выбора между powershell jobs и runspaces

Поскольку тема достаточно сложная, то она будет вынесена в часть 4, или в часть 5.

Часть 2.7 И, наконец, получим первый список

$DataRemote1 = Get-HotFix -ComputerName $MeineServerliste[0] -Credential $DieParole

В нем есть, все что нам надо для первичной обработки, в том числе список установленных обновлений в поле
$DataRemote1[0].HotFixID

Остается дописать три строки:

$Fehlermeldung01 =  "Achtung, da ist etwas schiefgelaufen"
if (Test-Path $MeineErsteSicherungsdatei){$NewKeinArray = Import-Clixml -Path $MeineErsteSicherungsdatei}
else {Write-Host $Fehlermeldung01}

Часть 2.8 Итого

$PfadZurSpeicherdatenbank = $PSScriptRoot
$Skriptversion = "10"/
$MeineErsteLogin = $PfadZurSpeicherdatenbank + "\" + "dieparole.txt"
$DasPasswordFileExist  = Test-Path -Path $MeineErsteLogin

if ($DasPasswordFileExist -eq $false) {
$DieParole = Get-Credential
Export-Clixml -Path $MeineErsteLogin -InputObject $DieParole}

else {$DieParole = Import-Clixml $MeineErsteLogin}
#notepad $MeineErsteLogin

$MeineServerliste = @("192.168.2.150","192.168.2.151")

Remove-Variable Labubu1 -ErrorAction SilentlyContinue; Remove-Variable Labubu2 -ErrorAction SilentlyContinue
$GutenTag01 = Test-Netconnection -ComputerName $MeineServerliste[0] -Port 5985
$GutenTag02 = Test-WSMan -ComputerName $MeineServerliste[0]
$GutenTag03 = Test-WSMan -ComputerName $MeineServerliste[0] -Authentication Default  -Credential $DieParole -ErrorAction SilentlyContinue
$GutenTag04 = Test-WSMan -ComputerName $MeineServerliste[0] -Authentication Default  -Credential $DieParole -ErrorVariable $Labubu1 -OutVariable $Labubu2 -ErrorAction SilentlyContinue

$DataRemote1 = Get-HotFix -ComputerName $MeineServerliste[0] -Credential $DieParole
$DataRemote1[0].HotFixID
$Fehlermeldung01 =  "Achtung, da ist etwas schiefgelaufen"

if (Test-Path $MeineErsteSicherungsdatei){$NewKeinArray = Import-Clixml -Path $MeineErsteSicherungsdatei}
else {Write-Host $Fehlermeldung01}

Литература
Windows Update log files
Инвентаризация ИТ-активов штатными средствами Windows с минимальными правами доступа
Test-NetConnection
Test-WSMan
Powershell: How to encrypt and store credentials securely for use with automation scripts.
Save Credentials to File in PowerShell
Devblog -ErrorAction and -ErrorVariable
Everything you wanted to know about exceptions
Учебный блок (бесплатный от MS) Troubleshoot scripts and handle errors in Windows PowerShell
Mastering Error Handling in PowerShell with Try-Catch-Finally
Devblog PowerTip: Use PowerShell to View Trusted Hosts
Настройка удаленного взаимодействия в PowerShell (часть 1)
Настройка удаленного взаимодействия в PowerShell (часть 2)
UpdateService
JEA Session Configurations
Service Accounts Step-by-Step Guide - Managed service accounts and virtual accounts
Virtual Accounts well-known SID

Показать полностью 1
[моё] Windows IT Powershell Microsoft Wsus Видео YouTube Короткие видео Длиннопост
0
3
Вопрос из ленты «Эксперты»
a4oTakMozhno
a4oTakMozhno
1 день назад
Спроси Пикабу

Windows 10 сбрасывает умолчания для программ⁠⁠

Доброго дня, подскажите пожалуйста, Windows 10 сбрасывает умолчания для программ, в частности вьювер (портейбл фастстоун), браузер, видоепроигрыватель, ну и так по мелочам.
В основном работает прекрасно, но тут несколько дней назад произошла такая фигня.
С чем связано не могу сказать, обновы отключены, ничего не устанавливал.
По проблеме гуглил, внятных советов нет(
Через программы по умолчанию, и через ассоциации прорабатывал, хватает ровно до перезагрузки.
Да это, не чистая винда 10 от Ghost, как любят выражаться специалисты "говносборка". Но от джоста как раз огонь всегда.
М.б. ктот сталкивался такой траблой?

Windows 10  сбрасывает умолчания для программ Спроси Пикабу, Нужен совет, Консультация, Вопрос, Windows, Компьютерная помощь, Windows 10
Спроси Пикабу Нужен совет Консультация Вопрос Windows Компьютерная помощь Windows 10
7
2
LemonFrach
1 день назад

Отсутствует вкладка "доступ" в свойствах папки Windows 11⁠⁠

Я хотел предоставить доступ к общей папке, что бы и на телевизоре в нее можно было зайти и с ноутбука. Но не тут-то было. Хотел открыть доступ к папке на стационарном компьютере, а вкладки-то "доступ" нет. И я пошел шарить весь интернет в поисках ответа. И спустя два дня поисков и бессчетных попыток решить эту проблему, я отчаялся. Но уже на последнем запросе нашел ответ, который помог решить данную проблему.
Видимо когда я только установил Windows 11, я залез в "Службы" и зачем-то по отключал лишнее (как я думал).

В общем, решение проблемы на самом деле простое.

Зайти:
1) "Панель управления";
2)"Администрирование";
3) "Службы".
ИЛИ:
1) Нажмите Win + R, чтобы открыть диалоговое окно "Выполнить";
2) Введите services.msc и нажмите Enter или OK.

Убедитесь, что службы запущены и работают в автоматическом режиме (если нет, тыкнуть два раза на службу и поставить "Автоматически"):
1) "Браузер";
2) "Публикация ресурсов обнаружения функции";
3) "Сервер".

После, перезапустите компьютер и вкладка "Доступ" должна появиться.

Будьте бдительны, не отключайте то, что не знаете :)

[моё] Компьютерная помощь Windows Текст
9
204
ZIKVLD
ZIKVLD
1 день назад
Ключи к продуктам Microsoft

Ключ Windows 10/11 PRO⁠⁠

Ключ: 39KNK-MHRFF-GGPDW-R76HV-X766Y Activ. Count : 2800+

PS Кому не терпится а ключ уже Activ. Count : 0, можно активировать (постучав в телегу), получив CID., предоставив IID (идентификатор установки)

!!! Для получения IID берите на сервере в солянке батник:

* для Windows - IID_windows.bat

* для Office - IID_office.bat

PS батник создаст текстовый файл с IID

Ключ Windows 10/11 PRO Windows, Халява, Ключи, Ключ активации, Windows 10, Windows 11
Windows Халява Ключи Ключ активации Windows 10 Windows 11
22
25
DmitriitheFals
1 день назад
Лига Сисадминов
Серия Кудахтеры: powershell

Вспоминаем Powershell в нескольких частях. Часть 1. База из баз⁠⁠

Для ЛЛ: серия пометок по костылям

Конечная цель серии постов: написать свой очень маленький и очень кривой WSUS, поскольку развития WSUS больше не предвидится, но я про это писал:
Чего лишаемся в 2025 году внутри Microsoft

Часть 1. База из баз. Теория
Часть 1.1 Зачем ставить обновления на Linux и Windows и куда угодно, если в отделе работают проверенные электроником сотрудники, и все работает?
Часть 1.2 Чем плох WSUS, SCOM, прочее ПО, и факты в Ansible?
Часть 1.3 Почему Powershell, а не Python?
Часть 1.4 Прочие базовые вещи
Часть 1.5 Классы и объекты, для тех, кто пропускал школу
Часть 1.6 К теме обновлений в Windows
Часть 1.7 Как это все хранить и обрабатывать?
Часть 1.8 Давайте начинать. Мой первый класс
Часть 1.9 Немного магии, не очевидной с первого раза
Часть 1.10 Мой первый массив
Часть 1.11 Суй массив в файл. И забирай из файла
Часть 1.12 Теперь все вместе

Часть 1. База из баз. Теория
Часть 1.1 Зачем ставить обновления на Linux и Windows и куда угодно, если в отделе работают проверенные электроником сотрудники, и все работает?

Когда-то, на заре времен, выхода «второго сервис пака» просто ждали.
Windows XP вышел 25 октября 2001 и был сырым, совсем сырым.
Windows XP SP 2 вышел 6 августа 2004 года, и сделал XP популярным и рабочим на следующие лет 10. Это не считая Embedded версий, которые работали и работают и работают.
Поэтому 20 лет назад установка обновлений шла не от того, что «все работает», а от ожидания «сейчас вот это исправят, потом вон то».
Поэтому исторически тем, кто с системами давно плотно работает, вопрос «зачем» не понятен, очевидно же.

Классика последние 200 лет – не пейте из козьего копытца, не пейте из бутылочки с надписью яд -

for she had read several nice little stories about children who got burnt, and eaten up by wild beasts, and other unpleasant things, all because they would not remember the simple rules their friends had taught them: such as, that a red-hot poker will burn you if you hold it too long; and that, if you cut your finger very deeply with a knife, it usually bleeds; and she had never forgotten that, if you drink much from a bottle marked "poison," it is almost certain to disagree with you, sooner or later.”

Между тем, была и есть и другая тенденция в ИТ среде – не делать, что говорит производитель, а ждать, пока сломается, и потом делать вид, что работаешь.
Ничего не трогать, как писал другой автор –

Не выходи из комнаты, не совершай ошибку.
Зачем тебе Солнце, если ты куришь Шипку?
За дверью бессмысленно всё, особенно — возглас счастья.
Только в уборную — и сразу же возвращайся.


Эта же ситуация, с бедой с башкой, есть не только в ИТ.
Производитель говорит «меняйте масло каждые 10.000» - давайте ездить 15.000, я лучше знаю.
Производитель говорит «ставьте зимнюю резину до снега» - нет, каждый год на лысой летней резине кто-то застрянет на эстакадах и в кого то въедет.
Производитель говорит «меняйте ремень вариатора каждые 10.000» - нет, будут ездить до того момента, пока ремень не порвется.
Висят знаки «100» - давайте ездить 120.
Сказано «детям нельзя по дорогам общего пользования на спорт инвентаре» - ачотакова.
Беда с башкой  «а чо такова» и «такого со мной не произойдет» - явление постоянное и международное. Например, на днях признали, что на пике Победы теперь есть плюс один памятник. На Маттерхорне такого тоже хватает.

Вспоминаем Powershell в нескольких частях. Часть 1. База из баз Powershell, Windows, Центр обновления Windows, Wsus, Длиннопост

Беда с башкой 

Что же касается проверенных электроником сотрудников, то это работает исключительно в том случае, если у организации:
1 Организован закрытый контур управления системами, где физически, air gap, отключен интернет,
2 Фирма настолько маленькая, что через air gap никто не захочет перепрыгнуть. Потому что есть вирусы, сложным путем обходящие такие защиты. Например, Stuxnet.
3 Не смотря на это, в системе установлены обновления для средств контейнеризации и виртуализации, и сами средства корректно настроены. Потому что для Linux было несколько средств выхода в операционную систему хоста из виртуальной машины - Red Hat: CVE-2024-32462: flatpak: sandbox escape, Linux kernel vulnerability-CVE-2025–38236, CVE-2025-4609: Critical Sandbox Escape и так далее. К этому добавляется GhostHook и прочие неприятности.

Часть 1.2 Чем плох WSUS, SCOM, прочее ПО, и факты в Ansible?

WSUS ничем не плох, но в нем очень, для меня, неудобная отчетность. Отчетность показывает, что проблемы есть, но не показывает в удобном для меня разрезе, что установлено и почему, в том числе по остальным компонентам.

Со SCOM и прочим ПО для инвентаризации всплыла у коллег интересная проблема. Некоторое ПО (их внутренняя разработка) не вносит изменения в реестр Windows, поэтому не понятно, что обновилось, что нет. Остается смотреть версию файла, но WSUS не умеет отслеживать такие изменения, а на SCOM у них денег нет. Поскольку дело было в Windows, то пришлось идти другим путем.
Факты в Ansible всем хороши, кроме того что этот факт надо интерпретировать, и иметь какую-то базу для сверки и хранения эталонов.


Часть 1.3 Почему PowerShell, а не Python?

Особой разницы нет, но механизм другой. Я могу сделать задачу, которая выполнится на удаленном сервере, но даже для двух серверов это будет 1) удаленная 2) асинхронная задача. Это не самый удобный вариант, обрабатывать асинхронные данные на коленке, без разворачивания базы данных. Можно и на Python, просто чуть больше возни с компиляцией, подписыванием кода, и асинхронным получением данных в базу, и обработкой из базы. Все это сделать можно без проблем, но для начинающих проще, под Windows, сделать задачу на Powershell, без дополнительных компонентов.
То есть мне не надо для Powershell ставить VScode, Python, auto-py-to-exe, и убеждать параноящий антивирус «внести вот это в исключения». И сильно меньше рисков, что exe что-то сломает. И в отладке чуть проще.

Под Linux я бы вообще на RUST писал, не на Python.

Часть 1.4 Прочие базовые вещи

Я буду считать, что вы:
Прочитали хотя бы:
Школьный курс информатики – где рассказывают про типы данных и циклы
А.В.Попов. Введение в Windows PowerShell
А.В.Попов. Современный PowerShell. 2-е издание. - СПб.: БХВ-Петербург, 2025.
и парочку статей по теме – что такое командлеты, ввод-вывод и так далее.
Точно так же я буду считать, что вы как минимум запустили Powershell ISE.
Powershell ISE к сожалению не умеет работать с Git напрямую, как VScode с модулями, но можно поставить и сам Git, или можно жить (но грустно) без него, или жить по старинке с SVN.

Часть 1.5 Классы и объекты, для тех, кто пропускал школу

Даже 30 лет назад, даже Borland Turbo Pascal не говоря про Object Pascal, поддерживал не только Units, то есть внешние библиотеки, но и объекты, классы, и вот это все. С 1989, версии 5.5.
Все это было, в том числе в VBS, есть и в PowerShell

Нет никаких проблем (кроме того, что будет много букв) вызывать из PowerShell и методы Windows API, то есть графический интерфейс, и методы из Dotnet, и работать с внешними библиотеками, и обрабатывать ошибки и исключения.
Есть одно, лично мое исключение. Если вы работаете с web, и вам надо что-то обработать в Chrome или Firefox, то берите сразу Selenium. Он простой, куда проще, чем возиться с Powershell и Edge.

Часть 1.6 К теме обновлений в Windows

Что такое обновление с точки зрения статистики и "мне только посмотреть? "
Например, 2025-08 Cumulative Update for Microsoft server operating system version 24H2 for x64-based Systems (KB5063878) (26100.4946) ?
Это объект, у которого есть свойства:
Для какого продукта он предназначен: Microsoft Server Operating System
Для какой версии продукта он предназначен: 24H2 (это Windows server 2025)
Критичность: Microsoft Security Response Center (MSRC) severity: Critical
Номер: KB article numbers: 5063878
Дата выхода: 8/12/2025 (формат даты США, месяц/день/год, то есть 12 августа 2025. Это у них легаси такое, с времен церковно-учетных книг)
Язык: в данном случае не важен.
Почему продукт и версия разнесены? Потому что, и в дальнейшем это будет критично, у Microsoft с обновлениями dotnet случилась беда с версионностью. В итоге и для определения версии есть отдельная процедура, и обновления бывают для отдельных компонентов.
Нормально это унифицировали только где-то к выходу Windows Server 2022

Часть 1.7 Как это все хранить и обрабатывать?
Можно в виде битовой строки, где символы с 0 по 20 это продукт, с 20 по 40 это версия, итд.
Можно какими-то еще путями, для ускорения или компактности.
Можно сразу рисовать схему базы данных.
Или можно сделать класс с разными типами данных внутри класса, и создавать на основе этого класса – объекты, и массивы объектов, и много чего еще.

Плюсы? Легко расширять, легко просматривать. Легко хранить в виде xml
Низкий порог вхождения, если говорить простыми словами.

Часть 1.8 Давайте начинать. Мой первый класс

Пуск – выполнить - powershell ise, и вот он – стандартный интерфейс, недалеко ушедший от блокнота
Делаем File – save as - Meine erste Klasse, делаем пример, выполняем –

class Device {
[string]$Brand
}
$dev = [Device]::new()
$dev.Brand = "Fabrikam, Inc."
$dev

И оно работает!

Делаем пример, какой нам нужен

Class MeineErsteKlasse{
[string]$OS
[string]$Release
[string]$KB
[string]$KBDate}

<#Для какого продукта он предназначен: Microsoft Server Operating System
Для какой версии продукта он предназначен: 24H2 (это Windows server 2025)
Номер: KB article numbers: 5063878
Дата выхода: 8/12/2025 #>

$MeinErstklassigesBeispiel =[MeineErsteKlasse]::new()
$MeinErstklassigesBeispiel.OS = "Server"
$MeinErstklassigesBeispiel.Release = "24H2"
$MeinErstklassigesBeispiel.KB = "KB5063878"
$MeinErstklassigesBeispiel.KBDate = "12.08.2025"

$MeinErstklassigesBeispiel | Format-Table -AutoSize

Запускаем – работает.

Часть 1.9 Немного магии, не очевидной с первого раза

Когда мы не работает со скриптом интерактивно, когда он будет исполняться неизвестно где и неизвестно как, имеет смысл хранить «нужные для работы данные» где-то рядом.
Для этого в Powershell есть переменная $PSScriptRoot, отдающая объект типа строка, то есть «откуда скрипт запустился» и командлет Get-Location, который выдает объект с кучей других свойств.
Посмотрим:

$PSScriptRoot | Get-Member
Get-Location| Get-Member
$Data1 = Get-Location
$Data1.Path

Все наглядно.
Заведем переменную «где храним скрипты» и переменную версии, просто так чтобы была (не просто так)

$PfadZurSpeicherdatenbank = $PSScriptRoot
$Skriptversion = "10"
$MeineErsteSicherungsdatei = $PfadZurSpeicherdatenbank + "\" + "nur-eine-datei.xml"

Часть 1.10 Мой первый массив

Сделаем массив. Не массив конечно, в Powershell массивы это или хеш-таблицы (@{}), или кастомные объекты, типа [PSCustomObject]@{
или System.Collections.ArrayList  
создается, например, так:  $myArrayList = New-Object System.Collections.ArrayList
Или вариации на тему. Почему так? Потому что массив (array) в общем смысле, это объект фиксированного размера, и операция его расширения, если вы работаете с действительно большим объемом данных, это операции «создаем новый массив размером плюс 1, копируем туда старый массив, удаляем старый массив». Это дорогие операции, когда у вас миллионы объектов размерами хотя бы пара мегабайт.
Когда у вас скрипт уровня «я еще учусь» это не влияет значимо на скорость, но помнить и знать это нужно, чтобы потом не думать «ой, почему все так тормозит».

$keinArray = @()
$keinArray += $MeinErstklassigesBeispiel
#Старая переменная больше нам не нужна, удалим ее
Remove-Variable MeinErstklassigesBeispiel


Важный момент. Powershell для экономии использует всякие извращения с Mutable и будьте аккуратны с этим, потому что вот такое поведение с непривычки вызывает оторопь:

$Data1 = @(1,2,3,4)
$Data2 = $Data1
$Data1[2] = "N"
$Data2

Часть 1.11 Суй массив в файл. И забирай из файла

Export-Clixml -Path $MeineErsteSicherungsdatei -InputObject $KeinArray
notepad $MeineErsteSicherungsdatei
$NewKeinArray = Import-Clixml -Path $MeineErsteSicherungsdatei
$NewKeinArray

Поздравляю, вы великолепны.

Часть 1.12 Теперь все вместе

Class MeineErsteKlasse{
[string]$OS
[string]$Release
[string]$KB
[string]$KBDate}

<#Для какого продукта он предназначен: Microsoft Server Operating System
Для какой версии продукта он предназначен: 24H2 (это Windows server 2025)
Номер: KB article numbers: 5063878
Дата выхода: 8/12/2025 #>

$MeinErstklassigesBeispiel =[MeineErsteKlasse]::new()
$MeinErstklassigesBeispiel.OS = "Server"
$MeinErstklassigesBeispiel.Release = "24H2"
$MeinErstklassigesBeispiel.KB = "KB5063878"
$MeinErstklassigesBeispiel.KBDate = "12.08.2025"

$MeinErstklassigesBeispiel | Format-Table -AutoSize

$PfadZurSpeicherdatenbank = $PSScriptRoot
$Skriptversion = "10"
$MeineErsteSicherungsdatei = $PfadZurSpeicherdatenbank + "\" + "nur-eine-datei.xml"

$KeinArray = @()
$KeinArray += $MeinErstklassigesBeispiel
Remove-Variable MeinErstklassigesBeispiel

Export-Clixml -Path $MeineErsteSicherungsdatei -InputObject $KeinArray
notepad $MeineErsteSicherungsdatei
$NewKeinArray = Import-Clixml -Path $MeineErsteSicherungsdatei
$NewKeinArray

Литература
about_Classes
How to Use PowerShell Variables
about_Ref

Продолжение следует

Показать полностью 1
[моё] Powershell Windows Центр обновления Windows Wsus Длиннопост
3
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии