Warnung
Die Antworten auf diesen Herausforderungstest für eine bestimmte Version des Patches, mit dessen Hilfe WannaCrypt / WannaCry-Angriffe gestoppt werden können. Abhängig von Ihrem Betriebssystem verfügen Sie möglicherweise über einen anderen Patch. Am besten schützen Sie sich, indem Sie sicherstellen, dass Ihr PC auf dem neuesten Stand ist, und beim Öffnen von Anhängen und Weblinks vorsichtig vorgehen.
Einführung
Ich denke gern, dass Programmierer von Natur aus gute Leute sind, auch wenn einige nicht so nett sind. Lassen Sie uns den Leuten helfen, sicherzustellen, dass sie mit dem MS17-010-Patch geschützt sind .
Herausforderung
Ihre Herausforderung besteht darin, ein vollständiges Programm oder eine vollständige Funktion zu schreiben, die je nachdem, ob der Patch MS17-010 auf dem aktuellen Betriebssystem installiert ist , einen Wahrheits- oder einen falschen Wert zurückgibt.
Ein- und Ausgang
Eingabe: Keine Eingabe erforderlich
Ausgabe: Ein wahrer oder falscher Wert (Geben Sie an, welcher Wert für jeden Fall verwendet wird). Ein Fehler / eine Ausnahme kann als falscher Wert angesehen werden.
Regeln
- Ihr Code sollte auf mindestens einem Windows-Betriebssystem ausgeführt (und korrekt ausgegeben) werden, für das der Patch verfügbar ist, muss jedoch nicht auf jedem Betriebssystem ausgeführt werden (bitte geben Sie Einschränkungen an).
- Es gelten Standardlücken
- Das ist Code-Golf , also gewinnt die Einsendung mit der geringsten Anzahl von Bytes!
Antworten:
PowerShell 2.0,
242016 Byte-4 Bytes dank @whatever durch Entfernen
-id
.-4 Bytes dank @ DankoDurbić durch den Wechsel
get-hotfix
zuhotfix
.KB4012212
ist der Patch für Windows 7. Dieser kann durch einen beliebigen KB-Code von der verlinkten Seite des Patches ersetzt werden .Wird die Rück Quelle , Beschreibung , HotFixID , InstalledBy und InstalledOn Informationen , wenn es als truthy Wert installiert ist, und einen Fehler geben , wenn es nicht in der Lage ist es als Falsey Wert zu finden.
Hier ist ein Beispiel für eine Ausgabe in Wahrheit und in Falsch (wird also
KB4012212
auf meinem Computer installiert, ist es aberKB4012215
nicht):quelle
Get-HotFix KB4012212
wird auch funktionieren. (Nur mit PSv4 getestet). Aber ich stimme Jan Dvorak zu, ich glaube nicht, dass die Ausgabe die Herausforderung bestätigt.hotfix KB4012212
ist genug. In Powershell müssen Sie nicht schreibenget-
.Batch / Windows CMD,
31292823 Bytes-1 Byte dank @SteveFest durch Ändern
findstr 4012212
auffind "4012212"
.-5 Bytes dank @BassdropCumberwubwubwub durch Entfernen
list
.Erläuterung:
Gibt einige Patch-Informationen aus, falls installiert, oder sonst nichts.
In der Abbildung unten ist der Patch
4012212
installiert und4012215
nicht.quelle
find
stattdessenfindstr
, es speichert 3 Bytesfind "4012212"
funktioniert auch für -1 Byte,wmic qfe|find "4012212"
scheint auch zu funktionieren, aber vielleicht fehlt mir dort etwas?Bash + Cygwin (oder WSL), 21 Byte
Diese Antwort wird meistens aus Kevins Antwort gestohlen . Wirf auf diese Weise eine Gegenstimme, auch wenn du denkst, dass dies eine verdient.
Cygwin hat neben coreutils auch Zugriff auf die Windows-Befehle. Wir können Coreutils
grep
anstelle von Windows verwenden,find
sodass wir keine Anführungszeichen verwenden müssen. Dadurch werden 2 Bytes eingespart.quelle
Powershell 5.1,
245212207 Bytes-33 Bytes dank @KevinCruijssen, der Leerzeichen entfernt und true und false durch 1 und 0 ersetzt.
-5 Bytes dank @KevinCruijssen Verkürzung der Variablennamen
Natürlich werden keine Preise gewonnen, aber dieses Powershell-Skript überprüft das Microsoft Update-Verlaufsprotokoll auf KB4013429 (eines der im Link aufgelisteten Patches ), das durch eines der Patches ersetzt werden kann. Ich dachte, ich würde es posten, weil es ein bisschen zuverlässiger ist, wenn der Patch durch einen späteren ersetzt wird.
quelle
1
/0
anstelle vontrue
/ verwendenfalse
. Wie$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
zuH
und dieSe
zuT
(oder einem anderen einzelnen Buchstaben nebenH
oderS
die Sie bereits verwendet haben) weitere 5 Bytes zu speichern. :)$H
direkt übergeben, anstatt zu speichern? Auch%{ }
und?{ }
anstelle vonForEach-Object
undif
. Ziemlich sicher, dass Sie nur in die Pipeline ausgeben können und nicht in das Echo, da Sie nur eine Übereinstimmung mit den Ergebnissen haben sollten, und ich denke, dass dies aufgrund des OP als wahr angesehen werden würdeC #
178143141134 BytesKompiliert in einen Bereich,
Func<int, bool>
in dem die Eingabe nicht verwendet wird.35 Bytes mit Hilfe von @Ryan
gespeichert 2 Bytes dank @KevinCruijssen
gespeichert 7 Bytes dank @ErikKarlsson gespeichert
Formatierte Version:
quelle
if(h["HotFixID"]=="KB4012212")return 1>0;return 1<0;
dasselbe wiereturn h["HotFixID"]=="KB4012212"
?count
am Ende der eine hinzufügen.get()
? Wie folgt aus :_=>{if (new System.Management.ManagementObjectSearcher("SELECT HotFixID FROM Win32_QuickFixEngineering WHERE HotFixID = 'KB3150513'").Get().Count > 0)return 1>0;return 1<0;};
. Um 4 Bytes zu sparenSELECT HotFixID
mitSELECT *
.Cygwin, 31 Bytes
Nur um den Rebellen zu spielen
Der Rückkehrcode ist 0, wenn der Patch angewendet wurde, oder 1, wenn er nicht angewendet wurde.
Getestet unter Windows 7 mit Cygwin 2.6.0
quelle
KB
?KB
da es eher unwahrscheinlich ist, dass4012212
etwas anderes als der Pfad vorhanden ist. Sie könnten auch 1 Byte sparen, wenn Sie nur das K entfernen, da SieB4012212
ohne den Pfad nicht zufällig finden werden.K
erste zu entfernen, erscheint vernünftig, wird dann aberB...
zu einer gültigen Hex-Darstellung, was eine Kollision mit UIDs und Hex-Codes ermöglichtPowerShell v4, 64 Byte
Überprüft alle KB-Verweise mit einem RegEx (jetzt haben Sie zwei Probleme)
quelle
Batch / Eingabeaufforderung,
2725 BytesWenn KB4012212 gefunden wird, wird das ausgegeben, andernfalls wird nichts ausgegeben.
Vielen Dank an @ Kevin für das Speichern von 2 Bytes :)
quelle
systeminfo|find "4012212"
für -2 Bytes.Powershell 2.0, 142 Bytes
Unten finden Sie alle KBs vom März, die jedoch mit den KBs vom April und Mai erweitert werden müssen, da jede KB alle vorherigen ersetzt.
quelle
(Get-HotFix | where
um(HotFix|where
(Leerzeichen entfernt undGet-
entfernt.Powershell 5.1 134 Bytes
Wie Mark Pippin, aber den Get-Hotfix in Hotfix geändert und wohin? 8 Bytes sparen
Ich kann es nicht niedriger in der Byteanzahl als die Antwort von Kevin bekommen
quelle
(HotFix|? HotFixID ...
für -2 Bytes.DISM , 40 Bytes
Erläuterung:
Gibt die Paketidentität aus, wenn sie installiert ist, oder nichts anderes.
In der Abbildung unten ist der Patch
4012212
installiert und4012215
nicht.quelle