About_wql

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

Если вы хотите прочитать все содержимое текстового файла, самый простой способ — использовать встроенную функцию Get-Content. Вот код, который позволяет это сделать:

Get-Content C: logslog01012020.txt

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

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

$ file_data = Get-Content C: logslog01012020.txt

Теперь вы можете использовать эту переменную $ file_data для анализа или дальнейшей обработки.

Поиск файлов по содержимому

Get-Content не позволяет искать и открывать фалы  находящиеся внутри других каталогов. Такой поиск называется рекурсивным и он доступен в Get-ChildItem.

В следующем примере мы вернем файлы из всех каталогов и подкаталогов:

Get-ChildItem -Path ‘C:\Windows\’ -Recurse -File

1 Get-ChildItem-Path’C\Windows\’-Recurse-File

File — возвращает только файлы. Каталоги нам не нужны.

С Get-ChildItem вы так же можете использовать Include,Exclude и Filter, которые были рассмотрены раннее. Использовать эти ключи лучше всего в первой команде т.к. это будет работать быстрее.

Через конвейер мы сможем открыть каждый файл, а с Select-Sting проверить есть ли в нем нужный текст. Так мы найдем файл с Powershell, который содержит строку ‘127.0.0.1’ в папке Windows:

Get-ChildItem -Path ‘C:\Windows\System32\drivers\etc\’ -Recurse -File |
Get-Content -Raw |
Select-String ‘127.0.0.1’

1
2
3

Get-ChildItem-Path’C:\Windows\System32\drivers\etc\’ -Recurse -File |

Get-Content -Raw |

Select-String ‘127.0.0.1’

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

Подключение дисков под другим пользователем

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

В случае команды ‘New-PSDrive’ вам нужно будет выполнить ‘Get-Credential’ и поместить в него учетные данные. Традиционный способ поместить эти данные в переменную:

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

После этого мы передаем переменную в параметр ‘-Credential’:

В случае с ‘New-SMBMapping’ эта операция выполняется проще. У вас есть 3 параметра, которые нужно заполнить:

  • UserName — логин;
  • Password — пароль;
  • SaveCredential — нужно ли сохранять учетные данные.

Пример подключения с сохранением учетных данных:

Проблема, которую не получилось решить на разных версиях Powershell, связана с параметром ‘-SaveCredentials’. Его указание приводит к ошибке «New-SmbMapping : The parameter is incorrect.». Его отсутствие — не сохраняет введенные учетные данные и после перезагрузки связь с диском может пропасть если не добавить соответствующую запись в ‘Credential Manager’. 

Первый запуск

Подключим EPPlus версии 4.5.3.3 и создадим базовую обвязку для будущего генератора.

Сердцем генератора будет метод Generate. ExcelPackage это модель документа, через которую мы и будем осуществлять все взаимодействия с ним. Также имеется конструктор для передачи пути к файлу или потока.

В методе main создается генератор отчетов, а также генератор Excel файлов. Далее полученный файл просто записывается на диск.

При попытке запустить приложение, получаем exception:

Все правильно, Excel документ не может существовать без страниц, должна быть хотя бы одна. Добавляем ее, все интуитивно понятно:

Запускаем снова и… вот оно! Теперь наше приложение генерирует документ и, хотя там еще ничего нет, он уже весит 2,5KB — значит мы работаем с Excel правильно и все идет как надо.

Вывод данных

Давайте выведем основную информацию по компании в шапку. Для доступа к конкретной ячейки объект Cells на странице пакета снабжен удобным индексатором. При этом, до конкретной ячейки можно достучаться как через номер строки и столбца, так и по привычному всем буквенно-числовому коду:

Для вывода исторических данных понадобится как минимум шапка таблицы и цикл по массиву History:

Предлагаю обратить внимание на метод LoadFromArrays, который заполняет диапазон ячеек рваным(зубчатым) массивом. Здесь мы можем видеть, что типизация теряется и передавая массив object мы ожидаем что EPPlus в конечном итоге использует ToString, чтобы записать переданное в ячейки

Подключение сетевых дисков

Проблемы с командами могут зависеть от версии вашего интерпретатора. Powershell 5-ой версии был предустановлен во всех версиях начиная с Windows 10 и Windows Server 2016. Если вы сомневаетесь в версии, то это можно проверить следующей командой:

New-SmbMapping

Самый простой способ подключить диски, используя команду New-SmbMapping, будет выглядеть следующим способом:

В этой команде используются следующие ключи:

