Глава 5. Добавление оснасток/ модулей

Microsoft и прочие сторонние построили оснастки или модули PowerShell для своих собственных разнообразных продуктов. Для применения командлетов PowerShell с этими технологиями вам придётся в свои сценарии либо добавлять их оснастки, либо импортировать их модули.

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

Хотя оснастки и наследуются, давайте кратко затронем и их, отобразив те продукты, которые применяют (применяли) их.

Оснастки PowerShell

Exchange Sever сам по себе является наилучшим примером демонстрации оснасток PowerShell. Exchange 2007 и 2010, оба, пользуются оснастками.

Для добавления оснастки Exchange в свои сценарии, вы можете применять приводимый ниже код. (Примеры оснасток Exchange 2007 и 2010 находятся, соответственно, в Листинге 5-1 и в Листинге 5-2). Поскольку эти продукты официально завершили состояние своего срока поддержки, их применение достаточно редкое (они применимы лишь для организаций, которые ещё пока не обновились).

[Замечание]Замечание

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

 

Листинг 5-1. Код для добавления оболочки управления Exchange 2007


If ((Get-PSSnapin | where {$_.Name -match "Exchange.Management"}) -eq $null)
{
       Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin
}
 	   
 

Листинг 5-2. Код для добавления оболочки управления Exchange 2010


If ((Get-PSSnapin | Where-Object { $_.Name -match "Microsoft.Exchange.Management.PowerShell.E2010" }) -eq $null) {
    Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010
}
 	   

После того как оснастка была добавлена в ваши сеанс или сценарий, она способна исполнять команды Exchange внутри своего окна, как это показано на Рисунке 5-1.

 

Рисунок 5-1


Оболочка управления Exchange

Вы также можете воспользоваться в своём окне PowerShell get-pssnapin для проверки того, какие оснастки доступны.

На Рисунке 5-2 я хочу воспользоваться имеющимся преимуществом оболочки Quest, поэтому я применяю get-pssnapin в оболочке Quest AD для выявления названия соответствующей оснастки.

 

Рисунок 5-2


Оболочка управления Quest AD

Листинг 5-3 показывает как добавлять соответствующую оснастку в ваш сценарий PowerShell или в сеанс при помощи той же самой технологии что и для продукта Exchange.

 

Листинг 5-3. Код для добавления оболочки управления Quest AD


If ((Get-PSSnapin | where {$_.Name -match "Quest.ActiveRoles"}) -eq $null)
{
    Add-PSSnapin Quest.ActiveRoles.ADManagement
}
 	   
[Замечание]Замечание

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

Модули

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

В языке программирования PowerShell нам требуются модули для взаимодействия с различными продуктами, такими как Azure, Office 365, Exchange Online и тому подобными.

Gallery PowerShell по- существу это репозиторий, который содержит почти все модули, которые может применять всякий.

Для установки модуля в вашей машине из Gallery PowerShell, воспользуйтесь таким кодом:


Install-Module -Name AzureAD
		

Введите yes (как это показано на Рисунке 5-3), когда получите приглашение на установку необходимого модуля.

 

Рисунок 5-3


Установка из модуля PowerShell Gallery

После установки этого модуля в вашей машине, он сохранится в C:\Program Files\WindowsPowerShell\Modules, как это отображено на Рисунке 5-4.

 

Рисунок 5-4


Путь к модулям в вашем компьютере

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


Update-Module -Name AzureAD
		

или


Install-Module -Name AzureAD -force #(она также обновит ваш модуль до последней версии)
		

При помощи update вы можете к тому же обновлять свой модуль до определённой версии:


Update-Module -Name AzureAD -RequiredVersion 1.0.1
		

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


Remove-Module AzureAD
		

После того как вы установили необходимый модуль, что является одноразовой задачей, и хотите воспользоваться этим модулем, вы можете осуществить это при помощи команды Import-Module.

[Замечание]Замечание

После powerShell V3 модули загружаются автоматически после того как в вашем сценарии запускается самый первый командлет из этого модуля.

Вы всё ещё можете практиковать импорт необходимых модулей в своём сценарии перед исполнением команды:


Import-Module AzureAD
		

Для получения всех установленных в вашей машине модулей вы можете воспользоваться приводимым ниже кодом (его результаты отображены на Рисунке 5-5):


Get-Module -ListAvailable
		
 

Рисунок 5-5


Отображение списка модулей, доступных в вашем компьютере

Модуль шпаргалки (vsadmin)

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


   Название модуля: vsadmin
   Установка модуля (см. Рисунок 5-6:
Install-Module -Name vsadmin
		
 

Рисунок 5-6


Установка модуля vsadmin

После его установки вы обнаружите файлы, созданные внутри вашего каталога модуля (C:\Program Files\WindowsPowerShell\Modules), как это отображено на Рисунке 5-7.

 

Рисунок 5-7


Отображение файлов внутри модуля vsadmin

Как постулировалось, вы можете импортировать этот модуль в свой сеанс при помощи import-module как- то так:


import-module vsadmin
		

Рисунок 5-8 показывает доступные внутри полученного модуля vsadmin команды. Вы можете пользоваться приводимой ниже командой для проверки функций и командлетов в любом модуле:

 

Рисунок 5-8


Доступные команды модуля vsadmin

Давайте изучим функции Office 365, а затем вы переместитесь к прочим функциям системного администратора, которые вы можете применять ежедневно.

  • LaunchEOL/RemoveEOL (Exchange Online)

  • LaunchSOL/RemoveSOL (Skype Online)

  • LaunchSPO/RemoveSPO (SharePoint Online)

  • LaunchCOL/RemoveCOL (Security и Compliance)

  • LaunchMSOL/RemoveMSOL (MSonline Azure Active Directory)

  • LaunchEXOnprem/RemoveEXOnprem (для сервера Exchange на площадке)

Три функции из office 365 снабжены префиксом с тем, чтобы они не конфликтовали с командами на площадке и быстро применялись/ распознавались в неком гибридном сценарии. Например, команда Exchange Online get-mailbox это get-EOLmailbox, если вы применяете этот модуль для её запуска, как это показано позднее.

[Замечание]Замечание

Для функций office 365 необходимы следующие естественные модули office 365 в модуле vsadmin, чтобы он заработал, или же он запросит их установку.

Например, когда вы хотите подключиться к Office 365 Exchange online, вы можете воспользоваться LaunchEOL, она выдаст приглашение для авторизации и, после таковой, вы получите подключение. Здесь также выполнится проверка установлена ли в вашем компьютере или нет оболочка управления Exchange Online. Если её нет, вы получите подсказку. Обратите внимание на Рисунок 5-9.

 

Рисунок 5-9


Приглашение на аутентификацию из Office 365

Рисунок 5-10 показывает вам что вы подключены и можете применять команды Exchange.

 

Рисунок 5-10


Оболочка управления Exchange Online с командой Get-MailBox в префиксе

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

Аналогичным образом вы можете применять прочие функции, потому как они разработаны подобно. Например, воспользуйтесь этим кодом и просмотрите его результаты на Рисунке 5-11.


LaunchSPO –orgName techwizard
		
 

Рисунок 5-11


Отображение подключения к SharePoint Online при помощи LaunchSPO

[Совет]Совет

Нажатие Tab на клавиатуре после нажатия дефиса отобразит вам те параметры, которые требуются для любой функции в PowerShell.

Для отключения от сеанса вы можете применять следующие функции: RemoveEOL/ RemoveSOL/ RemoveSPO и т.д..

Другими хорошими функциями, которые на самом деле нравятся системным администраторам выступают функции LaunchEXOnprem/ RemoveEXOnprem, поскольку они предназначены для серверов Exchange на площадке. Для подключения к некому серверу Exchange с площадки в своей сетевой среде воспользуйтесь таким кодом:


LaunchEXOnprem -psurl http://exchangeserver.techwizard.cloud/Powershell
		

или


LaunchEXOnprem -ComputerName exchangeserver.techwizard.cloud
		

Для отключения воспользуйтесь той же самой техникой что и для функций Office 365:


RemoveEXOnprem -computername exchangeserver.techwizard.cloud
		

Давайте теперь обсудим общие функции внутри данного модуля. В Главе 2 мы уже делились функциями Write-Log, Set-recyclelogs и start-progressbar, а также прочими. Эти функции также выступают частью данного модуля, а потому вам не следует копировать их и вставлять в свои сценарии когда вы импортировали данный модуль в свой сценарий. Просмотрите Листинг 5-4 и Рисунок 5-12.

 

Листинг 5-4. Импорт vsadmin и применение функции Write-Log


Import-Module vsadmin
$log = Write-Log -Name "log_file" -folder logs -Ext log
Write-Log -Message "Information..........Script" -path $log  #default  will log as information
Write-Log -Message "warning.........Message" -path $log -Severity Warning #you can display warning using the severity
Write-Log -Message "error.........Error" -path $log -Severity error #you can display error using the severity
 	   
 

Рисунок 5-12


Отображение результатов исполнения Листинга 5-4

Аналогичным образом вы можете создавать файл CSV:


$report = Write-Log -Name "log_Enable" -folder reports -Ext csv
		

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

Шифрование пароля (vsadmin)

Вы можете применять пароль и позднее применять его в своём сценарии для подключения к интернет службам, таким как Office 365 и Azure следующим образом (для результатов этого обратитесь к Рисунку 5-13):


Save-EncryptedPassword -password "testpassword" -path c:\temp\password1.txt
		
 

Рисунок 5-13


Шифрование пароля с применением команды save-encrypted

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


$cred = get-auth -userId sukhija@techwizard.cloud -passwordfile c:\temp\password1.txt
$pwd = $cred[0] ### полномочия, которые могут применяться внутри вызовов csom /api.
$pscredential = $cred[1] ###полномочия, которые могут применяться для функций, которые поддерживают полномочия ps.
		

или


$cred = get-auth -userId sukhija@techwizard.cloud -password  "encryptedpassword"
$pwd = $cred[0] ### полномочия, которые могут применяться внутри вызовов csom /api.
$pscredential = $cred[1] ###полномочия, которые могут применяться для функций, которые поддерживают полномочия ps.
		

Давайте воспользуемся фрагментом кода шпаргалки для подключения к Office 365 при помощи сохранённых в вашем файле полномочий PS и экспорту отчёта CSV в почтовые ящики. (Его можно видоизменить и запускать по расписанию по мере необходимости). Смотрите Листинг 5-5 и Рисунок 5-14.

 

Листинг 5-5. Код отображения применения полномочий PS


Import-Module vsadmin

$cred = get-auth -userId sukhija@techwizard.cloud -passwordfile "c:\temp\password1.txt"  #getcredentials that you created using Save-EncryptedPassword
$pscredential = $cred[1] ###полномочия, которые могут применяться для функций, которые поддерживают полномочия ps.

LaunchEOL -Credential $pscredential
$data = Get-EOLMailbox -ResultSize unlimited | Select Name,WindowsEmailAddress,IssueWarningQuota, ProhibitSendQuota,ProhibitSendReceiveQuota #fetch the required data from exchange online

$data | Export-Csv "c:\temp\mailboxes.csv" -NoTypeInformation #export the data in csv format
RemoveEOL #отключаем свой обмен интернет сеанса
 	   
 

Рисунок 5-14


Экспорт данных соответствующих почтовых ящиков в файл CSV

Для считывания файлов ini пользуйтесь Get-IniContent , а затем применяйте в сценариях полученные значения. Смотрите Рисунок 5-15.

 

Рисунок 5-15


Пример файла INI

На Рисунке 5-16 вы можете разглядеть пример следующего кода:


$inifile = "c:\temp\config.ini"
$readini = Get-IniContent $inifile
$User = $readini["ServiceAccount"].UserID
		
 

Рисунок 5-16


Отображение того, как считывать файл INI при помощи команды GetIniContent

Другой полезной функцией для ежедневного применения является Save-CSV2Excel. Как можно догадаться из её названия, она преобразовывает файл CSV в форматированный Excel:


Save-CSV2Excel -CSVPath C:\data\auditmbx.csv -Exceloutputpath c:\data\audit.xlsx
		

Существенными в мире системного администратора являются случайным образом вырабатываемые сложные пароли. Итак, зачем применять Web или некий инструмент для их выработки когда вы можете выполнить это при помощи своей функции New-RandomPassword из нашего модуля vsadmin? Рассмотрите это пример на Рисунке 5-17:


New-RandomPassword – NumberofChars 9
		

Он кодируется при помощи 5, 9, 14 и 20.

 

Рисунок 5-17


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

И последнее, но не по степени значимости, я делюсь некоторыми функциями Active Directory, которые не доступны сразу после установки модуля Active Directory.

Get-ADGroupMembersRecursive способна рекурсивно выделять участников групп, однако требуется и сам модуль AD:


Get-ADGroupMembersRecursive -Groups "Test Nested Group"
		

Дополнительно с этой функцией вы можете ознакомиться на https://techwizard.cloud/2020/10/24/get-ad-group-members-recursively/.

Get-ADUserMemberOf способна проверять является ли некий пользователь участником группы или нет, но при этом требуется сам модуль AD:


Get-ADUserMemberOf -User "User" -Group "Group"
		

Она возвращает true когда указанный пользователь участник группы или в противном случае она возвращает false. Дополнительно с этой функцией вы можете ознакомиться на https://techwizard.cloud/2020/12/31/check-if-ad-user-is-member-of-group/.

Выводы

В данной главе вы изучили как применять модули в PowerShell. Модули, они как батарейки. Без их сложно составлять сценарий любого продукта при помощи PowerShell. Я также поделился модулем шпаргалки системного администратора (vsadmin), который обладает большим числом ежедневно применяемых функций/ командлетов.