Полезные приёмы работы в Windows PowerShell 2

archive view archive save

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

Редактирование в командном окне Windows PowerShell

Windows PowerShell поддерживает те же возможности редактирования вводимых команд, что и в стандартной оболочке cmd.exe Вспомним ключевые:

Клав. комбинация        Действие
----------------        --------
<home>                  В начало текущей строки
<end>                   В конец текущей строки
<insert>                Переключение между реж. вставки и замены
<delete>                Удаление символа под курсором
<backspace>             Удаление символа перед курсором
<f7>                    Список команд вводимых ранее
<tab>                   Авто завершение команд

Работа с буфером обмена Windows: правой кнопкой мыши на заголовке окна PowerShell, меню "Изменить - Пометить", затем удерживая нажатой клавишу <shift> выделить нужный блок и нажать <enter>. Можно упростить манипуляции с буфером Windows включив режим выделения мышью и быстрой вставки.

* ПРИМЕЧАНИЕ:
Если имеются несколько строк с командами, то достаточно скопировать их все и вставить в окно консоли, команды будут выполнятся поочерёдно - нет необходимости копировать и вставлять строки с командами по одной!

Автоматическое завершение команд Windows PowerShell

Находясь в оболочке Windows PowerShell, можно ввести часть какой-либо команды, нажать клавишу <tab> и система попытается сама дописать полное имя этой команды. Автоматическое завершение команд срабатывает для имен файлов и путей файловых систем до первого найденного совпадения. При повторном нажатии клавиши <tab> выполняется циклический переход по имеющимся возможностям выбора.

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

cd c:\pro*files

После нажатия на клавишу <tab> путь будет преобразован в cd 'C:\Program Files'...

В оболочке Windows PowerShell имеется возможность автоматического завершения имен командлетов и их параметров. Если ввести первую часть имени (глагол) командлета и дефис, после этого нажать клавишу <tab>, то система выдаст имя первого подходящего командлета. Аналогичным образом срабатывает автозавершение и для параметров командлета, например введя имя командлета и дефис, после чего нажать <tab>, то автоматически будет подставлено имя первого подходящего параметра для этого командлета.

Windows PowerShell позволяет автоматически завершать имена переменных. И наконец Windows PowerShell поддерживает автоматическое завершение имён свойств и методов объектов. Например:

$a='test't'
$a.len
<tab>
$a.Length

Система подставила свойство Length, имеющееся у символьных переменных. Если подставляется имя метода (функции), а не свойства, то после его имени автоматически ставится круглая скобка. Например:

$a.sub
<tab>
$a.Substring(

Теперь можно вводить параметры метода (функции)...

Получение справки Windows PowerShell

Краткую справку по командлетам Windows PowerShell можно получить введя "-?" сразу после имени командлета, более подробную информацию о командлете можно получить при помощи команд help или get-help с ключами -detailed или -full. При использовании ключа -detailed некоторые технические детали опускаются.

help -full ConvertTo-Html
 
ИМЯ
    ConvertTo-Html
 
ОПИСАНИЕ
    Преобразует объекты Microsoft .NET Framework в код HTML, который может 
    отображаться в веб-браузере.
 
СИНТАКСИС
    ConvertTo-Html [[-Head] <string[]>] [[-Title] <string>] [[-Body] <string[]>] 
        [-CssUri <Uri>] [[-Property] <Object[]>] [-As <string>] 
        [-InputObject <psobject>] [-PostContent <string[]>] 
        [-PreContent <string[]>] [<CommonParameters>]
 
    ConvertTo-Html [-Fragment] [[-Property] <Object[]>] [-As <string>] 
        [-InputObject <psobject>] [-PostContent <string[]>] 
        [-PreContent <string[]>] [<CommonParameters>]
 
ОПИСАНИЕ
    Командлет ConvertTo-Html преобразует объекты .NET Framework в код HTML, 
    который может отображаться в веб-браузере. Этот командлет можно 
    использовать для вывода результатов выполнения команды на веб-страницу.
 
    Параметры командлета ConvertTo-Html позволяют выбирать свойства объектов, 
    задавать формат таблиц или списков, определять заголовок HTML-страницы, 
    добавлять текст перед объектом и после него, а также возвращать только 
    фрагмент с таблицей или списком, а не полную страницу.
 
    При передаче командлету ConvertTo-Html нескольких объектов Windows PowerShell 
    создает таблицу (или список) на основании свойств первого переданного объекта. 
    Если у оставшихся объектов нет одного из указанных свойств, то значению этого 
    свойства для такого объекта будет соответствовать пустая ячейка. 
    Если же у оставшихся объектов имеются дополнительные свойства, 
    значения этих свойств будут проигнорированы.
 
ПАРАМЕТРЫ
    ............................
    -Body 
        Задает текст для добавления после открывающего тега . По умолчани
        ю в этом месте нет текста.
 
        Требуется?                    false
        Позиция?                    4
        Значение по умолчанию                Нет текста.
        Принимать входные данные конвейера?false
        Принимать подстановочные знаки?false

Как видим некоторые параметры командлетов например как "-Body" требуют ввода атрибутов (значений), в полной справке с ключом "-full" даётся пояснение про их использование:

  • Требуется? - Указывает, будет ли командлет выполнятся при отсутствии этого параметра. Если значение True, значит параметр обязателен. Если он не указан, система запросит его значение
  • Позиция? - Показывает, используется ли параметр как именованный или позиционный (под номером). Позиционные параметры должны появляться в указанном месте команды. Если 0 или named, это значит, что при задании значения параметра необходимо указывать его имя. Если атрибут Позиция? имеет целое ненулевое значение, то имя параметра можно не указывать, в этом случае это так званый позиционный параметр. Например, "2" означает, что при отсутствии имени параметра этот параметр должен быть вторым. Если используется имя параметра, параметр может располагаться в любом месте команды.
  • Значение по умолчанию - Содержит значение по умолчанию, в случае когда значение не определено явно. Часто обязательным параметрам, так же как и многим необязательным, никогда не присваивается значение по умолчанию. Например, многие команды, чьим входным значением является параметр -path, при отсутствии значения используют текущее местоположение.
  • Принимать входные данные конвейера? - Показывает, можно ли (да) или нельзя (нет) посылать объекты в этот параметр по конвейеру. "По имени свойства" означает, что конвейеризованный объект должен иметь свойство с тем же именем, что и имя данного параметра.
  • Принимать подстановочные знаки? - Показывает, может ли значение параметра включать подстановочные знаки, такие как "*" и "?".

Можно также получить справку не связанную с командлетами. Для просмотра всех доступных разделов справки используйте команду: help * Список тем обсуждение которых представлено в справочной службе Windows PowerShell, можно увидеть с помощью команды: help about_*

Отметим, что Get-Help выводит содержимое раздела справки на экран сразу целиком. man и help позволяют выводить справочную информацию поэкранно, аналогично команде more интерпретатора cmd.exe.

История команд в сеансе работы Windows PowerShell

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

По умолчанию Windows PowerShell сохраняет последние 64 команды. Для изменения числа сохраняемых команд нужно изменить значение специальной переменной $MaximumHistoryCount, например:

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

Также есть возможность выполнить команду по её номеру в истории команд, для этого нужно нажать F9 и ввести порядковый номер в истории команд.

Кроме клавиатурных комбинаций для работы с журналом команд в Windows PowerShell имеются специальные командлеты, get-history (псевдонимы h, history и ghy) позволяет вывести историю команд, по умолчанию последние 32 команды. Число выводимых команд можно изменить с помощью параметра -Count.

Можно выделять из журнала сеанса команды, удовлетворяющие определённому критерию. Для этого используется конвейер и специальный командлет Where-Object. Например, для вывода команд, содержащих слово del, можно выполнить следующую команду:

Только после полного отключения блокировщика скриптов и рекламы на этом месте появится полезная подсказка/ссылка/код/пример конфигурации/etc!

Полученный с помощью Get-History список команд можно экспортировать во внешний файл в формате XML или CVS (текстовый файл с запятыми в качестве разделителя). Например:

Get-History | Export-CSV .\pshistory.csv

С помощью командлета Add-History можно добавлять команды обратно в журнал сеанса:

Import-CSV .\pshistory.csv | Add-History

Командлет Invoke-History (псевдонимы r, сокращение от "repeat" или "return", и ihy) позволяет повторно выполнять команды из журнала сеанса, при этом команды можно задавать по их порядковому номеру или первым символом, а также получать по конвейеру от командлета Get-History. Например:

# вызов последней команды
Invoke-History
# вызов седьмой команды
Invoke-History -id 7
# или проще
r 3
# вызов последней команды Get-Help
Invoke-History Get-He
# Вызов последней команды полученой по конвейеру от Get-History
Get-History | Where-Object ($_.CommandLine -like "*del*") | Invoke-History

Протоколирование действий в сеансе работы Windows PowerShell

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

Start-Transcript [[-Path] <string>] [-Append] [-Force] [-NoClobber] 
    [-Confirm] [-WhatIf] [<CommonParameters>]
 
# Запустим протоколирование
Start-Transcript -path .\psprotocol.txt
# выполним что-то
ps
# остановим протоколирование
Stop-Transcript
# просмотрим результат
type .\psprotocol.txt

Если имя файла протокола не указанно, то он будет сохранятся в файле, путь к которому задан в значении глобальной переменной $Transcript Если переменная не определена, то командлет Start-Transcript сохраняет протоколы в каталоге "$HOME\Мои документы" в файлах "PowerShell_transcript..txt".

Если файл протокола, в который должен начать сохранятся сеанс работы, уже существует, то по умолчанию он будет переписан. Параметр командлета Start-Transcript -append включает режим добавления нового протокола к существующему. Если же указан параметр -noclobber, а файл уже существует, то командлет Start-Transcript не выполняет никаких действий.

Настройка профилей Windows PowerShell

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

Грамотно созданный профиль может существенно облегчить работу в Windows PowerShell и администрирование операционной системы в целом. Создание и распространение профилей может помочь поддерживать единородное и согласованное представление оболочки Windows PowerShell не нескольких компьютерах.

Windows PowerShell поддерживает профили четырех типов. Дело в том, что модель Windows PowerShell предусматривает возможность использования разных интерфейсов для языка (так называемых интерфейсов), а powershell.exe представляет собой лишь один из таких хостов.

* ПРИМЕЧАНИЕ:
В настоящее время доступны несколько альтернативных хостов Windows PowerShell, например PowerShell и PowerShell, которые можно загрузить с сайта http://powershell.com/

Name                               Описание
-----------                        -----------
$Profile                           Текущий пользователь,
                                  текущее ведущее приложение
$Profile.CurrentUserCurrentHost    Текущий пользователь,
                                  текущее ведущее приложение
$Profile.CurrentUserAllHosts       Текущий пользователь, все
                                  ведущие приложения
$Profile.AllUsersCurrentHost       Все пользователи, текущее
                                  ведущее приложение
$Profile.AllUsersAllHosts          Все пользователи, все
                                  ведущие приложения

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

Test-Path $Profile
False

Если профиль существует, то команда выдастTrue, в противном случае -False. Для создания или изменения существующего профиля нужно открыть в текстовом редакторе файл, путь к которому хранится в одной из указанных выше переменных. Сделать это можно прямо из оболочки Windows PowerShell:

notepad $profile

Если профиль Windows PowerShell уже существует, то будет открыт Блокнот Windows с содержимым файла Microsoft.PowerShell_profile.ps1, иначе будет открыто диалоговое окно с сообщением о том, что открываемый файл не найден. Нажав кнопкуOKв этом окне мы попадаем в пустое окно Блокнота Windows - теперь нужно ввести команды, которые мы планируем выполнять при каждой загрузке Windows PowerShell, в нашем случае это:

Только после полного отключения блокировщика скриптов и рекламы на этом месте появится полезная подсказка/ссылка/код/пример конфигурации/etc!

Далее следует сохранить файл в каталоге \Мои документы\WindowsPowerShell\, если каталог \Мои документы\WindowsPowerShell\ отсутствует, то его нужно будет предварительно создать, перейти в этот каталог и там сохранить этот файл с именем Microsoft.PowerShell_profile.ps1

Теперь выйдем из Windows PowerShell и снова откроем его, если выдается ошибка, то это говорит о том, что установленная по умолчанию политика "Restricted" запрещает выполнение PowerShell скриптов. Для разрешения выполнения скриптов следует выполнить команду:
Set-ExecutionPolicy RemoteSigned

Снова выйдем и запустим Windows PowerShell и теперь мы должны увидеть, что полный путь, в котором открыта оболочка Windows PowerShell, отображается в верхней панели окна, а приглашение командной строки имеет вид "PS >". Таким образом область ввода команд не забивается текущим путём в котором запущена оболочка и свободна для ввода команд, а текущий путь мы всегда сможем созерцать в верхней части окна.

Windows PowerShell как калькулятор

В командной строке PowerShell можно вычислять выражения, то есть пользоваться командной строкой как калькулятором (в оболочке cmd.exe эта возможность отсутствовала).

PS C:\> 2+9
11

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

PS C:\> 20/3
6,66666666666667

PowerShell способен выполнять и более сложные математические вычисления. Например вычисление квадратного корня из числа 327:

PS I:\> [System.Math]::Sqrt(327)
18,0831413200251

В этом примере используется метод Sqrt() класса System.Math Результаты вычислений можно сохранять в переменную и пользоваться ими в рамках текущей сессии:

$a=30/2
$a
15
$a*10
15050

Запуск .bat в PowerShell

Для запуска .bat файлов в PowerShell необходимо переместится в каталог с нужным .bat или .cmd файлом при помощи команды cd c:\script и там набрать его имя вместе с расширением PS > ./flush.bat или без него PS > ./flush при этом уточнить в консоли PowerShell место запуска ./ .bat или .cmd файла или же указать в консоли PowerShell полный путь к .cmd или .bat файлу.

P.S. Если на этой странице вы не нашли ответа на свой вопрос задайте его в комментариях незабыв при этом подписаться на получение ответа на него!

Автор: Олег Головский


Об авторе
АдМинь БагоИскатель
АдМинь БагоИскатель ярый борец за безглючную работу любых механизмов и организмов во всей вселенной и потому пребывает в вечном поиске всяческих багов, а тот кто ищет как известно всегда находит. Когда что-то или кого-то вылечить не в состоянии, то со словами "Я в аду, а вы все черти" уходит в запой выйдя из которого снова берётся лечить неизлечимое.
Ещё статьи автора

Добавить комментарий

АХТУНГ! Все комменты гостей модерасятся модерастом.
  1. Мессаги исключительно рекламного содержания, либо содержащие только одни оценочные суждения типа "круто" ("отлично", "спасибо", "автор дебил" и т.п.) не публикуются;
  2. Злостным спамерам, пранкерам и прочей сетевой нечисти рекомендуем напрасно не тратить своего времени и удовлетворять свои больные фантазии на специализированных Интернет ресурсах!;
  3. Разумная обоснованная критика, замечания, дополнения приветствуются. Поля помеченные символом * обязательны к заполнению.


Защитный код
Обновить

Нет комментариев

Вы можете стать первым, кто добавит комментарий к этой записи.

Комментарии в блоге
Новое на форуме