Что такое код createdibpatternbrush

Содержание

CreateDIBPatternBrushPt

Important:
This is retired content. This content is outdated and is no longer being maintained. It is provided as a courtesy for individuals who are still using these technologies. This content may contain URLs that were valid when originally published, but now link to sites or pages that no longer exist.

This function creates a logical brush that has the pattern specified by the device-independent bitmap (DIB).

Parameters lpPackedDIB [in] Long pointer to a packed DIB consisting of a BITMAPINFOstructure immediately followed by an array of bytes defining the pixels of the bitmap. iUsage [in] Specifies whether the bmiColors member of the BITMAPINFO structure contains a valid color table and, if so, whether the entries in this color table contain explicit red, green, blue (RGB) values or palette indices. The iUsage parameter must be one of the following values.

Value Description
DIB_PAL_COLORS A color table is provided and consists of an array of 16-bit indices into the logical palette of the device context into which the brush is to be selected. Windows CE versions 1.0 and 1.01 do not support this value.
DIB_RGB_COLORS A color table is provided and contains literal RGB values.

In Windows CE versions 2.0 and later, set the iUsage parameter to DIB_RGB_COLORS. When an 8 bpp bitmap is used, you can set iUsage to DIB_PAL_COLORS, however, in that case, Windows CE will ignore the values in the bmiColors array member of the BITMAPINFO structure.

Handle to a logical brush indicates success. NULL indicates failure. To get extended error information, call GetLastError.

A brush is a bitmap that the system uses to paint the interiors of filled shapes.

After an application creates a brush by calling CreateDIBPatternBrushPt , it can select that brush into any device context by calling the SelectObjectfunction.

When you no longer need the brush, call the DeleteObjectfunction to delete it.

Runs on Versions Defined in Include Link to
Windows CE OS 1.0 and later Wingdi.h Mgdraw.lib

Note This API is part of the complete Windows CE OS package as provided by Microsoft. The functionality of a particular platform is determined by the original equipment manufacturer (OEM) and some devices may not support this API.

CreateDIBPatternBrush

Описание

function CreateDIBPatternBrush(PackedDIB: THandle; Usage: Word): HBrush;

Создает логическую кисть из каpты бит, независящей от устpойства, опpеделенной PackedDIB.

Паpаметpы

  • PackedDIB: глобальная память, содеpжащая стpуктуpу TBitmapInfo плюс массив элементов изобpажения.
  • Usage: Одна из констант DIB_RGB_Colors или DIB_Pal_Colors. См. pаздел «Идентификатоpы таблицы цветов, DIB_» в главе 1.

Возвpащаемое значение

В случае успешного завеpшения — идентификатоp логической кисти; 0 — в пpотивном случае.

Защита RDP от подбора паролей с блокировкой IP правилами Windows Firewall

Возникла идея написать простой PowerShell скрипт для автоматической блокировки в брандмауэре Windows IP адресов, с которых фиксируются попытки подбора паролей через RDP (или длительные RDP атаки). Идея заключается в следующем: скрипт PowerShell анализирует журнал событий системы, и, если с конкретного IP адреса за последние 2 часа зафиксировано более 5 неудачных попыток авторизации через RDP, такой IP адрес автоматически добавляется в блокирующее правило встроенного брандмауэра Windows.

Итак, имеется небольшая сеть с доменом, для доступа внутрь на один из компьютеров на интернет-шлюзе с Linux через NAT проброшен RDP порт (снаружи отвечает порт TCP 13211, а внутрь перенаправляется стандартный 3389). Периодически на компьютере происходит блокировка известных учетных записей доменной политикой паролей из-за неудачных попыток авторизоваться на компьютере через RDP. Наша задача автоматически блокировать IP адреса, через которых идет подбор паролей в RDP .

Сначала создадим на компьютере правило брандмауэра, которое блокирует входящее RDP подключение с указанных IP адресов:

New-NetFirewallRule -DisplayName «BlockRDPBruteForce» –RemoteAddress 1.1.1.1 -Direction Inbound -Protocol TCP –LocalPort 3389 -Action Block

В дальнейшем в это правило мы будем добавлять IP адреса, с которых фиксируется попытки подбора паролей по RDP.

Теперь нужно собрать из журналов компьютера список IP адресов, с которых за последние 2 часа фиксировалось более 5 неудачных попыток авторизации. Для этого в журнале Security нужно выбрать события с Event >

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

$Last_n_Hours = [DateTime]::Now.AddHours(-2)
$badRDPlogons = Get-EventLog -LogName ‘Security’ -after $Last_n_Hours -Instance ;e= <$_.ReplacementStrings[-2]>>
$getip = $badRDPlogons | group-object -property IpAddress | where <$_.Count -gt 5>| Select -property Name