LocalPath — локальный путь или буква, под которой будет подключен диск;

RemotePath — путь к папке через IP или DNS

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

Persistent — дословно переводится как ‘постоянный’, но в случае сетевых папок обозначает восстановление соединения после отключения сети/компьютера.. Пример выше специально демонстрирует проводник так как это одна из проблем этой команды в версии 5.1 — диск начнет отображаться в проводнике только после перезагрузки компьютера или перезапуске процесса ‘explorer.exe’

Пример выше специально демонстрирует проводник так как это одна из проблем этой команды в версии 5.1 — диск начнет отображаться в проводнике только после перезагрузки компьютера или перезапуске процесса ‘explorer.exe’.

Мы можем перезапустить процесс средствами Powershell. Выполнение этой команды, как минимум, закроет все открытые окна:

Так же у вас могут появиться другие ошибки, например следующие говорят об уже занятой букве:

  • New-SmbMapping : Имя локального устройства уже используется.
  • New-SmbMapping : The local device name is already in use.

Следующая ошибка произойдет, если вы указали слэш ‘\’ в конце пути или к нему нет доступа на уровне сети (фаерволла, dns, политик и т.д.):

New-SmbMapping : The network name cannot be found.

New-PSDrive

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

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

Где:

  • Name — путь, буква или любой другой идентификатор определяющий диск. Чаще всего это просто буква;
  • PSProvider — поставщик услуг. Всех поставщиков услуг можно увидеть через ‘Get-PSProvider’. В большинстве случаев поставщиком услуг для сетевых дисков будет ‘FileSystem’. В теории вы можете использовать поставщика «Registry» что бы в рамках сессии Powershell легче обращаться к какому-то пути. Поставщик услуг или ‘PSProvider’ — это условная программа, которая будет обрабатывать вашу команду между Powershell и Windows;
  • Root — путь до удаленной папки. Если бы в ‘PSProvider’ стоял ‘Registry’, то тут можно было указать путь следующего формата: ‘HKLM:\Software\Microsoft’;
  • Persist — должно ли восстанавливаться подключение при потере связи;
  • Scope — область действия диска. В этом случае не должно играть значение, но на форумах советуют использовать значение ‘Global’, если не получается подключать диск. Если бы вы использовали сетевой диск только для одно сессии Powershell — вы могли бы ограничить область видимости диска.

У вас могут появиться следующие ошибки:

  • New-PSDrive : The network resource type is not correct;
  • The specified network resource or device is no longer available.

Один из способов решения — убрать слэш в конце пути. Так же попробуйте открыть полный путь в проводнике так как ошибка может указывать на недоступность папки. Так же можете попробовать убрать параметр ‘Persist’, т.к. после этого ошибка может изменится и принять более понятный характер.

Рабочий способ сделать этот диск постоянным — отредактировать его через реестр. Ветка, под которой был подключен диск, будет иметь следующий путь »HKCU:\Network\G». «G» в конце — это буква под который был подключен диск. Мы можем вернуть существующие значения следующей командой:

Вам нужно обратить внимание на выделенные фрагменты. ‘DeferFlags’, в значении 4, обозначает, что диск подключается под логином и паролем аутентифицированного пользователя

1-ца говорит об обратном и, возможно, что пароль не указан. На одном из форумов писали, что это поле должно указывать на цифру 4 что бы команда успешно работала. Я наблюдал случаи с 1 и 4, но проблем не замечал.

Моя проблема была решена после указания 1 в поле ‘ConnectionType’. Значение 1 говорит, что будет выполняться перенаправление дисков. Установить это значение через Powershell можно так:

Обновление справки

Чтобы загрузить и установить файлы справки на свой компьютер:

1. Запустите PowerShell с параметром «Запуск от имени администратора».

2. Выполните команду:

Update-Help

Связанная статья: Как запустить PowerShell с правами администратора

После установки файлов справки вы можете использовать командлет Get-Help для отображения разделов справки. Вы также можете использовать командлет Update-Help для загрузки обновлённых файлов справки, чтобы ваши локальные файлы справки всегда были актуальными.

Для получения дополнительных сведений о командлете Update-Help введите:

Get-Help Update-Help -Online

Выполнение сценария

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

Политика выполнения по умолчанию предотвращает выполнение всех скриптов, включая скрипты, которые вы пишете на локальном компьютере. Подробнее см. в разделе about_Execution_Policies.

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

Чтобы изменить политику выполнения, используйте следующую процедуру.

В командной строке введите:

или

