Невозможно записать сообщение об исключении при использовании сценария power shell в grovy script для jenkins pipeline

Эта статья посвящена основам управления настройками и правилами встроенного Windows Defender Firewall из командной строки PowerShell. Мы рассмотрим, как включать/отключать брандмауэр для различных профилей, создавать, редактировать и удалять правила, экспортировать/импортировать правила Windows Firewall с помощью PowerShell.

Для управления настройками Windows Firewall обычно используется отдельная графическая MMC оснастка
wf.msc
(Control Panel -> System and Security -> Windows Defender Firewall -> Advanced settings). Большинство операций по настройке и управлению параметрами Windows Firewall можно выполнять из командной строки PowerShell. Для этого, начиная с версии Windows PowerShell 5.1, можно использовать встроенный модуль NetSecurity

Полный список командетов в модуле NetSecurity можно вывести с помощью команды:

Get-Command -Module NetSecurity

модуль NetSecurity для управления Windows Defender Firewall из PowerShell

Раньше для управления правилами и настройками Брандмауэра Windows использовалась команда
netsh advfirewall firewall
.

def call() { node { timestamps { ansiColor('xterm') { try { powershell """ throw new Exception("ERROR: This is a test Exception.") """ } catch (error) { println("Caught error: ${error.getMessage()}") } } } }
}

I have tried using error.message, error.printStackTrace(), and error.cause.getMessage(), but none of them print the error message. Instead, I receive the message “script returned exit code 1”.

Can anyone help me capture the error message properly?

asked Jul 14, 2023 at 22:31

theone1one's user avatar

My understanding is that you cannot pass exception from powershell to groovy, in the same way as you cannot pass variables between them.

Best course of action there would be to catch exception within your powershell script, write to the output, exit without error and then parse output for this error.

Something like this:

try { def output = powershell(returnStdout: true, script: """ Write-Output "Some output before error" try { throw "test error" } catch { Write-Output "MyPersonalError:" \$PSItem.ToString() exit 0 } """) echo output // to show output of script otherwise suppressed by `returnStdout: true` // if you want intime show of output with `returnStdout: true` you might use tee and subsequent read output from file // check if error wraped with our catch happen def matcher = output =~ /MyPersonalError:\s+([\s\S]+)/ // if yes - print it if(matcher.size() == 1){ echo matcher[0][1] } else { echo "no errors" }
} catch (e) { echo "Something out of ordinary happen. Shouldn't ever be. $e"
}

answered Jul 15, 2023 at 22:15

markalex's user avatar

3 gold badges10 silver badges38 bronze badges

Что делать, если не удаляются исключения защитника WindowsНекоторые пользователи Windows 11 и Windows 10, столкнувшиеся с вредоносным ПО, даже после успешного его удаления могут обратить внимание на ещё одну проблему: добавленные вирусом исключения в Microsoft Defender (Защитник Windows, встроенный антивирус) не удаляются: либо кнопка не активна, либо после её нажатия нет никакого результата.

В этой инструкции подробно о том, чем обычно бывает вызвана проблема и о том, как её решить и удалить ненужные исключения в Microsoft Defender.

Удаление исключений Microsoft Defender в локальных групповых политиках

Не удается удалить исключения в окне Безопасность Windows

Обычно, причина того, что вы не можете удалить исключения в окне «Безопасность Windows» в том, что они были добавлены не с помощью этого интерфейса и не только в соответствующий ему раздел реестра, но и в политики Microsoft Defender.

:/>  Превышен лимит на использование CPU - как снизить нагрузку на хостинге | REG.RU

Удаление исключений из политик в PowerShell

Самый быстрый способ удаления «неудаляемых исключений» состоит из следующих шагов:

  1. Закройте окно «Безопасность Windows», если оно открыто.
  2. Запустите Терминал Windows или Windows PowerShell от имени администратора, сделать это можно, нажав правой кнопкой мыши по кнопке «Пуск» и выбрав соответствующий пункт контекстного меню.
  3. Введите команду
    reg delete "HKLM\SOFTWARE\Policies\Microsoft\Windows Defender\Exclusions" /f

    и нажмите Enter. Удаление исключений в PowerShell

  4. Введите команду
    Set-MpPreference -UILockdown 0

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

  5. Снова откройте окно «Безопасность Windows», перейдите в Защита от вирусов и угроз — Управление настройками — Добавление или удаление исключений и, если исключения всё ещё в списке (так как они могут быть добавлены не только в политиках), удалите их как обычно: с большой вероятностью теперь они удалятся. Список исключений пуст в Microsoft Defender

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

Удаление вручную в редакторе реестра

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

  1. Нажмите правой кнопкой мыши по кнопке «Пуск», выберите пункт «Выполнить», введите regedit и нажмите Enter.
  2. В редакторе реестра перейдите к разделу
    HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender
  3. Если в этом разделе есть подраздел Exclusions — удалите его для удаления всех исключений из политик. Удаление политик исключений защитника Windows в реестре
  4. Зайдите в окно «Безопасность Windows» в раздел для настройки исключений и, если они там еще отображаются, удалите их с помощью кнопки «Удалить» (если она не активна и перед первым шагом вы не закрывали окно, закройте и снова перейдите на нужный экран).