Теперь все обнаруженные IP адреса атакующего нужно добавить в правило брандмауэра BlockRDPBruteForce, которое мы создали ранее. Для управления брандмауэром Windows мы будем использовать встроенный модуль встроенный PowerShell модуль NetSecurity. Сначала получим список текущих заблокированных IP адресов и добавим к нему новые.

$log = «C:\ps\blocked_ip.txt»
$current_ips = (Get-NetFirewallRule -DisplayName «BlockRDPBruteForce» | Get-NetFirewallAddressFilter ).RemoteAddress
foreach ($ip in $getip)
<
$current_ips += $ip.name
(Get-Date).ToString() + ‘ ‘ + $ip.name + ‘ IP заблокирован за ‘ + ($badRDPlogons | where <$_.IpAddress -eq $ip.name>).count + ‘ попыток за 2 часа’>> $log # запись события блокировки IP адреса в лог файл
>
Set-NetFirewallRule -DisplayName «BlockRDPBruteForce» -RemoteAddress $current_ips

Проверяем, что в блокирующее правило Windows Defender Firewall добавились новые IP адреса.

Вам осталось скопировать данный PowerShell код в файл c:\ps\block_rdp_attack.ps1 и добавить его в задание планировщика, для запуска по расписанию. Например, каждые 2 часа.

$repeat = (New-TimeSpan -Hours 2)
$duration = ([timeSpan]::maxvalue)
$Trigger= New-ScheduledTaskTrigger -Once -At (Get-Date).Date -RepetitionInterval $repeat -RepetitionDuration $duration
$User= «NT AUTHORITY\SYSTEM»
$Action= New-ScheduledTaskAction -Execute «PowerShell.exe» -Argument «C:\PS\block_rdp_attack.ps1»
Register-ScheduledTask -TaskName «BlockRDPBruteForce_PS» -Trigger $Trigger -User $User -Action $Action -RunLevel Highest –Force

Либо вы можете запускать скрипт PowerShell при появлении события 4625 в журнале, таким образом вы будете более быстро реагировать на атаку подбора пароля по RDP.

Вы можете модифицировать данный скрипт под свои реалии и использовть для блокировки RDP атак.

Что такое код createdibpatternbrush

Инициализирует кисть с шаблон указанного файла DIB (DIB).

Указывает объект глобальный- памяти, содержащий упаковыванное файла DIB (DIB).

Определяет, содержат ли поля bmiColors[] структуры данных BITMAPINFO «(части упакованного DIB») явные значения rgb или индексы в настоящее время осуществлянную логической палитры. Параметр должен иметь одно из следующих значений:

DIB_PAL_COLORS Таблица цвета состоит из массива 16 разрядных индексов.

DIB_RGB_COLORS Таблица цветов содержит литералы rgb.

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

Ненулевой, если успешно; в противном случае – значение 0.

Кисть может затем выбрать любой операции растровый контекста устройства, чтобы обозреватель.

2 Версий отличаются способом выполняется обработка DIB:

В первой версии, чтобы получить дескриптор DIB вызове функции Windows GlobalAlloc, чтобы выделить блок глобальной памяти и затем заполнения память с упаковыванным DIB.

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

Упаковыванное DIB состоит из структуры данных BITMAPINFO непосредственно за массив байтов, который определяет точки растрового изображения. Растровые изображения, используемые в качестве шаблонов заполнения должны быть 8 пикселей 8 точек. Если растровое изображение превышает Windows создает шаблон заполнения, используя только биты, соответствующие первых 8 строк и 8 столбцов пикселей растрового изображения в верхнем левом углу.

Когда приложение выбирает 2 кисти шаблона цветов рисунка DIB в контекст устройства, монохромного Windows не учитывает цвета, указанные в DIB и вместо указывает кисть шаблона с использованием текущих текста и цвет фона контекста устройства. Точки, сопоставленные к первому цвету (в позиции 0 в таблице цветов рисунка DIB) DIB обозначаются цвет текста. Точки, сопоставленные ко второму цвету (в таблице цвет на некотором смещении от 1) отображаются с помощью цвета фона.

Илон Маск рекомендует:  Шаблон сайта для медиа компаний HTML, CSS

Дополнительные сведения об использовании следующих функций Windows см. в разделе Windows SDK:

CreateDIBPatternBrush (эта функция предоставляется только для совместимости с приложениями Windows, созданные для версий более ранних, чем 3,0; используйте функцию CreateDIBPatternBrushPt).

CreateDIBPatternBrushPt (эта функция должна использоваться для приложений на платформе win32).

Прочитайте онлайн СПРАВОЧНИК ПО WinAPI | CreateDIBPatternBrush

