Aviso
As respostas para este desafio testam uma versão específica do patch que ajuda a interromper os ataques WannaCrypt / WannaCry. Dependendo do seu sistema operacional, você pode ter um patch diferente. A melhor maneira de se proteger é garantir que seu PC esteja totalmente atualizado e ter cuidado ao abrir anexos e links da web.
Introdução
Eu gosto de pensar que os programadores são inerentemente boas pessoas, mesmo que alguns não sejam tão legais , então vamos ajudar as pessoas a garantir que estejam protegidas com o patch MS17-010 .
Desafio
Seu desafio é escrever um programa ou função completo que retorne um valor de verdade ou falsey, dependendo se o patch MS17-010 estiver instalado no sistema operacional atual.
Entrada e saída
Entrada: Nenhuma entrada necessária
Saída: um valor de verdade ou falsey (indique qual é usado para cada caso). Um erro / exceção pode ser considerado um valor falsey.
Regras
- Seu código deve ser executado (e gerado corretamente) em pelo menos um sistema operacional Windows para o qual o patch está disponível, mas não precisa ser executado em todos os sistemas operacionais (indique quaisquer limitações).
- Aplicam-se brechas padrão
- Isso é código-golfe , então a submissão com a menor quantidade de bytes ganha!
Respostas:
PowerShell 2.0,
242016 bytes-4 bytes graças a @whatever removendo
-id
.-4 bytes graças a @ DankoDurbić mudando
get-hotfix
parahotfix
.KB4012212
é o patch para Windows 7. Isso pode ser substituído por qualquer código KB da página vinculada do patch .Retornará as informações Source , Description , HotFixID , InstalledBy e InstalledOn quando instaladas como valor de verdade e causará um erro se não conseguir encontrá-lo como valor falsey.
Aqui está um exemplo de uma saída truthy e falsey (por isso
KB4012212
é instalada na minha máquina, masKB4012215
não é):fonte
Get-HotFix KB4012212
também funcionará. (Testado apenas com PSv4). Mas eu concordo com Jan Dvorak, não acho que a saída confirme o desafio.hotfix KB4012212
é suficiente. No Powershell, você não precisa escreverget-
.Lote / Windows CMD,
31292823 bytes-1 byte graças a @SteveFest , alterando
findstr 4012212
parafind "4012212"
.-5 bytes graças a @BassdropCumberwubwubwub removendo
list
.Explicação:
Produz algumas informações de patch, se estiverem instaladas, ou nada do contrário.
Na captura de tela abaixo, o patch
4012212
está instalado e4012215
não está.fonte
find
, em vez defindstr
, ele salva 3 bytesfind "4012212"
também funciona para -1 byte,wmic qfe|find "4012212"
parece funcionar também, mas talvez eu esteja faltando alguma coisa lá?Bash + Cygwin (ou WSL), 21 bytes
Essa resposta é principalmente roubada da resposta de Kevin . Portanto, jogue um voto positivo dessa maneira também se você acha que isso merece um.
O Cygwin tem acesso aos comandos do Windows, além dos coreutils. Podemos usar coreutils em
grep
vez de Windows,find
portanto não precisamos usar aspas. 2 bytes são salvos por causa disso.fonte
Powershell 5.1,
245212207 bytes-33 bytes graças a @KevinCruijssen removendo o espaço em branco e substituindo true e false por 1 e 0.
-5 bytes graças a @KevinCruijssen, abreviando nomes de variáveis
Obviamente, você não ganhará nenhum prêmio, mas esse script do PowerShell verificará o log de histórico do Microsoft Update para KB4013429 (um dos patches listados no link ) e pode ser substituído por qualquer um dos patches. Pensei em publicá-lo porque é um pouco mais confiável se o patch for substituído por um posterior.
fonte
1
/ em0
vez detrue
/false
. Assim:$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
paraH
eSe
paraT
(ou outra letra única alémH
ouS
que você já usou) para salvar outros 5 bytes. :)$H
diretamente em vez de armazenar? Também%{ }
e em?{ }
vez deForEach-Object
eif
. Certeza que você pode simplesmente enviado para o pipeline em vez do eco desde que você deve ter apenas uma partida resultado e acho que isso contaria como truthy baseado no OPC #,
178143141134 bytesCompila para um local
Func<int, bool>
onde a entrada não é utilizada.Economizou 35 bytes com a ajuda de @Ryan
Economizou 2 bytes graças a @KevinCruijssen
Economizou 7 bytes graças a @ErikKarlsson
Versão formatada:
fonte
if(h["HotFixID"]=="KB4012212")return 1>0;return 1<0;
o mesmo quereturn h["HotFixID"]=="KB4012212"
?count
no final da.get()
? Como esta:_=>{if (new System.Management.ManagementObjectSearcher("SELECT HotFixID FROM Win32_QuickFixEngineering WHERE HotFixID = 'KB3150513'").Get().Count > 0)return 1>0;return 1<0;};
. Para salvar 4 bytesSELECT HotFixID
porSELECT *
.Cygwin, 31 bytes
Apenas para bancar o rebelde
o código de retorno será 0 se o patch foi aplicado ou 1 se não tiver sido.
Testado no Windows 7 com Cygwin 2.6.0
fonte
KB
?KB
pois é improvável que4012212
exista algo além do caminho. Você também pode economizar 1 byte se remover apenas o K, porque você não encontraráB4012212
aleatoriamente sem o caminho.K
primeiro parece razoável, mas depoisB...
se torna uma representação hexadecimal válido, fazendo colisão com UIDs e códigos hexadecimais possívelPowerShell v4, 64 bytes
Verifica todas as referências de KB usando um RegEx (agora você tem dois problemas)
fonte
Lote / prompt de comando,
2725 bytesSe for encontrado KB4012212, é gerado um resultado que, caso contrário, nada é gerado.
Obrigado a @ Kevin por salvar 2 bytes :)
fonte
systeminfo|find "4012212"
para -2 bytes.Powershell 2.0, 142 bytes
Abaixo, contém todos os KBs de março, mas as necessidades foram expandidas com abril e maio de KB, pois cada um substitui todos os anteriores.
fonte
(Get-HotFix | where
para(HotFix|where
(espaços removidos eGet-
removidos.)Powershell 5,1 134 bytes
O mesmo que Mark Pippin, mas mudou o Get-Hotfix para Hotfix e para onde? economizando 8 bytes
Não consigo diminuir a contagem de bytes do que a resposta de Kevin
fonte
(HotFix|? HotFixID ...
para -2 bytes.DISM , 40 bytes
Explicação:
Produz a identidade do pacote, se estiver instalado, ou nada diferente.
Na captura de tela abaixo, o patch
4012212
está instalado e4012215
não está.fonte