Изменение вступает в силу немедленно.

Чтобы выполнить сценарий, введите полное имя файла скрипта и полный путь к нему.

Например, чтобы запустить сценарий Get-ServiceLog.ps1 в каталоге C:\Scripts, введите:

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

Например, чтобы запустить сценарий ServicesLog.ps1 в локальном каталоге, введите:

Если у скрипта есть параметры, введите параметры и значения параметров после имени файла скрипта.

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

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

Запуск с помощью PowerShell

Начиная с PowerShell 3,0 можно запускать сценарии из проводника.

Чтобы использовать функцию «Запуск с помощью PowerShell», сделайте следующее:

Запустите проводник, щелкните правой кнопкой мыши имя файла скрипта и выберите команду «запустить с помощью PowerShell».

Функция «запустить с помощью PowerShell» предназначена для выполнения скриптов, которые не имеют обязательных параметров и не возвращают выходные данные в командную строку.

Дополнительные сведения см. в разделе about_Run_With_PowerShell.

Выполнение сценариев на других компьютерах

Чтобы запустить сценарий на одном или нескольких удаленных компьютерах, используйте параметр FilePath командлета.

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

Следующая команда запускает сценарий на удаленных компьютерах с именем Server01 и Server02.

Как получить справку о команде PowerShell

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

Get-Help КОМАНДЛЕТ

Например:

Get-Help Get-Module

Чтобы посмотреть примеры использования команды:

Get-Help КОМАНДЛЕТ -Examples

Следующая конструкция также выводит примеры использования КОМАНДЛЕТА, но вывод чуть отличается (в выводе, отсутствует название и синопсис):

(Get-Help КОМАНДЛЕТ).examples

Для вывода дополнительной информации используйте:

Get-Help КОМАНДЛЕТ -Detailed

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

Get-Help КОМАНДЛЕТ -Full

Справка PowerShell описывает командлеты, функции, сценарии и модули PowerShell и объясняет концепции, включая элементы языка PowerShell.

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

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

Без файлов справки Get-Help отображает автоматически созданную справку для командлетов, функций и сценариев.

Онлайн помощь

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

Get-Help КОМАНДЛЕТ -Online

В результате будет открыт веб-браузер со страницей документации по интересующей вас команде.

Какие типы книг поддерживает Power BI?

Power BI поддерживает импорт данных и подключение к книгам, созданным в Excel 2007 и более поздних версиях. Книги необходимо сохранять в формате XLSX или XLSM с размером не более 1 ГБ. Некоторые функции, описанные в этой статье, доступны только в более поздних версиях Excel.

Книги с диапазонами или с таблицами данных

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

Книги с моделями данных

Книги могут содержать модель данных с одной или несколькими таблицами данных, загруженными в нее с помощью связанных таблиц, Power Query (функция «Скачать и преобразовать» в Excel 2016) или Power Pivot. Power BI поддерживает все свойства моделей данных, такие как отношения, меры, иерархии и ключевые показатели эффективности.

Примечание

Книги с моделями данных не могут совместно использоваться на клиентах Power BI. Например, если пользователь входит в Power BI с помощью учетной записи contoso.com, то он не может совместно использовать книгу Excel с пользователем, который входит с помощью учетной записи входа Power BI из woodgrovebank.com.

Книги с подключениями к внешним источникам данных

При использовании Excel для подключения к внешнему источнику данных, когда книга уже загружена в Power BI, можно создавать отчеты и информационные панели на основе данных из подключенного источника данных. Вы также можете настроить запланированное обновление, чтобы автоматически подключаться прямо к источнику данных и получать обновления. Вам больше не потребуется выполнять обновление вручную на ленте «Данные» в Excel. Все визуализации в отчетах и плитки на информационных панелях, основанные на данных из этого источника данных, будут обновляться автоматически. Дополнительные сведения см. в разделе Обновление данных в Power BI.

Книги с листами Power View, сводными таблицами и диаграммами

Отображение или отсутствие отображения листов PowerView, сводных таблиц и диаграмм в Power BI зависит от того, где сохранен файл книги и от выбранного способа его получения в Power BI. Рассмотрим это подробнее ниже.

Типы данных

Кроме строк и чисел в Powershell существуют и другие типы. Самые популярные из них:

  • — строка:
  • — код символа ASCII
  • — булево значение «True»,»False»;
  • — число длинною в 32 бита;
  • — число длинною в 64 бита;
  • — число с плавающей точкой диною в 128 бит и d на конце;
  • — 8 битовое число с плавающей точкой;
  • — 32 битовое число с плавающей точкой;
  • — тип данных Powershell хранящий дату и время;
  • — массив;
  • — хэш таблица;
  • — массив типа ключ и значение.

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