Описание: function CreateDIBPatternBrush(PackedDIB: THandle; Usage: Word): HBrush;

Создает логическую кисть из каpты бит, независящей от устpойства, опpеделенной

Паpаметpы:

PackedDIB: глобальная память, содеpжащая стpуктуpу TBitmapInfo плюс массив элементов изобpажения.

Usage: Одна из констант DIB_RGB_Colors или DIB_Pal_Colors. См. pаздел

«Идентификатоpы таблицы цветов, DIB_» в главе 1.

Возвpащаемое значение:

В случае успешного завеpшения — идентификатоp логической кисти; 0 — в пpотивном случае. функция находится в файле gdi32.dll

Руководство по Windows PowerShell для начинающих

PowerShell — это объектно-ориентированный программный движок и скриптовый язык с интерфейсом командной строки, предоставляющий IT-профессионалам более широкие возможности для конфигурирования операционных систем семейства MS Windows. Проще говоря, это своего рода универсальный инструмент администрирования. В данной статье будут рассмотрены базовые приёмы написания скриптов на PowerShell, позволяющие простым путём автоматизировать управление Windows-окружением.

PowerShell предлагает как чисто консольный интерфейс, так и полноценную среду разработки PowerShell ISE (Integrated Scripting Environment, встроенное скриптовое окружение) для скриптов. Для запуска интерфейса командной строки введите powershell в меню «Выполнить» (WinKey + R). PowerShell ISE запускается с помощью команды «PowerShell ISE» в том же меню.

ISE более предпочтительно, так как предоставляет более широкие возможности разработчику благодаря подсветке синтаксиса, функции автозаполнения кода и другим особенностям, присущим многим «большим» IDE.

Написание и запуск скриптов

Скрипты сохраняются в виде файлов с расширением .ps1 . Несмотря на то, что PowerShell уже давно является нативной частью ОС Windows, вы не сможете запустить его скрипты простым двойным щелчком. Для этого надо кликнуть правой кнопкой по скрипту и выбрать «Запустить в PowerShell».

Также существуют системные политики, ограничивающие выполнение скриптов. Можно проверить текущие параметры политики, введя команду Get-ExecutionPolicy . Результатом будет одно из следующих значений:

  • Restricted — выполнение скриптов запрещено. Стандартная конфигурация;
  • AllSigned — можно запускать скрипты, подписанные доверенным разработчиком; перед запуском скрипта PowerShell запросит у вас подтверждение;
  • RemoteSigned — можно запускать собственные скрипты или те, что подписаны доверенным разработчиком;
  • Unrestricted — можно запускать любые скрипты.

Для начала работы необходимо изменить настройку политики запуска на RemoteSigned, используя команду Set-ExecutionPolicy :

Командлеты

Командлеты — это команды с предопределённой функцией, подобные условным операторам в языках программирования. У них есть несколько ключевых особенностей:

  • существуют системные, пользовательские и опциональные командлеты;
  • результатом выполнения командлета будет объект или массив объектов;
  • командлеты могут обрабатывать данные и передавать их другим командлетам с помощью конвейеров;
  • командлеты нечувствительны к регистру, так что нет никакой разницы между Get-ADUser , get-aduser и gEt-AdUsEr ;
  • в качестве разделителя используется символ ; .

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

  • Get-Process — отобразить текущие процессы, запущенные на компьютере;
  • Get-Service — отобразить список служб и их статус;
  • Get-Content — отобразить содержимое указанного файла, например Get-Content C:\Windows\System32\drivers\etc\hosts .

При необходимости список всех доступных командлетов можно вывести с помощью Get-Help-Category:

Также можно создавать и свои собственные командлеты.

Параметры

У каждого командлета есть несколько параметров, определяющих его работу. PowerShell ISE автоматически предлагает все доступные параметры с отображением их типа. Например, Get-Service-NameW* выводит список служб, у которых имя начинается с W . Если вы забыли, какие параметры у введённого командлета, воспользуйтесь Get-Member . Например, Get-Process | Get-Member :

Если вы не нашли того, что нужно, или не уверены в том, как правильно задаются параметры, можно даже запросить примеры с помощью параметра -Examples :

Некоторые командлеты также могут вызываться с помощью алиасов, например вместо Get-Help можно просто написать Help .

При написании больших скриптов или коллективной разработке можно пользоваться комментариями. Каждый комментарий начинается с символа # , а блок комментариев ограничивается комбинациями символов и #> в начале и в конце соответственно.

Конвейер

PowerShell позволяет осуществлять обмен данными между командлетами с помощью конвейера. Например:

  • GetService | SortObject -property Status — сортировка запущенных служб по статусу;
  • “Hello World!” | Out-File C:\ps\test.txt — запись текста в файл.

