Advertencia
Las respuestas a esta prueba de desafío para una versión específica del parche que ayuda a detener los ataques WannaCrypt / WannaCry. Dependiendo de su sistema operativo, puede tener un parche diferente. La mejor manera de protegerse es asegurarse de que su PC esté completamente actualizada y tener cuidado al abrir archivos adjuntos y enlaces web.
Introducción
Me gusta pensar que los programadores son personas inherentemente buenas, incluso si algunos no son tan amables , así que ayudemos a las personas a asegurarse de que estén protegidos con el parche MS17-010 .
Desafío
Su desafío es escribir un programa o función completa que devuelva un valor verdadero o falso dependiendo de si el parche MS17-010 está instalado en el sistema operativo actual.
Entrada y salida
Entrada: no se requiere entrada
Salida: Un valor verdadero o falso (indique cuál se utiliza para cada caso). Un error / excepción puede considerarse un valor falsey.
Reglas
- Su código debe ejecutarse (y salir correctamente) en al menos un sistema operativo Windows para el que esté disponible el parche, pero no tiene que ejecutarse en todos los sistemas operativos (indique las limitaciones).
- Se aplican lagunas estándar
- Este es el código de golf , por lo que gana el envío con la menor cantidad de bytes.
Respuestas:
PowerShell 2.0,
242016 bytes-4 bytes gracias a @whatever eliminando
-id
.-4 bytes gracias a @ DankoDurbić cambiando
get-hotfix
ahotfix
.KB4012212
es el parche para Windows 7. Esto se puede reemplazar con cualquier código KB de la página vinculada del parche .Devolverá la información de Fuente , Descripción , HotFixID , InstalledBy e InstalledOn cuando se instale como valor verdadero, y dará un error si no puede encontrarlo como valor falsey.
Aquí hay un ejemplo de un resultado verdadero y falso (por lo que
KB4012212
está instalado en mi máquina, peroKB4012215
no lo está):fuente
Get-HotFix KB4012212
también funcionará. (Probado solo con PSv4). Pero estoy de acuerdo con Jan Dvorak, no creo que la salida confirme el desafío.hotfix KB4012212
es suficiente. En Powershell no necesitas escribirget-
.Lote / Windows CMD,
31292823 bytes-1 byte gracias a @SteveFest cambiando
findstr 4012212
afind "4012212"
.-5 bytes gracias a @BassdropCumberwubwubwub mediante la eliminación
list
.Explicación:
Emite alguna información de parche si está instalada, o nada de lo contrario.
En la captura de pantalla a continuación, el parche
4012212
está instalado y4012215
no lo está.fuente
find
lugar defindstr
, ahorra 3 bytesfind "4012212"
también funciona para -1 byte,wmic qfe|find "4012212"
parece funcionar también, pero ¿tal vez me falta algo?Bash + Cygwin (o WSL), 21 bytes
Esta respuesta es mayormente robada de la respuesta de Kevin . Así que lanza un voto positivo de esa manera también si crees que se lo merece.
Cygwin tiene acceso a los comandos de Windows además de coreutils. Podemos usar coreutils en
grep
lugar de Windows,find
por lo que no necesitamos usar comillas. 2 bytes se guardan debido a esto.fuente
Powershell 5.1,
245212207 bytes-33 bytes gracias a @KevinCruijssen eliminando espacios en blanco y reemplazando verdadero y falso con 1 y 0.
-5 bytes gracias a @KevinCruijssen acortando nombres de variables
Obviamente no va a ganar ningún premio, pero este script de PowerShell verificará el registro del historial de Microsoft Update para KB4013429 (uno de los parches enumerados en el enlace ) que se puede reemplazar con cualquiera de los parches. Pensé en publicarlo porque es un poco más confiable si el parche ha sido reemplazado por uno posterior.
fuente
1
/ en0
lugar detrue
/false
. Así:$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;
( 212 bytes )Hc
toH
y elSe
toT
(u otra letra única ademásH
oS
que ya haya usado) para guardar otros 5 bytes. :)$H
directamente en lugar de guardarlo? También%{ }
y en?{ }
lugar deForEach-Object
yif
. Estoy bastante seguro de que solo puede enviar a la tubería en lugar del eco, ya que solo debería tener una coincidencia de resultados y creo que eso contaría como verdadero según el OPC #,
178143141134 bytesCompila a
Func<int, bool>
donde la entrada no se utiliza.Guardado 35 bytes con la ayuda de @Ryan
Guardado 2 bytes gracias a @KevinCruijssen
Guardado 7 bytes gracias a @ErikKarlsson
Versión formateada:
fuente
if(h["HotFixID"]=="KB4012212")return 1>0;return 1<0;
mismo quereturn h["HotFixID"]=="KB4012212"
?count
al final de la.get()
? De esta manera:_=>{if (new System.Management.ManagementObjectSearcher("SELECT HotFixID FROM Win32_QuickFixEngineering WHERE HotFixID = 'KB3150513'").Get().Count > 0)return 1>0;return 1<0;};
. Para guardar 4 bytesSELECT HotFixID
conSELECT *
.Cygwin, 31 bytes
Solo para jugar al rebelde
el código de retorno será 0 si se ha aplicado el parche o 1 si no se ha aplicado.
Probado en Windows 7 con Cygwin 2.6.0
fuente
KB
?KB
ya que es bastante improbable que4012212
haya algo más que la ruta. También podría guardar 1 byte si elimina solo la K porque no encontraráB4012212
al azar sin la ruta.K
primero parece razonable, pero luego seB...
convierte en una representación hexadecimal válida, lo que hace posible la colisión con UID y códigos hexadecimalesPowerShell v4, 64 bytes
Comprueba todas las referencias de KB utilizando un RegEx (ahora tiene dos problemas)
fuente
Lote / Símbolo del sistema,
2725 bytesSi se encuentra KB4012212, esto no se genera.
Gracias a @Kevin por guardar 2 bytes :)
fuente
systeminfo|find "4012212"
por -2 bytes.Powershell 2.0, 142 bytes
A continuación contiene todos los KB de marzo, pero las necesidades se expandieron con abril y mayo, ya que cada uno reemplaza a todos los anteriores.
fuente
(Get-HotFix | where
a(HotFix|where
(espacios eliminados yGet-
eliminados.Powershell 5.1 134 Bytes
Igual que Mark Pippin pero cambió el Get-Hotfix a Hotfix y ¿hacia dónde? ahorrando 8 bytes
No puedo hacerlo más bajo en conteo de bytes que la respuesta de Kevin
fuente
(HotFix|? HotFixID ...
por -2 bytes.DISM , 40 bytes
Explicación:
Emite la identidad del paquete si está instalado, o nada de lo contrario.
En la captura de pantalla a continuación, el parche
4012212
está instalado y4012215
no lo está.fuente