На всякий случай приведу раздел, где прописываются исключения Microsoft Defender при добавлении без использования политик:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Defender\Exclusions\Extensions

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

Настройка исключений в редакторе локальной групповой политики

Если на вашем компьютере установлена Windows 11/10 Pro или Enterprise, вы можете использовать редактор локальной групповой политики:

  1. Нажмите клавиши Win+R на клавиатуре, введите gpedit.msc и нажмите Enter.
  2. В открывшемся редакторе локальной групповой политики перейдите к разделу Конфигурация компьютера — Административные шаблоны — Антивирусная программа Microsoft Defender — Исключения.
  3. Если состояние каких-то из политик в этом разделе отличаются от «Не задана», дважды нажмите по таким политикам. Исключения Microsoft Defender в редакторе локальной групповой политики
  4. Установите вариант «Не задано» и примените настройки. Отключить политики исключений Defender в редакторе локальной групповой политики
  5. Имеет смысл изучить состояние и остальных политик Microsoft Defender — по умолчанию, все они имеют состояние «Не задана».
  6. Снова зайдите в настройки исключений окна «Безопасность Windows» и, если записи исключений в нем остаются, удалите их обычным способом.

В контексте проблем с Защитником Windows после заражения компьютера, вам также могут пригодиться следующие материалы:

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

Изменить правило Windows Firewall с помощью PowerShell

Чтобы отредактировать правило брандмауэра, используется командлет Set-NetFirewallRule. Например, вы хотите разрешить входящие подключения с указанного IP адреса для ранее созданного правила:

Если нужно добавить в правило файервола несколько IP адресов, используйте такой скрипт:

Вывести все IP адреса, которые содержатся в правиле брандмауэра:

Удалить один IP адрес из правила:

powershell: добавить ip адрес в правило firewall

Создать новое правило Windows Firewall

Для управления правилами брандмауэра используются 9 командлетов:

  • New-NetFirewallRule
  • Copy-NetFirewallRule
  • Disable-NetFirewallRule
  • Enable-NetFirewallRule
  • Get-NetFirewallRule
  • Remove-NetFirewallRule
  • Rename-NetFirewallRule
  • Set-NetFirewallRule
  • Show-NetFirewallRule

Рассмотрим несколько простых примеров открытия портов в Windows Firewall.

Например, вы хотите разрешить входящие TCP подключения на порты 80 и 443 для профилей Domain и Private. Воспользуйтесь такой командой:

New-NetFirewallRule - создать новое правило Windows Firewall с помощью PowerShell

Вы можете разрешить или заблокировать трафик для конкретной программы. Например, вы хотите заблокировать исходящие соединения для FireFox:

Разрешим входящее RDP подключение по стандартному порту TCP\3389 только с одного IP адреса:

New-NetFirewallRule -DisplayName "AllowRDP" –RemoteAddress 192.168.1.55 -Direction Inbound -Protocol TCP –LocalPort 3389 -Action Allow

Чтобы разрешить ICMP ping для адресов из указанных диапазонов IP адресов и подсети, используйте команды:

New-NetFirewallRule -DisplayName "Allow inbound ICMPv4" -Direction Inbound -Protocol ICMPv4 -IcmpType 8 -RemoteAddress $ips -Action Allow

New-NetFirewallRule -DisplayName "Allow inbound ICMPv6" -Direction Inbound -Protocol ICMPv6 -IcmpType 8 -RemoteAddress $ips -Action Allow

Добавить в правило файервола список IP адресов из текстового файла (по одному IP в строке):

В предыдущей статье мы показывали как с помощью PowerShell можно заблокировать доступ к сайтам не только по IP адресу, но и по DNS имени домена/сайта.

Разрешить все входящие подключения с указанного IP адреса (добавить адрес в белый список):

$IP = '192.168.1.20'
New-NetFirewallRule -DisplayName "Allow $IP" -Direction Inbound -Action Allow -RemoteAddress $IP

Как включить и отключить Windows Defender Firewall через PowerShell?

По умолчанию Defender Firewall в Windows включен.

отключить windows firewall с помощью powershell

Как вы видите, в Windows Firewall есть три типа сетевых профилей:

  • Domain (Доменный) – применяется к компьютерам, включенным в домен Active Directory;
  • Private (Частный) – домашние или рабочие сети;
  • Public (Общий) – общедоступные сети.

В настройках профилей по-умолчанию разрешены все исходящие подключения и блокируется входящие (кроме разрешенных).

windows defender firewall включен в windows

Информация о типах сетей хранится службой Network Location Awareness (NLA) в базе данных. Вы можете изменить профиль сети в Windows, если он определился некорректно.