Можно использовать несколько конвейеров. Например, следующий скрипт выводит список имён всех служб за исключением остановленных:

Get-Service | WHERE <$_.status -eq “Running”>| SELECT displayname

Заключение

Итак, благодаря этому руководству у новичков появилось представление о том, что из себя представляет PowerShell. Также мы рассмотрели варианты изменения политики выполнения скриптов, что такое командлет, как они обмениваются данными с помощью конвейера и как получить свойства нужного объекта. Помните, что в случае затруднений можно воспользоваться командлетом Get-Help.

Справочник командлетов Windows PowerShell

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

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

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

Если Вы, выполнив вышеуказанную команду у себя на компьютере, не нашли командлет из представленного ниже списка (или тот который Вам нужен), то скорей всего у Вас не установлен необходимый модуль. Модули PowerShell для соответствующих ролей и компонентов сервера устанавливаются автоматически одновременно с ними. В случае если Вы хотите воспользоваться данными модулями на системе без установленных ролей и компонентов, то Вы всегда можете установить соответствующие «Средства удаленного администрирования сервера», которые добавляют не только оснастки управления, но и необходимые командлеты. Например, для того чтобы администрировать Active Directory с помощью Windows PowerShell на компьютере, который не является контроллером домена, необходимо установить модуль Active Directory для Windows PowerShell (RSAT-AD-PowerShell).

Примечание! Данный справочник составлен на основе командлетов версии PowerShell 5.0 в операционной системе Windows Server 2020.

Полезные командлеты Windows PowerShell

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

  • Get-Help – показывает справку по командлету, функции и общую справку по Windows PowerShell. Справка бывает нескольких типов: краткая, детальная, полная и вывод только примеров;
  • Update-Help — загружает и устанавливает новые файлы справки, т.е. обновление справки;
  • Get-Command – командлет поиска нужной команды, можно искать как по глаголу, так и по существительному, также возможно использование маски, если Вы не знаете точное наименование глагола или существительного;
  • Get-Alias – показывает псевдонимы, все или конкретной команды;
  • Get-PSDrive – показывает подключенные диски;
  • Get-Member – выводит свойства и методы, которые есть у объекта;
  • Get-WindowsFeature – выводит сведения о доступных ролях и компонентах сервера;
  • Install-WindowsFeature (эквивалентен Add-WindowsFeature) — устанавливает роли или компоненты на указанный сервер;
  • Uninstall-WindowsFeature (эквивалентен Remove-WindowsFeature) – удаляет роли или компонента сервера;
  • Get-History — возвращает список команд, введенных в ходе текущей сессии.

Работа с переменными

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

  • Get-Variable – выводит список переменных и их значения (или одну указанную переменную);
  • New-Variable – создает новую переменную;
  • Set-Variable – задает значение переменной. Если переменная с указанным именем не существует, то она будет создана;
  • Clear-Variable — удаляет значение переменной;
  • Remove-Variable — удаляет переменную и ее значение.

Форматирование в Windows PowerShell

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

  • Format-List – вывод результата команды в формате списка свойств, где на каждой новой строке отдельное свойство;
  • Format-Table — вывод результата команды в виде таблицы;
  • Format-Wide — вывод результата команды в виде широкой таблицы, в которой отображается только одно свойство каждого объекта;
  • Format-Custom – в данном случае форматирование вывода происходит с использованием пользовательского представления.

Импорт и экспорт

PowerShell позволяет импортировать и экспортировать данные в разных распространенных форматах, например, CSV или XML, а также перенаправлять вывод результата работы команды во внешний файл или на принтер.

  • Export-Csv – экспорт данных в формат CSV;
  • Import-Csv – импортирует данные из CSV файла;
  • Export-Clixml — экспорт данных в формат XML;
  • Import-Clixml — импортирует файл CLIXML и создает соответствующие объекты в оболочке Windows PowerShell;
  • Out-File — посылает вывод результата работы командлета во внешний файл (например, в TXT);
  • Out-Printer — вывод результата работы команды на принтер;
  • Import-Module — добавляет модули в текущей сессии.
Илон Маск рекомендует:  Что такое код loadmenu

Работа с сетью в Windows PowerShell

