Как сохранить модули PowerShell
Бывают ситуации, когда у вас в системе нет интернета, а необходимость в модуле есть. Тут можно перенести заранее сохраненные модули на такую автономную системы, через флешку, или копирование по сети. Но для начала их нужно сохранить, для этого вы можете выполнить такую команду:
Save-Module -Name xRobocopy,Pscx -Path C:\Temp\Module-PowerShell
После переноса не забываем импортировать модуль, и если потребуется, то подкрутить политику ExecutionPolicy. Чтобы импортировать удаленный модуль, сначала необходимо создать PSSession (через New-PSSession ). Следующим шагом является импорт модуля, доступного на удаленном устройстве.
Import-Module -Name ActiveDirectory -PSSession $AdminServer -Prefix ‚Rmt’)
Чтобы удалить модуль, команда Remove-Module выполняет эту работу. После удаления все команды, которые когда-то был добавлен модулем, удаляются из сеанса, это работает как реверсия импорта модуля. Обратите внимание, что из локальной сессии будет удален только модуль, но без удаления файлов модуля.
Win+X
В Windows 10 PS можно вызывать из меню WinX. Дело в том, что по умолчанию путём клика по команде «Командная строка» открываемся CMD. Её можно заменить на PowerShell.
Открываем «Свойства» Панели задач, во вкладке «Навигация» ставим галочку возле единственной опции и сохраняем настройки.
Рис. 7 – Замена командной строки на PowerShell в меню WinX
Можно вызывать PowerShell через командную строку, прописав в ней «powershell» или запуском исполняемого файла по пути: %WINDIR%System32WindowsPowerShellv1.-битных систем и по адресу %WINDIR% syswow64WindowsPowerShellv1.-разрядных Windows любой редакции.
Рис. 8 – Запуск PS из каталога, где хранится его исполняемый файл
вернуться к меню
Создание временного файла
Командлет: New-TemporaryFile
В скриптах нередко нужно создать временный файл, чтобы скинуть туда какую-то информацию. Новый командлет создан именно для этого.
#Создание временного файла New-TemporaryFile #Создание временного файла и получение его полного пути $tmpfile = (New-TemporaryFile).FullName $tmpfile
При создании CheckBootSpeed у меня была именно такая задача – записать собранные данные во временный файл, показать его в блокноте и удалить. Командлета не было, но Василий Гусев подсказал такой вариант:
$file = ::GetTempFileName()
Здесь обратный случай – командлет легче запомнить, чем класс .NET. В утилите я сейчас такой способ не использую, но на заметку взял.
Подробное описание
Все типы значений можно хранить в переменных PowerShell. Например, можно сохранить результаты команд и сохранить элементы, используемые в командах и выражениях, таких как имена, пути, параметры и значения.
Переменная — это единица памяти, в которой хранятся значения. В PowerShell переменные представлены текстовыми строками, которые начинаются со знака доллара ( ), например , или .
Имена переменных не учитывают регистр и могут содержать пробелы и специальные символы. Однако имена переменных, которые содержат специальные символы и пробелы, трудно использовать, поэтому их следует избегать. Дополнительные сведения см. в разделе .
В PowerShell существует несколько различных типов переменных.
-
Пользовательские переменные: созданные пользователем переменные создаются и обслуживаются пользователем. По умолчанию переменные, создаваемые в командной строке PowerShell, существуют только в том случае, если открыто окно PowerShell. При закрытии окон PowerShell переменные удаляются. Чтобы сохранить переменную, добавьте ее в профиль PowerShell. Кроме того, можно создавать переменные в скриптах с глобальной областью, сценарием или локальными областями.
-
Автоматические переменные: автоматические переменные хранят состояние PowerShell. Эти переменные создаются с помощью PowerShell, а PowerShell изменяет их значения в соответствии с требованиями, чтобы поддерживать их точность. Пользователи не могут изменять значения этих переменных. Например, переменная хранит путь к каталогу установки PowerShell.
Дополнительные сведения, список и описание автоматических переменных см. в разделе about_Automatic_Variables.
-
Привилегированные переменные. переменные предпочтений сохраняют настройки пользователя для PowerShell. Эти переменные создаются с помощью PowerShell и заполняются значениями по умолчанию. Пользователи могут изменять значения этих переменных. Например, переменная определяет максимальное количество записей в журнале сеанса.
Дополнительные сведения, список и описание переменных предпочтений см. в разделе about_Preference_Variables.
Команды жизненного цикла
PowerShell использует класс System.Management.Automation.VerbsLifeCycle для определения действий, которые применяются к жизненному циклу ресурса. В следующей таблице перечислено большинство определенных команд.
Команда (псевдоним) | Действие | Неподходящие синонимы |
---|---|---|
Approve (ap) | Утверждает или одобряет состояние ресурса или процесса. | |
Assert (as) | Подтверждает состояние ресурса. | Certify |
Build (bd) | Создает артефакт (обычно двоичный код или документ) из набора входных файлов (обычно это исходный код или декларативные документы). Эта команда добавлена в PowerShell 6. | |
Complete (cp) | Завершает операцию. | |
Confirm (cn) | Подтверждает или проверяет состояние ресурса или процесса. | Acknowledge, Agree, Certify, Validate, Verify |
Deny (dn) | Отклоняет объекты и блоки или препятствует состоянию ресурса или процесса. | Block, Object, Refuse, Reject |
Deploy (dp) | Отправляет приложение, веб-сайт или решение на удаленный целевой объект таким образом, чтобы потребитель этого решения мог получить к нему доступ после завершения развертывания. Эта команда добавлена в PowerShell 6. | |
Disable (d) | Настраивает для ресурса недоступное или неактивное состояние. Например, командлет деактивирует точку останова. Эта команда образует пару с командой . | Halt, Hide |
Enable (e) | Настраивает для ресурса доступное или активное состояние. Например, командлет активирует точку останова. Эта команда образует пару с командой . | Start, Begin |
Install (is) | Помещает ресурс в расположение и при необходимости инициализирует его. Эта команда образует пару с командой . | Настройка |
Invoke (i) | Выполняет действие, например запуск команды или метода. | Run, Start |
Register (rg) | Создает запись для ресурса в репозитории, например в базе данных. Эта команда образует пару с командой . | |
Request (rq) | Запрашивает ресурс или разрешения. | |
Restart (rt) | Останавливает операцию и запускает ее снова. Например, командлет останавливает, а затем запускает службу. | Перезапуск |
Resume (ru) | Запускает приостановленную операцию. Например, командлет запускает приостановленную службу. Эта команда образует пару с командой . | |
Start (sa) | Инициирует операцию. Например, командлет запускает службу. Эта команда образует пару с командой . | Launch, Initiate, Boot |
Stop (sp) | Прекращение действия. Эта команда образует пару с командой . | End, Kill, Terminate, Cancel |
Submit (sb) | Представляет ресурс для утверждения. | Опубликовать |
Suspend (ss) | Приостанавливает действие. Например, командлет приостанавливает службу. Эта команда образует пару с командой . | Пауза |
Uninstall (us) | Удаляет ресурс из указанного расположения. Эта команда образует пару с командой . | |
Unregister (ur) | Удаляет запись для ресурса из репозитория. Эта команда образует пару с командой . | Удалить |
Wait (w) | Приостанавливает операцию, пока не произойдет указанное событие. Например, командлет приостанавливает операции до тех пор, пока не завершится выполнение одного или нескольких фоновых заданий. | Sleep, Pause |
Description
The cmdlet copies an item from one location to another location in the same namespace.
For instance, it can copy a file to a folder, but it can’t copy a file to a certificate drive.
This cmdlet doesn’t cut or delete the items being copied. The particular items that the cmdlet can
copy depend on the PowerShell provider that exposes the item. For instance, it can copy files and
directories in a file system drive and registry keys and entries in the registry drive.
This cmdlet can copy and rename items in the same command. To rename an item, enter the new name in
the value of the Destination parameter. To rename an item and not copy it, use the
cmdlet.
Как получить справку о команде 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 отображает автоматически созданную справку для командлетов, функций и сценариев.
Онлайн помощь
Вы можете найти справку по PowerShell в Интернете по адресу https://go.microsoft.com/fwlink/?LinkID=108518.
Чтобы открыть онлайн справку для любого командлета или функции, введите:
Get-Help КОМАНДЛЕТ -Online
В результате будет открыт веб-браузер со страницей документации по интересующей вас команде.
Работа со службами и процессами
PowerShell, конечно же, умеет управлять службами и процессами в Windows, для этого существуют такие командлеты как:
- Get-Process – выводит информацию о запущенных процессах на компьютере;
- Start-Process – запускает один или несколько процессов на компьютере;
- Stop-Process — останавливает один или несколько запущенных процессов;
- Get-Service – выводит информацию о службах;
- Restart-Service – перезапускает службу;
- Start-Service – запускает службу;
- Stop-Service — останавливает службу;
- Suspend-Service – приостанавливает работу службы;
- Set-Service – с помощью данного командлета можно изменить свойства службы, например, описание, отображаемое имя и режим запуска. Также его можно использовать для запуска, остановки или приостановки службы.
Работа с Powershell
Есть два способа использования Powershell. Существует основное окно командной строки, которое используется для запуска команд или вызова предварительно написанных сценариев. Тогда есть ISE, который комбинирует окно CLI с базовой средой разработки. Используя это, вы можете писать и тестировать свои скрипты.
ISE имеет список команд с возможностью поиска, и вы можете использовать его окно терминала без открытия файла. Список команд позволяет вам составить вашу команду и вставить ее. Если вы занимаетесь более продвинутой разработкой, установите Microsoft Visual Studio Code. В коде включена поддержка управления версиями Git. и другие языки.
Powershell уникален тем, что построен полностью из команд, Microsoft называет их Cmdlets. Эти команды одинаковы, если вы работаете через командную строку или пишете сложные сценарии. Поэтому, когда вы используете эти команды, вы можете подумать о том, как связать их вместе для создания ваших первых сценариев.
Сохранение, загрузка и импорт
Скорее всего нашу функцию или готовый командлет мы захотим использовать и далее. В зависимости от ситуации мы должны сохранять и загружать его разными способами.
Импорт на множество компьютеров
Если это командлет, который будет использоваться на множестве компьютеров или вы его планируете использовать короткое время, то скрипт можно сохранить в файл с расширением «.ps1». Загрузка такой функции будет выполняться так:
После выполнения этой команды мы сможем использовать нашу функцию.
Минус такого способа в том, что нужно будет делать каждый раз после закрытия консоли (сессии).
Такой подход хорошо подходит в удаленных сценариях, когда на компьютерах пользователей нужно сделать какую-то работу.
Загрузка как модуля
Если вы планируете использовать функцию на своем компьютере, то вы можете загрузить эту команду как модуль. Вы можете использовать и на других компьютерах, но я считаю это плохим вариантом.
Первое что нужно сделать это получить пути окружения Powershell:
Выберете один из путей, где лежат модули или перейдите по следующему:
В указанной папке Modules вам нужно создать папку и файл с одинаковыми именами. Файлу добавляете расширение «.psm1» и помещаете в него свой скрипт.
В моём случае путь выглядит так:
После этого закройте все окна Powershell и откройте заново. Модуль будет импортироваться автоматически. Проверти что он загружен можно с помощью команды:
…
Рекомендую
Копирование файлов между сессиями
Командлет: Copy-Item
Новая возможность командлета copy упрощает администраторам вполне типовую задачу копирования файлов на удаленный ПК. На целевой машине должна работать служба удаленного управления WinRM, которая конфигурируется одной командой:
Enable-PSRemoting
Для подключения к машине в доверенном домене больше ничего не требуется. В рабочей группе надо на своем ПК добавить целевой компьютер в доверенные узлы по имени ПК или IP-адресу:
#добавить ПК в доверенные узлы Set-Item wsman:localhost\client\trustedhosts -value "192.168.1.113" #убрать ПК из доверенных узлов #Set-Item wsman:localhost\client\trustedhosts -value ""
Дальше вы создаете новую сессию, указывая имя пользователя для подключения к удаленному ПК, и вводите учетные данные. В созданную сессию можно копировать файлы.
$rs = New-PSSession -ComputerName 192.168.1.113 -Credential test-pc\vadim Copy-Item -Path "C:\temp\my.csv" -Destination "C:\temp\" -ToSession $rs
Полезное дополнение к возможностям удаленного управления PowerShell, согласитесь.
Удаленное использование модуля с другого компьютера
Вам никто не мешает создать некий такой репозиторий модулей PowerShell на отдельной виртуальной машине и обращаться к ним удаленно. Установим для начала сессию с удаленным компьютером.
$session = New-PSSession -ComputerName w10-module
Удостоверимся, что на удаленном сервере есть нужные нам модули, через команду:
Get-Module -PSSession $session –ListAvailable
импортируем теперь в свою текущую сессию нужный модуль с удаленного сервера:
Import-Module -PSsession $session -Name VMware.PowerCLI
После завершите сеанс, когда закончите:
Remove-PSSession $session
Еще можно использовать командлет Invoke-Command. Тут вы подключаетесь к удаленному серверу и импортируете модуль.
$session = New-PSSession -ComputerName w10-module Invoke-Command {Import-Module VMware.PowerCLI} -Session $session
Сохраним на локальный компьютер нужный нам модуль.
Export-PSSession -Session $s -CommandName *-PowerCLI* -OutputModule RemSQLServer -AllowClobber
Данная команда создаст на вашем компьютер новый PowerShell модуль VMware.PowerCLI (в каталоге C:\Program Files\WindowsPowerShell\Modules ). Сами командлеты при этом не копируются. Далее закройте сессию.
Remove-PSSession $session
Теперь его можно локально импортировать и использовать.
Работа с 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, которые Вы точно будете использовать.
- 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 — возвращает список команд, введенных в ходе текущей сессии.
Использование XML-файлов
В последнее время XML-файлы все чаще используются для хранения конфигурационной информации. По мере того как данные в XML-файле накапливаются, он становится все менее удобным для прочтения. Далее мы рассмотрим, как применять функции Windows PowerShell для работы с XML-файлами.
Для примера возьмем конфигурационный файл Windows Calendar, который выглядит так (рис. 18):
и выполним над ним манипуляции, представленные на рис. 19.
В первой строке мы загружаем содержимое всего XML-файла в переменную, используя команду get-content
:
PS C:\> $doc = get-content ‘.\settings.xml’
Обратим внимание на применение типа данных : если не указать использование данных этого типа, в переменную будет загружен просто текст. Во второй строке мы выбираем определенную ветвь XML-файла — для этого применяется метод selectnodes
объекта, хранящего XML-данные и XPath-описание адреса ветви:
Во второй строке мы выбираем определенную ветвь XML-файла — для этого применяется метод selectnodes
объекта, хранящего XML-данные и XPath-описание адреса ветви:
PS C:\> $settings = $doc.selectnode(‘CalendarSettings/X-Root/VCalendar’)
После этого мы используем команду foreach-object
для получения значения свойства Name
для всех элементов в данной ветви.
Самые полезные командлеты PowerShell
В оболочке собран их внушительный каталог, представленный сотнями команд. Запомнить все эти названия и приложенные к ним свойства, не представляется возможным. Но этого и не нужно делать, большинство их используется крайне редко, а то и вовсе не применимы на практике
Следует обратить внимание лишь на самые важные, практичные, несущие в себе полезные функции
Наиболее полезные в применении:
- Get-Help – справочник по назначению командлетов и общим свойствам оболочки;
- Update-Help — загрузка и установка обновленных справочных данных;
- Get-Command – поисковик требуемых команд, с авто заполнением строки;
- Get-Alias – отражает установленные псевдонимы, общим списком или с конкретикой;
- Get-PSDrive – представляет запущенные диски и происходящие на них процессы;
- Install-WindowsFeature – ролевой и компонентный установщик;
- Uninstall-WindowsFeature – ролевой и компонентный деинсталлятор;
- Get-History – отвечает за возвращение командных списков, выполненных при входе.
- $hversion – возвращает версию утилиты
Как создать стикер на рабочем столе Windows для хранения своих заметок
Переменные:
- Get-Variable – показывает списком все переменные с учетом их значений;
- New-Variable – используется для настройки ново созданных переменных;
- Set-Variable – устанавливает новые значения, если они не значатся в списке;
- Clear-Variable – деинсталлятор содержания, сохраняющий образ;
- Remove-Variable — деинсталлятор командлетов и их составляющих.
Форматирование:
- Format-List – расширенный справочник;
- Format-Table – выводит таблицу результатов отдельных команд;
- Format-Wide — расширенная таблица по результатам, со свойствами отдельных объектов.
Интернет:
- Enable-NetAdapter – для включения адаптера;
- Rename-NetAdapter – задает новое имя и представление;
- Restart-NetAdapter – используется для перезапуска;
- Get-NetIPAddress – предоставляет данные по конфигурации прокси-сервера;
- Set-NetIPAddress – задает новую конфигурацию прокси-серверу;
- New-NetIPAddress – занимается созданием и настройкой прокси-сервера;
- Remove-NetIPAddress – деинсталлятор прокси-сервера;
- New-NetRoute – используется для внесения дополнительных записей;
- Get-NetIPv4Protocol — предоставляет данные по протоколу IPv4;
- Get-NetIPInterface — отражает свойства и характеристики веб-интерфейса IP.
Элементы:
- Get-Item — принимает элементы по заданному пути;
- Move-Item – для перемещения элементов по другим папкам;
- New-Item – используется для создания и оформления;
- Remove-Item – деинсталлятор отмеченных элементов;
- Get-Location – показывает местонахождение в настоящем времени.
Фоновые задания:
- Start-Job – выполняет запуск;
- Stop-Job – останавливает работу;
- Get-Job – открывает список;
- Receive-Job – предоставляет информацию о результатах;
- Remove-Job – деинсталлятор фоновых задач.
Объекты:
- Measure-Object – используется для расчета числовых агрегирующих параметров;
- Select-Object – для выбора с указанием конкретных свойств;
- Where-Object – отражает условия касательно выборки по значению и свойствам.
Службы и процессы:
- Get-Process – показывает информацию об активных процессах ПК;
- Start-Process – производит запуск на ПК;
- Stop-Process — прекращает работу избранных;
- Get-Service – предоставляет данные об активных службах;
- Restart-Service – осуществляет перезапуск;
- Start-Service – используется для подключения выбранных;
- Stop-Service – ставит на паузу процесс;
- Set-Service – изменяет свойства служб и режим подключения.
Компьютер и система:
- Restart-Computer – используется для перезапуска ОС;
- Checkpoint-Computer — для создания системной восстановительной копии для ПК;
- Restore-Computer – отвечает за запуск восстановленной системы;
- Remove-Computer — деинсталлирует локальный ПК из доменного имени;
- Clear-EventLog – очищает список записей в журнале.
Контент:
- Get-Content – принимает содержимое различных элементов;
- Clear-Content — стирает содержимое, но сохраняет образы;
- Set-Content – используется для перезаписи.
Другие командлеты 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, надеюсь, этот справочник будет Вам полезен, удачи!
- https://tproger.ru/translations/powershell-tutorial/
- https://techarks.ru/windows/powershell/10-osnovnyh-komand-powershell-kotorye-dolzhen-znat-kazhdyj-polzovatel-windows-10/
- https://info-comp.ru/sisadminst/555-directory-windows-powershell-cmdlets.html