Каждый профиль может отличаться используемым набором правил файервола. По умолчанию все сетевые интерфейсы компьютера защищены фаейрволом и к ним применяются все три типа профилей.

Чтобы полностью отключить Firewall в Windows, выполните команду:

Set-NetFirewallProfile -All -Enabled False

Либо укажите конкретный профиль вместо All:

Set-NetFirewallProfile -Profile Public -Enabled False

Чтобы включить файервол для всех трех сетевых профилей, используется команда:

Set-NetFirewallProfile -All -Enabled True

Вывести тип профиля, который применяется к сетевому подключению:

Get-NetConnectionProfile тип профиля файервола который применяется к сетевому интерфейсу

В этом примере к сетевому подключению Ethernet0 применяется доменный профиль (DomainAuthenticated).

Вы можете управлять правилами Windows Firewall на удаленных компьютерах, если на них настроен PowerShell Remoting (WinRM). В этом примере с помощью командлета Invoke-Command мы отключим файервол на удаленных компьютерах из списка:

Можно изменить действие по-умолчнию для профиля Public и заблокировать все входящие подключения.

Текущие настройки профиля можно вывести так:

Get-NetFirewallProfile -Name Public

настройки по умолчанию для public профиля Windows Firewall

Если вы управляете настройками Windows Firewall через GPO, вы можете вывести текущие результирующие настройки профилей так:

Get-NetFirewallProfile -policystore activestore

Проверим, что все параметры брандмауэра применяются ко всем сетевым интерфейса компьютера.

Если все интерфейсы защищены, команда должна вернуть:

DisabledInterfaceAliases : {NotConfigured}

Get-NetFirewallProfile

Можно отключить определенный профиль для интерфейса (вывести список имен интерфейсов можно с помощью командлета Get-NetIPInterface).

Set-NetFirewallProfile -Name Public -DisabledInterfaceAliases "Ethernet0"

Как вы видите, теперь профиль Public не применяется к интерфейсу Ethernet0:

DisabledInterfaceAliases : {Ethernet0}

Set-NetFirewallProfile - изсенить настройки профиля Firewall

С помощью командлета
Set-NetFirewallProfile
вы можете изменить параметры профиля (действие по-умолчанию, журналирование, путь и размер лог файла, настройки оповещений и т.д.).

Вы можете настроить параметры логирования сетевых подключений на уровне каждого профиля. По умолчанию журналы Windows Firewall хранятся в каталоге
%systemroot%\system32\LogFiles\Firewall
, размер файла – 4 Мб. Вы можете изменить включить журналирование подключений и увеличить максимальный размер файла:

Включить/отключить правило Windows Defender Firewall

Вы можете включать/отключать правила файервола с помощью командлетов Disable-NetFirewallRule и Enable-NetFirewallRule.

Disable-NetFirewallRule –DisplayName 'WEB-Inbound'

Чтобы разрешить ICMP (ping), выполните команду:

Enable-NetFirewallRule -Name FPS-ICMP4-ERQ-In

Чтобы удалить правило брандмауэре используется командлет Remove-NetFirewallRule.

Remove-NetFirewallRule -DisplayName 'WEB-Inbound'

Чтобы сбросить все правила Microsoft Defender Firewall и восстановить настройки по умолчанию, выполните команду:

netsh advfirewall reset

(New-Object -ComObject HNetCfg.FwPolicy2).RestoreLocalFirewallDefaults()

Это очистит все пользовательские настройки и правила Microsoft Defender Firewall. В списке правил останутся только стандартные правила сетевого доступа Windows.

Перед сбросом можно экспортировать текущие настройки в файл.

netsh advfirewall export "C:\Backup\firewall-config.wfw"

В дальнейшем вы можете вернуть старые настройки файервола, импортировав файл с правилами:

netsh advfirewall import "C:\Backup\firewall-config.wfw"

Вывести список активных правил Windows Firewall

Список активных правил для входящего трафика можно вывести так:

Если, например, нам нужно вывести список блокирующих исходящих правил:

Если нужно отобразить имя программы в правиле:

Get-NetFirewallRule вывод правил Windows Firewall

Как вы видите командлет Get-NetFirewallRule не выводит порты сетевые порты и IP адреса для правил брандмауэра. Чтобы вывести всю информацию о разрешенных входящих (исходящих) подключениях в более удобном виде с отображением номеров портов, используйте такой скрипт:

Get-NetFirewallRule вывести IP адрес и имя порта

PowerShell предоставляет широкие возможности по управлению правилами Windows Firewall из командной строки. Вы можете автоматически запускать скрипты PowerShell для открытия/закрытия портов при возникновении определенных событий. В следующей статье мы рассмотрим простую систему на базе PowerShell и Windows Firewall для автоматической блокировки IP адресов, с которых выполняется удаленный перебор паролей по RDP на Windows VDS сервере.