Для администрирования сети в Windows PowerShell существуют такие командлеты как:

  • Disable-NetAdapter – командлет отключает сетевой адаптер;
  • Enable-NetAdapter – данный командлет включает сетевой адаптер;
  • Rename-NetAdapter — переименовывает сетевой адаптер;
  • Restart-NetAdapter — перезапускает сетевой адаптер;
  • Get-NetIPAddress – выводит информацию о конфигурации IP-адреса;
  • Set-NetIPAddress — изменяет конфигурацию IP-адреса;
  • New-NetIPAddress — создает и настраивает IP-адрес;
  • Remove-NetIPAddress — удаляет IP-адрес и его конфигурацию;
  • Get-NetRoute — выводит таблицу маршрутизации IP;
  • Set-NetRoute — изменяет таблицу маршрутизации IP;
  • New-NetRoute — создает запись в таблице маршрутизации IP;
  • Remove-NetRoute — удаляет одну или несколько записей (IP маршрутов) из таблицы маршрутизации IP;
  • Get-NetIPv4Protocol — выводит информацию о конфигурации протокола IPv4;
  • Get-NetIPv6Protocol — выводит информацию о конфигурации протокола IPv6;
  • Get-NetIPInterface — выводит информацию о свойствах интерфейса IP;
  • Get-NetTCPSetting — показывает информацию о настройках и конфигурации TCP;
  • Test-Connection – командлет посылает ICMP пакеты к одному или нескольким компьютерам, т.е. «пингует» компьютеры.

Работа с элементами

В Windows PowerShell есть командлеты, которые умеют работать с элементами, под элементами здесь можно понимать: файлы, папки, ключи реестра и так далее.

  • Clear-Item — очищает содержимое элемента, но не удаляет сам элемент;
  • Copy-Item – копирует элемент;
  • Get-Item — получает элемент в указанном месте;
  • Invoke-Item — выполняет действие по умолчанию над указанным элементом;
  • Move-Item – перемещает элемент;
  • New-Item – создает новый элемент;
  • Remove-Item – удаляет указанные элементы;
  • Rename-Item — переименовывает элемент в пространстве имен поставщика Windows PowerShell;
  • Set-Item — изменяет элемент;
  • Get-ChildItem — возвращает элементы и дочерние элементы в одном или нескольких определенных местах;
  • Get-Location – выводит информацию о текущем местонахождении.

Командлеты для работы с Active Directory (AD)

Windows PowerShell, конечно же, позволяет работать со службой каталогов Active Directory. Для этих целей существует немало командлетов, вот некоторые из них:

  • New-ADUser – создание нового пользователя в Active Directory;
  • Get-ADUser – выводит информацию о пользователях Active Directory;
  • Set-ADUser — изменяет пользователя Active Directory;
  • Remove-ADUser — удаляет пользователя Active Directory;
  • New-ADGroup – командлет создает группу в Active Directory;
  • Get-ADGroup – выводит информацию о группе или выполняет поиск, чтобы получить несколько групп из Active Directory;
  • Set-ADGroup – командлет изменяет группу в Active Directory;
  • Remove-ADGroup — удаление группы в Active Directory;
  • Add-ADGroupMember — командлет добавляет учетные записи пользователей, компьютеров или групп в качестве новых членов группы Active Directory;
  • Get-ADGroupMember — выводит информацию о членах группы Active Directory;
  • Remove-ADGroupMember — удаление элементов из группы Active Directory;
  • Set-ADAccountPassword — сброс пароля учетной записи Active Directory;
  • Disable-ADAccount — отключает учетную запись Active Directory.
  • Enable-ADAccount — включает учетную запись Active Directory;
  • Unlock-ADAccoun — разблокирует учетную запись Active Directory;
  • New-ADComputer — создание новой учетной записи компьютера в Active Directory;
  • Get-ADComputer — выводит информацию об одном или нескольких компьютерах в Active Directory;
  • Set-ADComputer — изменение учетной записи компьютера в Active Directory;
  • Remove-ADComputer — удаление компьютера из Active Directory.

Работа с Hyper-V

Для работы с Hyper-V в Windows PowerShell существует много командлетов, вот небольшой перечень:

  • New-VM — создание новой виртуальной машины;
  • Set-VM — настройка виртуальной машины;
  • Start-VM — запуск виртуальной машины;
  • Stop-VM — закрытие, выключение или сохранение виртуальной машины;
  • Import-VM — импорт виртуальной машины из файла;
  • Move-VM — перемещение виртуальной машины на новый Hyper-V хост;
  • Remove-VM — удаление виртуальной машины;
  • Rename-VM — переименование виртуальной машины;
  • New-VHD — создание одного или нескольких новых виртуальных жестких дисков;
  • Set-VHD – настройка виртуального жесткого диска;
  • Test-VHD — тестирование виртуального жесткого диска на предмет обнаружения проблем, которые сделали бы его непригодным для использования;
  • Add-VMDvdDrive — добавляет DVD диск к виртуальной машине;
  • Remove-VMDvdDrive — удаляет DVD-диск из виртуальной машины;
  • Add-VMHardDiskDrive — добавляет жесткий диск к виртуальной машине;
  • Remove-VMHardDiskDrive — удаляет один или несколько виртуальных жестких дисков (VHD) из виртуальной машины;
  • Add-VMNetworkAdapter — добавляет виртуальный сетевой адаптер на виртуальной машине;
  • Remove-VMNetworkAdapter — удаляет один или несколько виртуальных сетевых адаптеров из виртуальной машины;
  • Copy-VMFile — копирование файлов на виртуальную машину;
  • Get-VMVideo – выводит информацию о настройках видео для виртуальных машин;
  • Move-VMStorage — перемещение хранилища виртуальной машины.