Если вы сомневаетесь в типе переменной можно использовать GetType():

Назначать типы можно как значению, так и самой переменной:

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

Есть некоторые типы, которые объявлять обязательно, так как Powershell может конвертировать в другой формат. Один из таких примеров PSCustomObject. Если мы не объявим этот тип, то получим hashtable:

Про работу с такими типами вы можете почитать в предыдущих статьях, например работа с хеш таблицами в Powershell Hashtable.

Дату так же можно объявлять несколькими путями. Это можно делать через команду и объявляя тип (используя свой стандарт времени):

 

Чтение определенных колонок из файла Excel

Иногда удобно прочитать содержимое файла целиком, но бывают случаи, когда требуется получить доступ к определенному элементу. Например, нужно считать значение элемента и присвоить его полю объекта.

Это делается с помощью функции и параметра . Например, можно ограничить функцию, чтобы она читала только определенные колонки. Добавим параметр, чтобы он читал колонки, которые соответствуют значениям «Name», «Overall» и «Potential».

Для этого укажем числовой индекс каждой колонки:

Копировать

Вот что выдаст этот код:

Name Overall Potential
L. Messi 93 93
1 Cristiano Ronaldo 92 92
2 J. Oblak 91 93
3 K. De Bruyne 91 91
4 Neymar Jr 91 91

Таким образом возвращаются лишь колонки из списка .

В много встроенных возможностей. Легко изменять, добавлять и агрегировать данные. Даже можно строить сводные таблицы. И все это сохраняется в Excel одной строкой кода.

Рекомендую изучить DataFrame в моих уроках по Pandas.

Получение компьютеров

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

Команда точно выполнится на домен контроллере, так как все поддерживаемые серверные версии ОС устанавливают нужный модуль Powershell вместе с Active Directory (если вы только специально не отключали эту возможность). Если вы планируете выполнять команду с клиента на Windows 7 и выше, то такой модуль устанавливается вместе с RSAT (Remote Server Administration Tools). В отдельном случае может понадобится импортировать этот модуль следующей командой:

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

В остальных случаях стоит смотреть на явные запреты на выполнение скриптов Powershell и чтения Active Directory.

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

Параметр Filter является обязательным. Вы можете вернуть дополнительные данные используя Properties:

Вам так же будет интересно:

Изменение файла с последующей записью

Вы так же можете изменить содержимое файла и перезаписать этот файл. Представим, что вам нужно заменить адрес ‘127.0.0.1’ в строке — это можно сделать так:

‘My address: 127.0.0.1/24’ -replace ‘127.0.0.1’,’192.168.3.2′

1 ‘My address: 127.0.0.1/24′-replace’127.0.0.1′,’192.168.3.2’

Или с помощью регулярного выражения (не точный шаблон):

‘My address: 127.0.0.1/24’ -replace ‘\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}’,’192.168.3.2′

1 ‘My address: 127.0.0.1/24′-replace’\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}’,’192.168.3.2′

Для записи в файл у нас есть два варианта. Первый — это использовать перенаправление в виде знака ‘>’, который перезапишет все содержимое файла или создаст новый файл:

$file_content = Get-Content -Path ‘C:\file1.txt’
$file_content -replace ‘127.0.0.1’,’192.168.3.2′ > file1.txt

1
2

$file_content=Get-Content-Path’C:\file1.txt’

$file_content-replace’127.0.0.1′,’192.168.3.2′>file1.txt

Второй вариант — использовать команду Set-Content:

$file_content = Get-Content -Path ‘C:\file1.txt’
$file_content -replace ‘127.0.0.1’,’192.168.3.2′ | Set-Content -Path ‘C:\file1.txt’

1
2

$file_content=Get-Content-Path’C:\file1.txt’

$file_content-replace’127.0.0.1′,’192.168.3.2’|Set-Content-Path’C:\file1.txt’

Получение данных

Для открытия файла ‘C:\text.txt’ можно использовать следующую команду:

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

  • ‘*’ — говорит об неизвестном количестве символов;
  • — говорит, что в этом месте может быть буква ‘a’ или ‘b’;
  • ? — обозначает один неизвестный символ.

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

В этом примере я открою сразу два файла: lmhosts и hosts:

Следующие примеры вернут аналогичный результат:

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

  • Include — в этом параметре мы добавляем шаблон, по которому будем включать файл;
  • Exclude — с помощью этого параметра исключает файлы;
  • Filter — исключает результаты.

Для каждого из этих параметров есть обязательно условие — использовать знак ‘*’ в конце пути.

Так мы вернем все файлы с расширением ‘.txt’:

В отличие от Filter, в Include и Exclude мы можем использовать несколько значений. В этом примере мы откроем файлы формата ‘.txt’ и ‘.ini’:

Полное и построчное чтение с поиском

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

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

Если вам вдруг понадобится выводить по 2 или более строк за раз, можно указать их количество через ReadCount:

Разделение файла

Файл выводится построчно из-за делиметра (разделителя), который по умолчанию равен ‘\n’ (идентификатор новой строки). Мы можем разделить файл иначе, например, использовав точку с запятой:

То есть результат выше — это массив. В массивах Powershell мы можем получать содержимое по индексам. В следующем примере я просто уберу точку с запятой:

Подсчет количества строк

Построчный вывод с командой Powershell позволяет посчитать количество строк во всем файле. Для подсчета используется команда Measure-Object:

Если нужна только цифра, а не объект, можно сделать так:

Кодировки

В параметре -Encoding можно указать следующие кодировки:

  • ASCII
  • BigEndianUnicode
  • BigEndianUTF32
  • Byte
  • Default
  • OEM
  • Unicode
  • UTF7
  • UTF8
  • UTF32

Вам так же будет интересно:

Подсчет четных чисел в файле

У меня есть файл ‘file.txt’ со следующим содержанием:

some text 123 some text 6 some
text 9 some text 312345
123.2

1
2
3

some text123some text6some

text9some text312345

123.2

Шаблон регулярного выражения  ‘\d*\.?\d*’ говорит, что мы ищем число, после которого может быть точка, после которого могут быть еще числа. Таким образом мы захватим целые и числа с плавающей точкой. 

Для выделения таких чисел из строк нужно использовать Select-String:

$file = Get-Content -Path ‘file.txt’
$result = Select-String -InputObject $file -Pattern ‘\d*\.?\d*’ -AllMatches | Foreach {$_.matches}

1
2

$file=Get-Content-Path’file.txt’

$result=Select-String-InputObject$file-Pattern’\d*\.?\d*’-AllMatches|Foreach{$_.matches}

Нам нужно отформатировать вывод убрав пустые строки и получить значения свойства Value:

$result | where Value -ne » | select Value

1 $result|where Value-ne»|select Value

Мы можем вернуть остаток от деления использовав %. Если число делится на 2 с остатком 0, то оно будет четным:

# Открываем файл
$opened_file = Get-Content -Path ‘file.txt’
# Поиск чисел
$result = Select-String -InputObject $opened_file -Pattern ‘\d*\.?\d*’ -AllMatches | Foreach {$_.matches}
# Исключение пустых строк в выводе
$result = ($result | where Value -ne »).Value
foreach ($num in $result){
# Результат деления
$n = $num%2
if ($n -eq 0){Write-Output «Число четное: $num»}
else {Write-Output «Число не четное: $num»}
}

1
2
3
4
5
6
7
8
9
10
11
12

# Открываем файл

$opened_file=Get-Content-Path’file.txt’

# Поиск чисел

$result=Select-String-InputObject$opened_file-Pattern’\d*\.?\d*’-AllMatches|Foreach{$_.matches}

# Исключение пустых строк в выводе

$result=($result|where Value-ne»).Value

foreach($num in$result){

# Результат деления

$n=$num%2

if($n-eq){Write-Output»Число четное: $num»}

else{Write-Output»Число не четное: $num»}

}

Get-ADUser: экспорт пользователей AD в CSV/TXT

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

Get-ADUser -Filter * -Properties PasswordExpired,PasswordLastSet,PasswordNeverExpires | Format-Table Name,PasswordExpired,PasswordLastSet,PasswordNeverExpires > C:\temp\users.txt

Или вы можете экспортировать список пользователей AD в файл CSV (который позже будет удобно импортирован в Excel):

Get-ADUser -filter * -Properties PasswordExpired,PasswordLastSet,PasswordNeverExpires | Where-Object {$_.name –like "*Dmitry*"} | Sort-Object PasswordLastSet | Select-Object Name,PasswordExpired,PasswordLastSet,PasswordNeverExpires | Export-csv -path c:\tmp\user-passwords-expires.csv -Append -Encoding UTF8

