Метка: PowerShell

  • Отключаем использование PowerShell для пользователей

    От отдела безопасности поступила задача запретить использование PowerShell на некоторых компьютерах. Необходимо запретить пользователям запускать интерактивную PowerShell консоль, выполнять PowerShell скрипты, но при этом логон скрипты GPO, задания планировщика с PowerShell скриптами (запускаемые от SYSTEM) должны работать. В статье мы рассмотрим несколько методов запрета запуска PowerShell на компьютерах, которые можно централизованно применить через групповые политики.

    Встроенная политика выполнения PowerShell скриптов в Windows (PowerShell Execution Policy) со значением Restricted позволяет запретить только выполнение файлов скриптов PS1, но не блокирует использование пользователями интерактивной консоли powershell.exe . В Windows 10 и 11 значение политики выполнения PowerShell по-умолчанию Restricted (можно настроить через параметр GPO Turn on Script Execution в Computer Configuration -> Administrative Templates -> Windows Component -> Windows PowerShell).

    В редакторе GPO есть еще одна встроенная политика, позволяющая запретить запуск определенных исполняемых файлов. Это Don’t run specified Windows applications в разделе User Configuration -> Administrative Templates -> System). Включите политику, нажмите кнопку Show и добавьте имя исполняемого файла powershell.exe , запуск которого нужно запретить.

    После применения настроек GPO на клиенте при попытке запустить powershell.exe, появится ошибка:

    Restrictions This operation has been cancelled due to restrictions in effect on this computer. Please contact your system administrator.

    Однако такая политика недостаточно надежная. Например, она не заблокировала запуск Windows Terminal с сессией PowerShell.

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

    • x86 и x64 версии powershell.exe и powershell_ise.exe в каталогах %SystemRoot%System32WindowsPowerShellv1.0 и %SystemRoot%SysWOW64WindowsPowerShellv1.0
    • Если на компьютере установлен новый PowerShell Core, нужно запретить также запуск исполняемого файла pwsh.exe. Например, в моем случае это путь C:Program FilesPowerShell7pwsh.exe (путь к файлу можно получить командой: Get-Command pwsh.exe

    Более гибкие ограничения на запуск исполняемых файлом можно задать через Software Restriction Policies (SRP).

    1. Создайте доменную GPO в консоли gpmc.msc
    2. Перейдите в раздел User Configuration -> Policies -> Windows Settings -> Security Settings -> Software Restriction Policies
    3. Выберите New Software Restriction Policy
    4. Перейдите в раздел Additional Rules и добавьте следующий путь: %SystemRoot%System32WindowsPowerShellv1.0powershell.exe
    5. Выберите уровень безопасности Disallowed

    Назначьте политику на целевую OU. После применения политики, пользователи не смогут запускать powershell.exe:

    This app has been blocked by your administrator

    Это приложение заблокировано вашим системным администратором

     

    Также такая политика SRP не позволяет запустить powershell.exe через Windows Terminal:

    [error 2147943660 (0x800704ec) when launching `%SystemRoot%System32WindowsPowerShellv1.0powershell.exe']

    This program is blocked by group policy. For more information, contact your system administrator.

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

    Затем в консоли GPMC в настройках политики на вкладке Delegation я добавил эту группу, с правом чтения, но применение политики заблокировал: Apply group policy -> Deny.

    Таким образом мы запретили запуск PowerShell пользователям, но сделали исключения для группы администраторов. Аналогично нужно запретить применять эту политику для SYSTEM, что позволит запускаться startup скриптам и powershell задания планировщика.

    Проверить, что политика не применяется для администраторов можно с помощью команды gpresult /r.

    Однако технология Software Restriction Policies считается устаревшей (deprecated), начиная с Windows 10 1803 и Windows Server 2019. Вместо нее рекомендуют использовать политики ограничения запуска программ Windows Defender Application Control (WDAC) или AppLocker.

    Далее мы рассмотрим, как запретить запуск powershell.exe с помощью политики AppLocker. Изначально политики Applocker можно было применять только к Enterprise редакция Windows. Но, начиная с Windows 10 2004, политики AppLocker можно применять в том числе в Pro редакциях Windows.

    1. Чтобы политика Applocker применялись на клиенте, нужно включить автозапуск службы Application Identity (Computer Configuration -> Windows Settings -> Security Settings -> System Services)
    2. Затем перейдите в Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Application Control Policies -> Applocker. Откройте свойств, включите опцию Configured для Executable rules -> Enforce rules.
    3. Щелкните по секции Executable rules и выберите Create Default rules.
    4. В правиле All files located in the Windows folder добавьте исключения для исполняемого файла powershell.exe по Publisher.
    5. Выберите исполняемый файл и ползунок поставьте на File name.
    6. Такое правило запретит пользователям запускать это файл.
    7. Чтобы powershell.exe могли запускать администраторы, нужно создать для них новое разрешающее правило, в котором содержится только этот файл.
    8. Дефолтные политики Aplocker запрещают пользователям запускать любые исполняемый файлы, кроме расположенных в папках Windows и Program Files. Поэтому если вы хотите запретить запуск только powershell.exe, нужно правило добавить разрешающее все для доменных пользователей, кроме powershell.exe (в поле path указываем * ).
    При построении политик Applocker нужно учитывать несколько моментов. Уровень по умолчанию Disallowed, т.е. запрещено все, кроме явно разрешенного. Запрещающие правила имеют приоритет над разрешающими. Т.е. разрешённый файл для запуска файл не должен быть явно запрещён и должен быть явно разрешён.

    Для просмотра результирующих политик Applocker на клиенте можно выгрузить их в XML файл:

    Get-AppLockerPolicy -Effective -XML > C:Backupapp.xml

    При попытке запустить powershell.exe на клиенте появится сообщение, что приложение заблокировано администратором.

    Аналогичным образом нужно заблокировать x86 и x64 версии powershell.exe, powershell_ise.exe и pwsh.exe.


  • Как удалить модули PowerShell в Windows?

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

    Вывести список сторонних PowerShell (далее…)

  • Запуск команды (программы) из PowerShell

    Иногда из терминала или скрипта PowerShell нужно выполнить какую-то внешнюю команду, утилиту командной строки, или запустить исполняемый EXE файл программы. Эта статья разбирает часто используемые методы запуска программ и консольных утилит из PowerShell, в том числе позволяющие передать аргументы (далее…)

  • Рандомизация MAC адреса для Wi-Fi подключений в Windows

    В Windows 10 и 11 доступна функция «случайный MAC адрес» для рандомизации аппаратного (MAC адреса) сетевой карты, используемого для подключения к Wi-Fi сетям. Основный задачи этой функции – повышение конфиденциальности и анонимности пользователя, сокращение возможностей отслеживания (далее…)

  • Долго запускается консоль PowerShell или PS1 скрипты

    На разных компьютерах периодически встречаю проблему очень долгого запуска консоли PowerShell, вплоть до нескольких минут. Это влияет как на запуск самой командной оболочки powershell.exe/pwsh.exe, так и на время выполнения PowerShell скриптов, которые стартуют через GPO или по расписанию через (далее…)

  • Перезагрузка (выключение) Windows по расписанию

    Если нужно настроить регулярную (по определенному расписанию) перезагрузку или выключение Windows компьютера (сервера), проще всего создать задание в планировщике задач.

  • Неактивные TS порты принтеров на RDS сервере

    Одной из распространённых проблем при использовании терминального (RDS/RDP) сервера, на который пробрасываются локальные принтеры с компьютеров пользователей в режиме RD Easy Print, заключается в большом количестве неактивных TS портов печати от перенаправленных принтеров ( Inactive TS Port ), которые накапливаются со временем. Все это вызывает проблемы с производительностью RDSH хоста, пропаданию перенаправленных принтеров в сессиях пользователей и другим проблем с печатью. При этом в Event Viewer могут появляться ошибки о превышении времени ожидания ответа от службы UmRdpService (перенаправитель портов пользовательского режима служб удаленного рабочего стола).

    Если вы столкнулись с проблемами печати с перенаправленными принтерами на RDS сервере, откройте консоль управления печатью ( printmanagement.msc ), и перейдите в раздел Ports. В моем случае в списке портов печати содержится несколько десятков неактивных портов с именами в формате TS001: Inactive TS Port.

    При подключении перенаправленного через RDP принтера, Print Spooler создает для каждого принтера виртуальный TS порт. Когда пользователь отключается от своей RDP сессии, такой порт не удаляется автоматически. Со временем количество неактивных TS портов может достигнуть десяток и сотен, что вызывает проблемы в работе службы печати Windows.

    Для предотвращения проблем с печатью на терминальных серверах можно использовать следующие подходы:

    • Пробрасывать в RDP сессию с компьютера пользователю только принтер, назначенный по умолчанию. Это уменьшит количество TS000 портов, который создаются на терминальном сервере. Для этого включите на RDS сервере параметр групповых политик Redirect only the default client printer (Перенаправлять только используемый по умолчанию принтер клиента) в разделе Computer Configuration -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host -> Printer Redirection
    • Периодически перезагружать RDS хост (это очищает порты печати)
    • Периодически удалять неактивные TS порты

    При попытке вручную удалить Inactive TS Port из консоли управления принт-сервера, появится ошибка:

    Не удаётся удалить выбранный порт. Операция не поддерживается.

    Очистить TS порты можно, удалив их из ветки реестра HKLMSYSTEMCurrentControlSetControlDeviceClasses{28d78fad-5a12-11d1-ae5b-0000f803a8c2}##?#ROOT#RDPBUS#0000#{28d78fad-5a12-11d1-ae5b-0000f803a8c2}

    Как вы видите, для каждого порта создан отдельный раздел с именем #TS001 и т.д.

    Подраздел реестра формата #TS001 можно удалять целиком, если в разделе device parameters в значении Port Description указано значение Inactive TS Port. После удаления ветки реестра, нужно перезапустить службу принт-спулера (временно нарушит печать с терминального сервера).

    Restart-Service Spooler

    Когда неактивных портов печати десятки и сотни, проще удалить их с помощью PowerShell скрипта:

     # Delete inactive TS Ports (Local Only) $Gegevens = Get-ChildItem -Path 'HKLM:SYSTEMCurrentControlSetControlDeviceClasses{28d78fad-5a12-11d1-ae5b-0000f803a8c2}##?#ROOT#RDPBUS#0000#{28d78fad-5a12-11d1-ae5b-0000f803a8c2}' -Recurse -ErrorAction SilentlyContinue ($Gegevens.Name) -replace "\Device parameters" | Select-Object -Unique | ForEach-Object {     $subkey = ($_ -replace "HKEY_LOCAL_MACHINE\", "HKLM:") + "Device Parameters" try {     $PortDescription = (Get-ItemProperty -Path $subkey -ErrorAction Stop)."Port Description"     if ($PortDescription -eq "Inactive TS Port") {         $subkeydelete = ($_ -replace "HKEY_LOCAL_MACHINE\", "HKLM:")         Write-Host "Deleting subkey on $env:COMPUTERNAME => $subkeydelete"         Remove-Item -Path $subkeydelete -Recurse -Force     } } catch {     Write-Host "Error accessing ${subkey}: $_" }  
    } Restart-Service Spooler

    Это очистит неактивные порты печати.


  • Как установить или удалить шрифт на компьютере Windows 11 (10)?

    Установка дополнительных шрифтов в Windows обычно не вызывает затруднений. Однако есть некоторые неочевидные технические нюансы по добавлению и удалению новых шрифтов в современных версиях Windows 11 и 10, которые необходимо знать.

    Установка шрифтов в Windows

    В Windows поддерживаются шрифты (далее…)

  • Запись событий в журнал Event Viewer из PowerShell/CMD

    Вместо использования текстовых лог файлов в скриптах, можно записывать информации о событиях непосредственно в журналы Event Viewer. В этой статье мы рассмотрим, как записывать логи в журналы событий (далее…)

  • Как получить или изменить дату создания/модификации файла с помощью PowerShell

    С помощью PowerShell можно получить значения или изменить атрибуты файлов и папок на файловой системе. В этой статье мы рассмотрим, как работать с временными метками файлов с помощью PowerShell.

    Вывести дату создания, изменения и последнего доступа (открытия) файла:

    Get-ChildItem -Path (далее…)