Работа с фоновыми заданиями

В Windows PowerShell есть возможность запускать задачи в фоновом режиме, для того чтобы, не дожидаясь окончания работы команды (для случаев, когда задача выполняется долго), продолжать работать в текущей сессии. Для работы с фоновыми заданиями в PowerShell есть следующие командлеты:

  • Start-Job – запустить фоновую задачу;
  • Stop-Job – остановить фоновую задачу
  • Get-Job – посмотреть список фоновых задач;
  • Receive-Job – посмотреть результат выполнения фоновой задачи;
  • Remove-Job – удалить фоновую задачу;
  • Wait-Job – перевести фоновую задачу на передний план, для того чтобы дожидаться ее окончания.

Работа с объектами

Так как PowerShell работает с объектами, он позволяет выполнять некие действия над этими объектами, например:

  • Measure-Object – командлет позволяет рассчитывать на основе свойств объектов такие числовые агрегирующие параметры как: минимальное, максимальное, среднее значение, сумму и количество. Например, Вы хотите узнать максимальный или средний размер файла в определенном каталоге, или просто узнать количество файлов (запущенных процессов, служб и так далее);
  • Select-Object – с помощью данного командлета можно выбрать определенные объекты или свойства этих объектов, например Вы хотите выводить только название файла и его размер;
  • Sort-Object — сортирует объекты по значениям свойств;
  • Where-Object – командлет для того чтобы ставить условие для выборки объектов на основе значений их свойств;
  • Group-Object – группирует объекты, которые содержат одинаковое значение для заданных свойств;
  • ForEach-Object – перебор объектов с целью выполнения определенной операции над каждым из этих объектов.

Командлеты PowerShell для удаленного управления

С помощью Windows PowerShell можно выполнять команды не только на локальном компьютере, но и на одном или даже на нескольких удаленных компьютерах.

  • Enter-PSSession — запускает интерактивный сеанс с удаленным компьютером;
  • Exit-PSSession — завершает интерактивный сеанс с удаленным компьютером;
  • New-PSSession — создает постоянное подключение к локальному или удаленному компьютеру;
  • Remove-PSSession — закрывает один или несколько сеансов Windows PowerShell;
  • Disconnect-PSSession — отсоединяется от сеанса;
  • Connect-PSSession — подключается к отключенным сеансам;
  • Get-PSSession — получает сеансы Windows PowerShell на локальных и удаленных компьютерах;
  • Invoke-Command — выполняет команды на локальном и удаленных компьютерах.

Работа со службами и процессами

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

  • Get-Process – выводит информацию о запущенных процессах на компьютере;
  • Start-Process – запускает один или несколько процессов на компьютере;
  • Stop-Process — останавливает один или несколько запущенных процессов;
  • Get-Service – выводит информацию о службах;
  • Restart-Service – перезапускает службу;
  • Start-Service – запускает службу;
  • Stop-Service — останавливает службу;
  • Suspend-Service – приостанавливает работу службы;
  • Set-Service – с помощью данного командлета можно изменить свойства службы, например, описание, отображаемое имя и режим запуска. Также его можно использовать для запуска, остановки или приостановки службы.

Работа с компьютером

Windows PowerShell позволяет выполнять административные задачи для операционной системы и компьютера в целом, например, перезапустить операционную систему или переименовать компьютер.

  • Restart-Computer – командлет перезапускает операционную систему (перезагружает компьютер);
  • Stop-Computer – выключает компьютер;
  • Rename-Computer – переименовывает компьютер;
  • Checkpoint-Computer — создает точку восстановления системы на локальном компьютере;
  • Restore-Computer — запускает восстановление системы на локальном компьютере;
  • Disable-ComputerRestore — отключает функцию восстановления системы на указанном диске файловой системы;
  • Enable-ComputerRestore — включает функцию восстановления системы на указанном диске файловой системы;
  • Remove-Computer — удаляет локальный компьютер из домена;
  • Get-EventLog – выводит информацию о событиях в журнале событий, или список журналов событий на локальном или удаленном компьютере;
  • Clear-EventLog — удаляет записи из указанных журналов событий.

Работа с контентом