Как узнать список всех команд PowerShell

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

Чтобы узнать имена всех команд, запустите:

Get-Command

Будет выведена таблица с четырьмя столбцами:

  • CommandType — тип команды (Alias, Function, Cmdlet)
  • Name — имя команды
  • Version — версия PowerShell с которой стала доступна данная команда
  • Source — модуль, в котором присутствует эта команда

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

Get-Command | Sort-Object -Property Source

Ещё одно представление, которое может быть полезным

Get-Command | Sort-Object -Property Noun | Format-Table -GroupBy Noun

Чтобы показать команды только определённого модуля, например, модуля Storage, используйте:

Get-Command -Module Storage

А эта команда покажет все командлеты модуля NetTCPIP:

Get-Command -module NetTCPIP

Как найти команду по части имени

Есть возможность фильтровать информацию, выводимую командой Get-Command. Допустим вы хотим посмотреть команды PowerShell содержащие слово «Alias», для этого нужно выполнить следующую команду:

Get-Command -Name *Alias

Получение событий

Учитывая, что включенная политика касается не только паролей, можно настроить фильтр через Powershell или GUI. Мы настроим фильтры, которые будут выводить события связанные с определенными идентификаторами ‘Event ID’. Нас интересуют следующие идентификаторы:

  • 4723 — попытка смены пароля;
  • 4724 — попытка сброса пароля;
  • 4740 — пользователь был заблокирован;
  • 4767 — пользователь был разблокирован.

Фильтрация логов с Event Viewer

Что бы выполнить фильтрацию через GUI — откройте логи ‘Security’ в ‘Event Viewer’ на домен-контроллере. Открыв журнал вы увидите множество событий не касающихся паролей:

Эти фильтры мы можем применить зайдя в соответствующее меню:

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

После этих установок у нас будут отображаться только нужные события.

Фильтрация логов с Powershell

В Powershell есть две команды для работы с логами:

  • Get-WinEvent — получает логи из всех журналов;
  • Get-Eventlog — получает логи из журналов Application, System, or Security. Является устаревшим командлетом.

Обе команды имеют параметр ‘ComputerName’, с помощью которого можно подключаться удаленно.

У получения логов средствами Powershell есть две проблемы:

  1. Процесс получения логов медленный. Выполнение одного запроса может выполняться больше 1 секунды;
  2. Если брать другие команды Powershell, то их вывод всегда структурирован в виде ‘Ключ’=’Значение’. При получении логов журнала, так же как в EventViewer, часть информации будет представлена как строка, т.е ‘Ключ’= ‘Ключ=Значение Ключ=Значение’. В разных случаях может придется использовать регулярные выражения и парсить значения.

Что бы максимально ускорить процесс получения логов можно использовать 3 параметра фильтрации: FilterXPath, FilterHashtable, FilterXml.

XPath — это язык запросов, который был создан для работы с XML. Мы можем не создавать свой запрос XPath, а увидеть уже составленный на созданном раннее фильтре, на вкладке XML:

Команда, которая получит подобные логи с домен-контроллера ‘AD1’ и используя запрос XPath, будет выглядеть следующим образом:

Аналогичное можно сделать использовав HashTable. Мы не должны указывать тип логов, т.к. это сделано в массиве:

Если вам больше нравится вариант с запросом через hashtable, но вы не понимаете как правильно его составить, можно использовать следующий подход. Мы должны найти хоть один лог, который нам нужен используя любые средства Powerhsell. Затем мы выводим все свойства через ‘SELECT *’ и заполняем ими нашу таблицу:

Отличия между массивом hashtable и обычными средствами Powershell в скорости. Если вы будете фильтровать вывод используя Powerhsell (как в примере выше) — это будет медленнее. Кроме указанных параметров в документации можно найти дополнительные варианты.

Создание приложения Windows Forms

Поскольку Windows PowerShell является хостом для .NET-библиотек и классов, вы можете писать следующий код и тем самым сделать доступными для своего приложения Windows Forms и .NET-классы Drawing:

Теперь вы можете создать форму и разместить на ней элементы управления:

Стоит отметить, что add_Click — это способ подключения события к элементу управления в Windows PowerShell. В данном случае к событию щелчка кнопки подключается вызов функции. Код на рис. 8 добавляет кнопки и текстовые поля.

Рис. 8. Добавление кнопок и текстовых полей

Чтобы заполнить $listbox вашим набором XPath-запросов, сделайте так:

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Ваша ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: