Предупреждение
Ответы на этот тестовый вызов для конкретной версии патча, которая помогает остановить атаки WannaCrypt / WannaCry. В зависимости от вашей операционной системы у вас может быть другой патч. Лучший способ защитить себя - убедиться, что ваш компьютер полностью обновлен, и соблюдать осторожность при открытии вложений и веб-ссылок.
Введение
Мне нравится думать, что программисты по своей природе хорошие люди, даже если некоторые из них не так хороши , поэтому давайте поможем людям убедиться, что они защищены патчем MS17-010 .
Вызов
Ваша задача - написать полную программу или функцию, которая возвращает истинное или ошибочное значение в зависимости от того, установлено ли исправление MS17-010 в текущей операционной системе.
Вход и выход
Вход: ввод не требуется
Вывод: истинное или ложное значение (укажите, какое значение используется для каждого случая). Ошибка / исключение можно считать ошибочным значением.
правила
- Ваш код должен запускаться (и выводиться правильно) как минимум в одной операционной системе Windows, для которой доступно исправление, но не обязательно в каждой операционной системе (укажите какие-либо ограничения).
- Применяются стандартные лазейки
- Это код-гольф , поэтому выигрывает представление с наименьшим количеством байтов!
Ответы:
PowerShell 2.0,
242016 байт-4 байта благодаря @whither , удаляя
-id
.-4 байта благодаря @ DankoDurbić , изменив
get-hotfix
наhotfix
.KB4012212
Это патч для Windows 7. Его можно заменить любым KB-кодом со связанной страницы патча .Возвращает информацию об источнике , описании , HotFixID , InstalledBy и InstalledOn, когда она установлена как истинное значение, и выдаст ошибку, если не сможет найти ее как значение false.
Вот пример как правдивого, так и ложного вывода (
KB4012212
он установлен на моей машине, ноKB4012215
не установлен):источник
Get-HotFix KB4012212
будет работать тоже. (Проверено только с PSv4). Но я согласен с Яном Двораком, я не думаю, что результат подтверждает вызов.hotfix KB4012212
достаточно. В Powershell вам не нужно писатьget-
.Пакетная / Windows CMD,
31292823 байта-1 байт благодаря @SteveFest , изменив
findstr 4012212
наfind "4012212"
.-5 байт благодаря @BassdropCumberwubwubwub путем удаления
list
.Объяснение:
Выводит некоторую информацию о патче, если он установлен, или ничего другого.
На скриншоте ниже патч
4012212
установлен, а4012215
его нет.источник
find
вместоfindstr
, это экономит 3 байтаfind "4012212"
также работает на -1 байт,wmic qfe|find "4012212"
кажется, тоже работает, но, может быть, я что-то там упускаю?Bash + Cygwin (или WSL), 21 байт
Этот ответ в основном украден из ответа Кевина . Так что бросайте голосование таким же образом, если вы считаете, что оно того заслуживает.
Cygwin имеет доступ к командам Windows в дополнение к coreutils. Мы можем использовать coreutils
grep
вместо Windows,find
поэтому нам не нужно использовать кавычки. Благодаря этому 2 байта сохраняются.источник
Powershell 5.1,
245212207 байт-33 байта благодаря @KevinCruijssen, удаляющим пробелы и заменяющим true и false на 1 и 0.
-5 байт благодаря сокращению имен переменных @KevinCruijssen
Очевидно, что он не выиграет никаких призов, но этот скрипт powershell проверит журнал истории Центра обновления Майкрософт для KB4013429 (один из патчей, указанных в ссылке ), его можно заменить любым из патчей. Думал, что выложу, потому что будет немного надежнее, если патч будет заменен более поздним.
источник
1
/0
вместоtrue
/false
.$S=New-Object -ComObject Microsoft.Update.Session;$Se=$S.CreateUpdateSearcher();$Hc=$Se.GetTotalHistoryCount();$p=0;$Se.QueryHistory(0,$Hc)|ForEach-Object -Process{if($_.Title -like"*KB4013429*"){$p=1;}};echo $p;
Hc
чтобыH
иSe
кT
(или другой одной букве к томуH
илиS
который вы уже использовали) , чтобы сохранить еще 5 байт. :)$H
прямо вместо хранения в? Также%{ }
и?{ }
вместоForEach-Object
иif
. Уверен, что вы можете просто выводить данные в конвейер, а не в эхо, так как у вас должен быть только один результат, и я думаю, что это будет считаться правдивым на основании OPC #,
178143141134 байтаКомпилируется туда,
Func<int, bool>
где ввод не используется.Сохранено 35 байт с помощью @Ryan.
Сохранено 2 байта благодаря @KevinCruijssen.
Сохранено 7 байтов благодаря @ErikKarlsson.
Отформатированная версия:
источник
if(h["HotFixID"]=="KB4012212")return 1>0;return 1<0;
же, какreturn h["HotFixID"]=="KB4012212"
?count
в конце».get()
? Как это:_=>{if (new System.Management.ManagementObjectSearcher("SELECT HotFixID FROM Win32_QuickFixEngineering WHERE HotFixID = 'KB3150513'").Get().Count > 0)return 1>0;return 1<0;};
. Чтобы сохранить 4 байтаSELECT HotFixID
наSELECT *
.Cygwin, 31 байт
Просто чтобы играть в бунтаря
Код возврата будет 0, если патч был применен, или 1, если он не был.
Протестировано под Windows 7 с Cygwin 2.6.0
источник
KB
?KB
поскольку маловероятно, что4012212
это будет там ни с чем, кроме пути. Вы также можете сохранить 1 байт, если вы удалите только K, потому что вы не найдетеB4012212
случайным образом без пути.K
первого кажется разумным, но затемB...
становится действительным шестнадцатеричным представлением, что делает возможным столкновение с UID и шестнадцатеричными кодамиPowerShell v4, 64 байта
Проверяет все ссылки на КБ с помощью RegEx (теперь у вас есть две проблемы)
источник
Пакетная / командная строка,
2725 байтЕсли найдено KB4012212, выведите это, иначе ничего не выводится.
Спасибо @Kevin за сохранение 2 байта :)
источник
systeminfo|find "4012212"
для -2 байтов.Powershell 2.0, 142 байта
Ниже приведены все КБ за март, но их необходимо увеличить с апреля по май, так как каждый из них заменяет все предыдущие.
источник
(Get-HotFix | where
на(HotFix|where
(пробелы удалены иGet-
удалены.Powershell 5.1 134 Bytes
То же, что и у Марка Пиппина, но поменял Get-Hotfix на Hotfix и куда? экономия 8 байт
Я не могу получить это меньше в подсчете байтов, чем ответ Кевина
источник
(HotFix|? HotFixID ...
для -2 байтов.DISM , 40 байт
Объяснение:
Выводит идентификатор пакета, если он установлен, или ничего другого.
На скриншоте ниже патч
4012212
установлен, а4012215
его нет.источник