4

У меня есть запланированное задание, которое должно запускаться каждые два часа со следующим действием командной строки:

  • Программа: mshta
  • Аргументы: vbscript:Execute("CreateObject(""Wscript.Shell"").Run ""powershell -NoLogo -Command """"& 'X:\Path\To\Custom\powershellScript.ps1'"""""", 0 : window.close")

Каждые два часа вместо запуска задачи я получаю:

Обнаружено какое-то вредоносное ПО, Защитник Windows удаляет его

и в истории Защитника:

Обнаруженный предмет Троян:Win32/Powerssere.г

Я не хочу останавливать Защитника Windows из-за возможных последствий для безопасности. Есть ли способ добавить исключение в Defender, чтобы игнорировать задачу? ,

Я попытался добавить путь к сценарию, папку, mshta.exe и powershell.exe к исключениям, а также ps1 к типам файлов. Ничего не работает

Кстати, Защитник не удаляет задачу или скрипт, который должен быть запущен, а просто останавливает его выполнение.

Пояснение:

  • Он должен быть запущен в фоновом режиме, ни одно окно не должно появляться при запуске задачи, его нужно запускать с пользователем, если он вошел в систему, я не хочу хранить пароль / запускать с другой учетной записью пользователя или самыми высокими привилегиями.

  • Сценарий должен быть выполнен как зарегистрированный пользователь. Цель этого - заменить обои для вошедшего в систему пользователя на загруженные (переменная $picturePath ). Выдержка:


    $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
        }
    }

3 ответа3

3

Опять же, как уже отмечалось, если вы делаете это, это просто действие типа вируса и должно быть заблокировано.

Как отмечает @HackSlash, это правильный способ сделать это.

Когда вы говорите, что Windows появляется из-за этого, и это должно произойти, потому что вы запускаете новую оболочку, а оболочка должна запускаться и показываться как активная. Вы можете просто добавить свойство WindowStyle -minimize или -hidden, чтобы уменьшить это.

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

Устанавливает стиль окна для сеанса. Допустимые значения: Normal, Minimized, Maximized и Hidden.

Или этот подход, так как даже вышеупомянутое окно все еще будет мигать.

Как скрыть приглашение PowerShell

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

Или этот

Подлый PowerShell Trick: полностью без окна

static void Main(string [] args) {var powershell = PowerShell.Создайте(); Powershell.AddScript(@ "Get-ChildItem -Path c:\temp | out-file c:\temp\shh.txt"); обработчик var = powershell.BeginInvoke(); в то время как (!обработчик.IsCompleted) Тема.Сон (200); Powershell.EndInvoke (обработчик); Powershell.Dispose (); }

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

1

Событие обнаружения происходит из-за использования небезопасного метода для вызова PowerShell. Не используйте Wscript для вызова Powershell, это может сделать только вирус. ;-D

Попробуйте этот метод вызова вашего скрипта:

  • Программа: powershell.exe
  • Аргументы: -ExecutionPolicy Bypass -NoLogo -NonInteractive -WindowStyle Hidden X:\Path\To\Custom\powershellScript.ps1
0

Что касается этого ...

Мой скрипт вызывает RUNDLL32.EXE USER32.DLL, UpdatePerUserSystemParameters 1, True для обновления обоев, которые должны выполняться при входе пользователя в систему, иначе не будет работать

Вы пытаетесь использовать удаленный пользовательский контекст, чтобы работать в локальном пользовательском контексте. Это граница безопасности Windows, так было всегда. Так что проблема не в PowerShell.

Из-за этого нарушения границы безопасности Windows PowerShell не допускает этого.

Кроме того, есть другие способы сделать это против метода, который вы пытаетесь.

Если вам действительно нужно сделать это, во-первых, на предприятии, для этого и нужны GPO. Есть шланги, которые не могут использовать GPO по любой причине. Итак, они пытаются этот подход, и он не работает, потому что он не предназначен для.

Итак, если вам нужно использовать удаленный локальный пользовательский контекст, то вам нужно использовать опцию 3rdP, например SysInternals PSExec, как обсуждалось здесь ...

Как запустить программу для удаленно вошедшего в систему пользователя в Windows

Вы можете сделать это с PsExec, убедитесь, что у вас есть права на запуск приложений для него. Команда psexec \computer -u user -i -d

-u означает пользователя, -i делает его интерактивным, чтобы пользователь его видел, -d гарантирует, что команда не ждет

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

... или AutoIT.

Вы также можете создать собственный скрипт .ps1, сделав что-то вроде этого ...

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")

... и установите его как параметр RunOnce (Registry) для пользователя.

Вы можете создать запланированную задачу, которая будет выполняться один раз при входе в систему для пользователя или другой точки дня.

Так что, отступите немного назад и подумайте о других вариантах против глушения этих усилий, которые действительно не предназначены для того, чтобы вы оказались там, где вы пытаетесь пойти.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .