Como excluir tarefas agendadas do Windows Defender?

4

Eu agendei uma tarefa que deve ser executada a cada duas horas, com a seguinte ação de linha de comando:

  • Programa: mshta
  • Argumentos: vbscript:Execute("CreateObject(""Wscript.Shell"").Run ""powershell -NoLogo -Command """"& 'X:\Path\To\Custom\powershellScript.ps1'"""""", 0 : window.close")

A cada duas horas, em vez de a tarefa ser executada, estou recebendo:

enohistóricodoDefender:

EunãoqueropararoWindowsDefenderdevidoapossíveisimplicaçõesdesegurançaaofazerisso.ExisteumamaneiradeadicionarexclusãonoDefenderparaignoraratarefa?.

Eutenteiadicionarcaminhodescript,pasta,mshta.exeepowershell.exeàsexclusões,etambémps1aostiposdearquivo.Nadafunciona.

Apropósito,oDefendernãoremoveatarefa,ouoscriptquedeveserexecutado,apenasimpedesuaexecução.

Esclarecimento:

  • Eledeveserexecutadoemsegundoplano,nenhumajaneladeveaparecerquandoatarefaéexecutada,deveserexecutadacomousuárioseeleestiverlogado,nãoqueroarmazenarsenha/executarcomoutrousuáriocontaouprivilégiosmaisaltos.

  • Oscriptdeveserexecutadocomoousuáriologado.Oobjetivoémudaropapeldeparedeparaousuáriologadoparaumbaixado($picturePathvariable).Trecho:

$registryPropertyPath="HKCU:\Control Panel\Desktop\"
    $registryPropertyName = "Wallpaper"
    $wallpaperProperty = (Get-ItemProperty -Path $registryPropertyPath -Name $registryPropertyName).WallPaper
    if ($wallpaperProperty -ne $picturePath) {
        Set-ItemProperty -Path $registryPropertyPath -Name $registryPropertyName -Value $picturePath
        for ($i = 0; $i -lt 20; $i++) {
            RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters 1, True
        }
    }
    
por Hex 25.06.2018 / 18:27

3 respostas

3

Novamente, conforme observado, se você fizer isso, será apenas uma ação de tipo de vírus e deverá ser bloqueada.

Como observa o @HackSlash, essa é a maneira correta de fazer isso.

Quando você diz uma janela do Windows por causa disso, e deve porque você está iniciando um novo shell e o shell tem que ser iniciado e mostrado como ativo. Você pode simplesmente adicionar a propriedade WindowStyle -minimize ou -hidden switch para diminuir isso.

https://docs.microsoft.com/en-us/powershell/scripting/core-powershell/console/powershell.exe-command-line-help?view=powershell-6

PowerShell[.exe] [-Command { - | [-args ] | [] } ] [-EncodedCommand ] [-ExecutionPolicy ] [-File []] [-InputFormat {Text | XML}] [-Mta] [-NoExit] [-NoLogo] [-NonInteractive] [-NoProfile] [-OutputFormat {Text | XML}] [-PSConsoleFile | -Version ] [-Sta] [-WindowStyle ]

PowerShell[.exe] -Help | -? | /?

-WindowStyle

Sets the window style for the session. Valid values are Normal, Minimized, Maximized and Hidden.

Ou esta abordagem, uma vez que até mesmo a janela acima irá momentaneamente piscar.

Howto hide a PowerShell prompt

http://jeffwouters.nl/index.php/2015/09/howto-hide-a-powershell-prompt

Ou este

Sneaky PowerShell Trick: Run Completely Without A Window

static void Main(string[] args) { var powershell = PowerShell.Create(); powershell.AddScript(@" Get-ChildItem -Path c:\temp | out-file c:\temp\shh.txt "); var handler = powershell.BeginInvoke(); while (!handler.IsCompleted) Thread.Sleep(200); powershell.EndInvoke(handler); powershell.Dispose(); }

https://workingsysadmin.com/sneaky-powershell-trick-run-completely-without-a-window

    
por 25.06.2018 / 20:25
1

O evento de detecção vem do uso de um método não seguro para chamar o PowerShell. Não use o Wscript para ligar para o Powershell, apenas um vírus faria isso. ;-D

Tente este método de chamar seu script:

  • Programa: powershell.exe
  • Argumentos: -ExecutionPolicy Bypass -NoLogo -NonInteractive -WindowStyle Hidden X:\Path\To\Custom\powershellScript.ps1
por 25.06.2018 / 18:45
0

Quanto a isso ...

My script invokes RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters 1, True to update wallpaper, which must be executed when user is logged in, it won't work otherwise

Você está tentando usar um contexto de usuário remoto para ser executado em um contexto de usuário local. Este é um limite de segurança do Windows, sempre foi. Portanto, não é um problema do PowerShell.

O PowerShell não permitirá isso nativamente, devido a essa violação de limite de segurança do Windows.

Além disso, existem outras maneiras de fazer isso, em comparação com o método que você está tentando.

Se você realmente precisa fazer isso, em primeiro lugar, em uma empresa, é para isso que são os GPOs. Há mangueira que não pode usar o GPO por qualquer motivo. Então, eles tentam essa abordagem e ela não funciona, porque ela não foi projetada para.

Então, se você precisa usar um contexto de usuário local remoto, então você precisa usar uma opção de 3rdP, como o PSExec da SysInternals como discutido aqui ...

How to run a program for a remotely logged in user in Windows

You can do this with PsExec, be sure to have the right permissions to run applications for him. psexec \computer -u user -i -d command

-u means user, -i makes it interactive so the user sees it, -d makes sure the command doesn't wait

'superuser.com/questions/176249/how-to-run-a-program-for-a-remotely-logged-in-user-in-windows'

... ou AutoIT.

Você também pode criar um script .ps1 nativo, fazendo algo assim ...

cp "image.jpg" \<IP>\C$
$RemoteReg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('Users', "<IP>")
$WallPaper= $RemoteReg.OpenSubKey("S-1-5-21-780093305-1579027723-3042286928-500\Control Panel\Desktop",$True)
$WallPaper.SetValue("Wallpaper","C:\image.jpg")

... e defina-o como uma opção RunOnce (Registro) para o usuário.

Você pode criar uma tarefa agendada única para ser executada uma vez no logon do usuário ou em outro ponto do dia.

Então, recue um pouco e pense em outras opções em comparação com esse esforço que realmente não é projetado para levar você aonde você está tentando ir.

    
por 26.06.2018 / 19:44