Как установить модуль Active Directory PowerShell в командной строке
Вы можете установить модуль RSAT-AD-PowerShell не только на Windows Server, но и на свои рабочие станции.
Если вы попытаетесь выполнить приведённую выше PowerShell команду:
Install-WindowsFeature -Name "RSAT-AD-PowerShell" -IncludeAllSubFeature
то получите сообщение об ошибке:
Install-WindowsFeature: Целевым объектом указанного командлета не может быть клиентская операционная система Windows.
Причём независимо от того, какая у вас редакция Windows: Home, Pro, Enterprise.
Тем не менее, в Windows 10 build 1809 или новее пакет RSAT интегрирован в образ Windows (как компоненты по запросу), поэтому вы можете использовать эту команду PowerShell для установки модуля Active Directory:
Add-WindowsCapability -online -Name "Rsat.ActiveDirectory.DS-LDS.Tools"
Предыдущую команду нужно выполнять в командной строке с правами администратора.
Связанная статья: Как запустить PowerShell с правами администратора
Конвейер в PowerShell
Одной из главных возможностей Windows PowerShell является возможность использования конвейера при выполнении команд.
Конвейер – это передача результата работы командлета через вертикальную черту (|) другому командлету. При этом, как Вы помните, в PowerShell командлеты работают с объектами и возвращают объекты, соответственно по конвейеру передаются также объекты.
С помощью конвейера можно выполнять сложные задачи простым и удобным способом без необходимости написания сложных алгоритмов и сценариев.
Например, давайте узнаем название самого большого файла в каталоге «C:\Windows\System32» (простой пример конвейера).
Команда
Get-ChildItem -Path «C:\Windows\System32» -File | Sort-Object length -Descending | Select-Object -First 1
1 |
Get-ChildItem -Path «C:\Windows\System32» -File | Sort-Object length -Descending | Select-Object -First 1 |
Где,
- Get-ChildItem – командлет получения объектов в указанном каталоге;
- Sort-Object – командлет для сортировки объектов, в нашем случае мы сортируем по размеру файла (length -Descending);
- Select-Object – командлет выбора нужных свойств объекта, в нашем случае мы выводим стандартные поля и только самый первый объект, т.е. большой файл (параметр -First 1).
Все командлеты отделены друг от друга вертикальной чертой. Результат работы каждого командлета передается на вход другому командлету, т.е. сначала мы получаем все объекты в указанном каталоге, затем сортируем полученный результат и в заключение выбираем самый первый объект.
Различные типы модулей PowerShell
Существует 4 различных типа модулей PowerShell:
- Скриптовые модули — Самый распространенный тип модуля, не требующий знания C#, в основном любые файлы PSM1, содержащие в основном функции и код, используемые разработчиками скриптов и администраторами.
- Бинарные модули — Содержат скомпилированный код на основе сборки .NET Framework (DLL), используемый разработчиками командлетов для создания модулей, содержащих командлеты, поставщиков и т. д.
- Модули манифеста — Скриптовые модули, содержащие манифест, например, с информацией об авторе и т. д.
- Динамические модули — Специальный тип модуля, который никогда не записывается на диск и существует только в памяти. Элементы динамического модуля (функции/переменные) сразу же доступны в сеансе PowerShell, пока сеанс не будет закрыт.
Командлеты powershell
Sort-Object — сортирует объекты по возрастанию или по убыванию на основе значений свойств объектов. Можно задать одно свойство или несколько свойств (сортировка по нескольким ключам), а также выбрать сортировку с учетом или без учета регистра. Кроме того, можно сделать так, чтобы командлет Sort-Object выводил только объекты с уникальными значениями того или иного свойства.
Copy-Item — копирует элемент из одного местоположения в пространстве имен в другое. Командлет Copy-Item не удаляет копируемые элементы. Типы элементов, которые может копировать командлет, определяются наличием поставщиков Windows PowerShell. Например, при использовании командлета с поставщиком FileSystem копируются файлы и папки, а при работе с поставщиком реестра копируются разделы и записи реестра.
Move-Item — перемещает элемент, включая его свойства, содержимое и дочерние элементы, из одного местоположения в другое. Оба заданных местоположения должны поддерживаться одним и тем же поставщиком. Например, можно переместить файл или вложенный каталог из одного каталога в другой либо переместить подраздел реестра из одного раздела в другой. При перемещении элемента он удаляется в исходном местоположении и создается в новом.
Remove-Item — удаляет один и более элементов. Данный командлет поддерживается многими поставщиками, поэтому он может удалять элементы различных типов, включая файлы, каталоги, разделы реестра, переменные, псевдонимы и функции.
Get-ChildItem — получает элементы из заданных местоположений. Если элемент является контейнером, данный командлет получает из контейнера элементы, которые называются дочерними элементами. Для извлечения элементов из всех дочерних контейнеров можно использовать параметр Recurse. Местоположение может являться расположением в файловой системе, например каталогом, либо расположением, предоставляемым другим поставщиком, например кустом реестра или хранилищем сертификатов.
Ручная установка модуля PowerShell в офлайн системах
Сначала нужно установить нужный вам PowerShell модуль на компьютере, на котором доступ в интернет не ограничен.
Проверьте, что модуль присутствует в галерее PSGallery:
Find-Module –Name *SqlServer*| Select Name, Version, Repository
Скачайте нужный вам модуль на ваш компьютер в указанный каталог:
Save-Module –Name SqlServer –Path C:\ps\
Скопируйте папку с модулем на другой компьютер, на котором вы хотите его установить.
Разберемся, в каких каталогах хранятся модули PowerShell:
Как вы видите, PowerShell модули могут хранится по одному из следующих путей:
Скопируйте модуль в каталог C:\Program Files\WindowsPowerShell\Modules .
Проверьте, что модуль SQLServer теперь доступен:
Get-Module -Name SQLServer -ListAvailable
Каталог модуля можно узнать так:
(Get-Module -ListAvailable SQLServer).path
Выведите список доступных команд в модуле:
Get-Command -Module SQLServer
Аналогичным образом вы можете установить любой модуль. Я чаще всего использую этот способ для установки PowerShell модуля SQLServer, PSWindowsUpdate и PowerCLI для VMWare.
Как удалить модуль Opencart
За ненадобностью, установленные ранее модули или модули коробочной версии, которые вам не нужны, можно удалить.
Удаление модуля Opencart не повлияет на работу системы, а процесс установки/удаления модулей это простейшее действие администратора, которое нужно знать.
Чтобы удалить модуль Opencart идем по таким шагам:
- Авторизуемся в административной части магазина;
- Идем на вкладку Модули/Расширения >>> Модули/Расширения;
- В списке ищем удаляемый модуль;
- Если модуль уже размещен на страницах (макетах) магазина, сначала его удаляем из этих макетов. Это действие – удаление модуля Opencart из макета (страниц);
Далее, красной кнопкой деактивируем модуль. Модуль отключается;
Чтобы совсем удалить модуль Opencart из системы, идем на вкладку «Установка расширений» в блок «История». Здесь удаляем наш модуль соответствующей кнопкой.
Что способствовало появлению Windows PowerShell?
До появления PowerShell существовали (и существуют) следующие инструменты для автоматизации и администрирования сервисов: командная строка Windows и Windows Script Host. Но у этих технологий есть недостатки.
У командной строки Windows есть и возможность выполнять какие-то административные задачи и возможность записать алгоритм действий, сохранив его в виде скрипта (bat-файла), при этом можно использовать некие элементы программирования, например, использовать переменные, условные конструкции и даже что-то вроде циклов.
Большинство программных продуктов имеет консольный интерфейс, т.е. мы можем управлять программой, используя командную строку, при этом экономя ресурсы за счет отсутствия затрат на работу графического интерфейса. Компания Microsoft для серверной операционной системы Windows Server даже выпускает редакции без графического интерфейса (Server Core, в Windows Server 2016 даже есть Nano Server), но всего этого недостаточно, так как возможности командной строки ограничены, т.е. написать какую-то сложную логику для автоматизации чего-либо мы не сможем, а если и сможем, то на это нам потребуется время и знания.
Также недостатком командной строки является то, что для полноценного управления сервером мы используем различные консольные утилиты программных продуктов, и поэтому использовать командную строку для администрирования на самом деле сложно, с точки зрения того, что у всех этих утилит разный синтаксис, параметры, методы использования и для того чтобы выполнять типовые задачи, т.е. каждодневные, приходиться держать все это в памяти, а для выполнения нетиповых задач приходиться сначала почитать справку или документацию.
Технология Windows Script Host позволяет выполнять все административные задачи, что и командная строка, включая их автоматизацию путем написания WSH скриптов, но здесь мы уже можем использовать полноценные языки программирования (VBScript и JScript), т.е. можно реализовывать сложную логику и алгоритмы. К тому же с помощью WSH мы управляем программными продуктами через объектный интерфейс, другими словами Windows Script Host намного «круче» чем командная строка. Но данная технология также не стала тем идеальным инструментом администрирования и автоматизации этого администрирования для системных администраторов, так как Windows Script Host требовал знаний вышеперечисленных языков программирования, что для системных администраторов на самом деле лишнее. Администраторам нужно всего лишь простой инструмент администрирования с возможностью запрограммировать какие-то действия, а углубляться в объектные модели программных продуктов на языках программирования VBScript и JScript им не хочется.
В итоге компании Microsoft необходимо было разработать такой инструмент администрирования для системных администраторов, который бы на 100 процентов удовлетворял все потребности сисадминов как в плане возможностей администрирования и автоматизации, так и в плане удобства и простоты использования, таким образом, появился Windows PowerShell.
Установка модуля Powershell Active Directory на Windows Server
Active Directory для Windows PowerShell уже встроен в операционные системы Windows Server (начиная с Windows Server 2008 R2), но по умолчанию не включен.
В Windows Server 2016, 2019 и 2022 вы можете установить модуль AD для PowerShell из Диспетчера серверов (Добавить роли и компоненты → Функции → Инструменты удалённого администрирования сервера → Инструменты администрирования ролей → Инструменты AD DS и AD LDS → Модуль Active Directory для Windows PowerShell).
В англоязычной версии сервера это соответственно в Server Manager: Add Roles and Features → Features → Remote Server Administration Tools → Role Administration Tools → AD DS and AD LDS Tools → Active Directory module for Windows PowerShell.
Если вы уже установили роль Active Directory Domain Services, то это означает, что модуль Powershell Active Directory уже активирован и дополнительных действий предпринимать не нужно.
Вы также можете установить модуль из консоли PowerShell с помощью команды:
Install-WindowsFeature -Name "RSAT-AD-PowerShell" -IncludeAllSubFeature
Вы можете установить RSAT-AD-PowerShell не только на контроллеры домена. Подойдёт любой рядовой сервер домена или даже рабочая станция. Модуль PowerShell Active Directory устанавливается автоматически при развёртывании роли доменных служб Active Directory (AD DS) (при повышении уровня сервера до контроллера домена AD).
Модуль взаимодействует с AD через веб-службу Active Directory, которая должна быть установлена на вашем контроллере домена (связь осуществляется через TCP-порт 9389).
PowerShell Module Components and Types
A module comprises four essential components, which include a PowerShell script or a managed cmdlet assembly, additional assemblies or scripts, a manifest file, and a directory that contains all of those content. The following sections describe the types of modules you can get by mixing and matching the different possible parts of a module together:
- Script Modules: A script module is simply a Windows PowerShell script with a .psm1 extension, which allows administrators to use import, export, and management functions on it. A script module contains valid Windows PowerShell code. It can be saved or installed on the PowerShell module path or any path that you explicitly describe so that PowerShell can reasonably discover it.
- Binary Modules: A binary module is a .NET Framework assembly (.dll) that contains compiled code. Compared to a script module, a binary module allows you to create cmdlets faster or use features such as multithreading that are not as easy to code in Windows PowerShell scripts. In addition, a binary module can be saved or installed in a folder along the PowerShell module path.
- Manifest Modules: A manifest module is a module that uses a manifest file to describe all of its component binary modules but doesn’t have any sort of core assembly or script.
- Dynamic Modules: A dynamic module is a module that is not loaded from, or saved to, a file. Instead, they are created dynamically by a script, using the New-Module cmdlet. This module enables a script to create a module on demand that does not need to be loaded or saved to persistent storage. Dynamic modules do not require permanent folders to store their related assemblies.
Результат выполнения
# вывод консоли у меня pip install --no-index --find-links pkg -r requirements.txt Looking in links: pkg Processing ./pkg/Flask-1.1.2-py2.py3-none-any.whl Processing ./pkg/Flask_WTF-0.14.3-py2.py3-none-any.whl Processing ./pkg/et_xmlfile-1.0.1.tar.gz Processing ./pkg/openpyxl-3.0.3.tar.gz Processing ./pkg/jdcal-1.4.1-py2.py3-none-any.whl Processing ./pkg/pylint-2.5.2-py3-none-any.whl Processing ./pkg/itsdangerous-1.1.0-py2.py3-none-any.whl Processing ./pkg/Jinja2-2.11.2-py2.py3-none-any.whl Processing ./pkg/Werkzeug-1.0.1-py2.py3-none-any.whl Processing ./pkg/click-7.1.2-py2.py3-none-any.whl Processing ./pkg/WTForms-2.3.1-py2.py3-none-any.whl Processing ./pkg/mccabe-0.6.1-py2.py3-none-any.whl Processing ./pkg/isort-4.3.21-py2.py3-none-any.whl Processing ./pkg/toml-0.10.1-py2.py3-none-any.whl Processing ./pkg/astroid-2.4.1-py3-none-any.whl Processing ./pkg/MarkupSafe-1.1.1-cp37-cp37m-manylinux1_x86_64.whl Processing ./pkg/typed_ast-1.4.1-cp37-cp37m-manylinux1_x86_64.whl Processing ./pkg/wrapt-1.12.1.tar.gz Processing ./pkg/lazy_object_proxy-1.4.3-cp37-cp37m-manylinux1_x86_64.whl Processing ./pkg/six-1.14.0-py2.py3-none-any.whl Could not build wheels for et-xmlfile, since package 'wheel' is not installed. Could not build wheels for openpyxl, since package 'wheel' is not installed. Could not build wheels for wrapt, since package 'wheel' is not installed. Installing collected packages: itsdangerous, MarkupSafe, Jinja2, Werkzeug, click, Flask, WTForms, Flask-WTF, et-xmlfile, jdcal, openpyxl, mccabe, isort, toml, typed-ast, wrapt, lazy-object-proxy, six, astroid, pylint Running setup.py install for et-xmlfile ... done Running setup.py install for openpyxl ... done Running setup.py install for wrapt ... done Successfully installed Flask-1.1.2 Flask-WTF-0.14.3 Jinja2-2.11.2 MarkupSafe-1.1.1 WTForms-2.3.1 Werkzeug-1.0.1 astroid-2.4.1 click-7.1.2 et-xmlfile-1.0.1 isort-4.3.21 itsdangerous-1.1.0 jdcal-1.4.1 lazy-object-proxy-1.4.3 mccabe-0.6.1 openpyxl-3.0.3 pylint-2.5.2 six-1.14.0 toml-0.10.1 typed-ast-1.4.1 wrapt-1.12.1
Мой файл requirements.txt для примера
Flask==1.1.2 Flask-WTF==0.14.3 et-xmlfile==1.0.1 openpyxl==3.0.3 jdcal==1.4.1 pylint==2.5.2
Поиск по истории в двух направлениях
Сочетания клавиш: Ctrl + R и Ctrl + SКомандлеты: Get-PSReadlineKeyHandler и Set-PSReadlineKeyHandler
Как и в CMD, в PowerShell есть история сессии с навигацией стрелками, a Get-History выводит журнал по аналогии с F7. Полный список сочетаний клавиш, связанных с журналом, можно вывести так:
Get-PSReadlineKeyHandler | ? {$_.function -like '*hist*'}
В результатах появились две новые функции поиска по истории, которые показаны на картинке ниже. Работает это очень просто.
- Нажмите сочетание Ctrl + R и начните вводить запрос → появится последний найденный результат.Увеличить рисунок
- Повторите сочетание Ctrl + R, чтобы увидеть предыдущее совпадение, или измените запрос.
В отличие от Get-History, содержащей историю текущей сессии, этот журнал ведется глобально и сохраняется при закрытии окна.
Спасибо за наводку Антону Дровосекову и Константину Сидякину из нашей группы ВК.
Install PowerShell Modules from PowerShell Gallery
The other way we can install PowerShell modules is to use the PowerShell Gallery. These will be modules that have been authored by Microsoft and the PowerShell community. You’ll install them through PowerShell directly from the internet. That also means you’ll need to make sure that your firewall and content/web filter allow connections from your computer to the internet through PowerShell. I won’t get into that here, though.
The process is simple but we need to step through a couple prerequisites first.
Verify You Have the PowerShellGet Module
Windows 10, Windows Server 2019, Windows Management Framework (WMF) 5.0, and PowerShell 6 are all shipped with PowerShellGet. If you’re running any of those you’re good to go here.
If you are running an OS older than Windows 10 or using a PowerShell older than 6.0 you’ll need to download the PowerShellGet msi here.
Update Nuget
PowerShellGet relies on the provider named Nuget. Always start with the latest version by running the following command:
Install PowerShell Module from Gallery
To install a module we just need to know it’s name. The gallery page will tell you what the command is to install the module. I’ve found a module on the gallery named SqlServer that I wish to install so I’ll run the following command:
After which I receive the following message:
I will answer Y which will commence installing the module which I can see visually by the loading text at the top of the window:
And that’s it! Pretty slick huh? Try it out and let me know if you have any issues!
Demonstration
For this demonstration I’m using a laptop that has a virtual machine (VM) installed, which I can treat as two different environments – the VM, which will have internet access disabled and the laptop, which will have internet access.
First of all, the particular module that I’m after requires a minimum PowerShell version of 5, so I’ll check what version I have installed on my VM test system.
Of course, initially the module has to be downloaded, using a machine that does have internet access. For this demonstration, that is the laptop.
First of all, I’ll confirm that I don’t already have the module installed on the server, by using ‘Import-Module’.
The message ‘The specified module ‘sqlserver’ was not loaded because no valid module file was found in any module directory’ means that it couldn’t find the module in any of the directories it uses, or it has been installed but PowerShell is not a high enough version to access it. That is why we have the check on the version at the beginning.