Для управления контентом, например, текстом в файле в Windows PowerShell существуют специальные командлеты, такие как:

  • Get-Content – получает содержимое элемента (например, считывает файл);
  • Add-Content – добавляет содержимое в заданные элементы, например, текст в файл;
  • Clear-Content — удаляет содержимое элемента, но не удаляет сам элемент;
  • Set-Content — записывает или заменяет содержимое в элемент с новым содержанием.
Илон Маск рекомендует:  Как поместить картинки в combo box

Другие командлеты Windows PowerShell

Также хотелось бы выделить следующие командлеты Windows PowerShell, которые наверняка Вам понадобятся и будут полезны.

  • Get-ExecutionPolicy – с помощью данного командлета можно узнать действующую политику выполнения Windows PowerShell для текущего сеанса;
  • Set-ExecutionPolicy – командлет изменяет политику выполнения Windows PowerShell;
  • Write-Host – выводит информацию на экран (пишет текст);
  • Read-Host – считывает строку ввода из консоли;
  • Write-Warning – выводит предупреждающее сообщение;
  • Write-Error – командлет объявляет ошибку и выводит ее в поток ошибок;
  • Get-Date – возвращает текущую дату и время;
  • Set-Date – командлет изменяет системную дату и время на компьютере.

Вот мы с Вами и рассмотрели полезные и часто используемые командлеты Windows PowerShell, надеюсь, этот справочник будет Вам полезен, удачи!

О`б’фу’ска””ция PowerShell. Как спрятать полезную нагрузку от глаз антивируса

Содержание статьи

Посмотри на эту строку. Что ты здесь видишь?

Полагаю — ничего. А ведь это всего лишь команда netstat /ano после обфускации. В этой статье мы постараемся разобраться, как привести команды на PowerShell к такому виду, и проверим, как на это среагируют антивирусы.

WARNING

Распространение вредоносного ПО преследуется по закону. Все рассмотренные методы представлены в ознакомительных целях.

PowerShell в хакинге

Начнем с разговора о самом PowerShell. Почему именно он часто используется при взломе? Ну, как минимум потому, что PowerShell — это командная оболочка и несложный скриптовый язык, который используется во всех современных системах Windows. К тому же большинство команд исполняется в памяти, что может помочь избежать антивирусного детекта. Если на компьютере включено удаленное управление, то можно получить доступ к системе через зашифрованный трафик. Существуют хорошие инструменты и фреймворки для работы с PowerShell. Также PowerShell можно вызывать из других скриптов и файлов .bat , .doc , .xls , .ppt , .hta , .exe , .dll .

С помощью PowerShell можно загружать код из интернета (к примеру, с pastebin.com) или файла на ПК и исполнять его. Для этого используется командлет Invoke-Expression . Вот несколько примеров использования.

Также можно использовать кодировку Base64. Для начала следует закодировать команды в Base64.

Перед исполнением нужно будет декодировать их с помощью -EncodeCommand .

Есть куча других трюков с PowerShell. Для знакомства с основами и выбора инструментария рекомендую прочитать статью Алексея Панкратова «Выбираем среду разработки на PowerShell и пишем скрипты для Windows».

Обфускация PowerShell. Прятки с антивирусом

Процесс обфускации PowerShell не такой уж и сложный, так как это скриптовый язык и мы работаем со строками, а не с исполняемым двоичным кодом. Пройдемся по некоторым методам обфускации. Будем рассматривать все на примере этой команды:

Обфускация — один из популярных методов обхода сигнатурного анализа.

Для начала попробуем убрать System из строки System.Net.WebClient . На выполнение команды это не повлияет, так как в функциях .NET писать System необязательно.

Посмотрим, что можно сделать еще. URL в нашей команде — это строка. Что можно делать со строками? Правильно — разделять и властвовать соединять, а вернее, конкатенировать. Попробуем это использовать.

Команда отрабатывает точно так же. Теперь попробуем часть команды объявить в виде переменной.

Все отлично обфусцируется и работает. Идем дальше. Кручу-верчу, запутать хочу! DownloadString , наверное, используется хакерами уже сто лет. Запрячем его и New-Object среди “ и ` .

Неплохо замаскировали. Почти непонятно, что это на самом деле.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее

Объявление

  • Регистрация: May 2020
  • Сообщений: 132

Полезные командлеты Powershell для Exchange

Друзья привет! Собираем тут полезные командлеты для exchange server, то что необходимо каждый день, в одном месте.
Формат такой — код powershell и то что он делает. Возможно пояснить походу для масс.
Погнали.

Команда выгружает содержимое почтового ящика пользователя username@mailbox.com в файл PST

  • Закреплено
  • Регистрация: May 2020
  • Сообщений: 794

Комментарий

  • Регистрация: May 2020
  • Сообщений: 34

Переиндексация базы. Иногда требуется, когда возникает ошибка при поиске писем
[PS] C:\Program Files\Microsoft\Exchange Server\V14\scripts>.\ResetSearchIndex.ps1 -Force имя базы
MSExchangeSearch service stopped
Deleting catalog forимя базы
No index for database:имя базы
MSExchangeSearch service Started

Принудительный запрос сертификата

Комментарий

  • Регистрация: May 2020
  • Сообщений: 105

——Подумал и добавил——

Эскпорт почтового ящика в PST

Комментарий

  • Регистрация: May 2020
  • Сообщений: 794

Образец развернутого отчета

Комментарий

  • Регистрация: May 2020
  • Сообщений: 71

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

Запретить юзерам возможность соединения по RPC over HTTPS

Получить сводную информацию по почтовым ящикам с заданного аккаунта и экспортировать ее в Excel

— -Подумал и добавил — —

Test-ActiveSyncConnectivity — тестирует ActiveSync протокол;
Test-CalendarConnectivity – тестирование доступности календаря;
Test-EcpConnectivity – валидация виртуальной директории ECP на выбранном CAS сервере
Test-ImapConnectivity – проверка статуса сервиса IMAP и возможности клиентского подключения по данному протоколу
Test-OutlookWebServices – проверка корректности информации, выдаваемой пользователю сервисом AutoDiscover
Test-OwaConnectivity – валидация виртуальной директории OWA на указанном CAS сервере
Test-WebServicesConnectivity – проверка Exchange Web Services, которые используются, например, Outlook for Mac, Mac Mail и еще некоторыми клиентами.

PowerShell и коды завершения процесса

Этот вопрос с ответом на него пытается разрешить два различных аспекта работы с кодами выхода процесса в PowerShell:

В коде PowerShell, как вы можете запросить код выхода, установленный внешним процессом (вызов внешней программы), и как такие коды выхода интегрируются с обработкой ошибок PowerShell?

Когда кто-то еще вызывает PowerShell через свой CLI, pwsh (PowerShell Core)/ powershell.exe (Windows PowerShell), что определяет код завершения процесса PowerShell, который связывает успех с сбой в вызывающем процессе (например, это может быть задача сборки /CI/автоматизации сервера, запланированная задача или другая оболочка).

Written as of PowerShell Core 7.0.0-preview.2.

PowerShell-внутреннее использование кодов выхода:

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

Собственные команды PowerShell обычно не устанавливают коды выхода и не действуют на них.

PowerShell имеет абстрактный аналог для кодов выхода: автоматическая логическая переменная состояния успеха $? :

Он отражает наличие в самой последней выполненной команде каких-либо ошибок, но на практике он используется редко, не в последнюю очередь потому, что что-то столь же несущественное, как включение команды в (. ) , сбрасывает $? в $true — см. этот GitHub проблема — и поскольку использование Write-Error в пользовательских функциях не устанавливает $? на $false — см. эту проблему GitHub.

Хотя $? также отражает (сразу после этого), сообщала ли внешняя программа код выхода 0 (сигнализация успешна, создание отчета $? $true ) или ненулевой код выхода (обычно сигнализация сбой, выполнение $? $false ), это автоматическая переменная $LASTEXICODE , которая содержит определенный код завершения в виде целого числа, и это значение сохраняется до тех пор, пока другая внешняя программа, если таковая имеется, не будет вызвана в том же сеансе.

  • Кроме того, $? может сообщать о ложных отрицаниях, если внешняя программа сообщает код выхода 0 , в то же время производя вывод stderr, а также имеется перенаправление PowerShell, включающее 2> или *> — см. этот ответ.

В отличие от ошибок завершения или ошибок завершения, о которых сообщают собственные команды PowerShell, ненулевые коды выхода из внешних программ не могут автоматически обрабатываться переменной предпочтения $ErrorActionPreference ; то есть вы не можете использовать эту переменную, чтобы заставить замолчать вывод stderr из внешних программ, и вы не можете, что более важно, выбрать прерывание сценария через значение ‘Stop’ , когда внешняя программа сообщает ненулевой код выхода.

  • Лучшая интеграция внешних программ в обработку ошибок PowerShell предлагается в настоящего RFC.

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

Установка кода выхода, который, по крайней мере, сообщает об успехе ( 0 ) и сбое (обычно ненулевом), является важным механизмом , позволяющим внешним абонентам узнать, был ли ваш код PowerShell успешным в целом или нет, например как при вызове из запланированной задачи или с сервера автоматизации, такого как Jenkins, через PowerShell CLI (интерфейс командной строки) — pwsh для PowerShell Core и powershell.exe для Windows PowerShell.

CLI предлагает два способа выполнения кода PowerShell, и вы можете использовать exit , чтобы установить код выхода, где — желаемый код выхода:

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL