Обзор технологии Microsoft Windows PowerShellMicrosoft ® 1 Назначение PowerShell 2 Установка Windows PowesShell 6 Назначение PowerShell 7



Скачать 13.55 Mb.
страница8/27
Дата29.11.2016
Размер13.55 Mb.
Просмотров5723
Скачиваний0
ТипОбзор
1   ...   4   5   6   7   8   9   10   11   ...   27

Out-Default


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

Get-Process

То вы запускаете (пусть даже не осознавая этого) команду:



Get-Process | Out-Default

А в обычном окне консоли или Windows PowerShell ISE это означало бы то же самое, что и:



Get-Process | Out-Host

Именно поэтому последние командлеты используются по умолчанию: выходные данные внутренне отправляются на Out-Default, а затем – на Out-Host.



Но что будет, если вы вручную наберете другое место назначения, скажем, используя командлет Out- File?



Get-Process | Out-File c:\procs.txt

Большинство командлетов Out- не производят никаких выходных данных, а значит, не отправляют ничего в конвейер (Out- String – особенный случай, который является исключением из правила). Поэтому, даже если предыдущая команда была передать данные в файл, в действительности конвейер (даже если вы не осознаете этого) будет выглядеть так:



Get-Process | Out-File c:\procs.txt | Out-Default

А функционально происходить будет следующее:



Get-Process | Out-File c:\procs.txt | Out-Host

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


Out- и Format-


Командлеты Out- технически неспособны «понять» такие вещи как процессы или службы. Они работают только со специальными инструкциями по форматированию, которые производятся только командлетами Format-. Как только командлет Out- обнаруживает, что ему приходится иметь дело с чем-то другим, кроме инструкции форматирования, он автоматически запускает форматирующую систему в оболочке, основываясь на трех правилах, которые мы рассмотрели ранее. Данные передаются в форматирующий командлет, после чего поступают обратно в командлет Out-.Поэтому, когда вы запускаете команду:

Get-Process

В действительности оболочка выполняет намного больше действий, и весь процесс выглядит так:



Get-Process | Out-Default | Out-Host | Format-Table | Out-Host

Форматирующая система определяет, какой из Format- командлетов следует использовать. В данном случае для выходных командлета Get-Process в оболочке зарегистрирован определенный формат просмотра – таблица, поэтому, используется командлет Format-Table.

Вы можете извлечь пару довольно важных уроков, проанализировав поведение оболочки:

• Как только командлет Format- начинает работу, первоначальные выходные данные теряются, поскольку подвергаются форматированию. Сравните результат двух команд:



Get-Process | Get-Member

или


Get-Process | Format-Table | Get-Member

• Командлет Format-Table поглощает элементы процесса и превращает их в инструкции по форматированию, которые понимает только командлет Out-. Поэтому, командлет Format- , как правило, должен быть последним в командной строке.

• Командлеты Out-, как уже упоминалось ранее, не производят никаких выходных данных. Поэтому, если они используются, то располагаются в самом конце командной строки (кроме командлета Out-String, который является исключением). Если в цепочке команд используются и командлет Format, и командлет Out-, то Format- будет предпоследним, а Out- последним.

Все командлеты Out- способны воспринимать одни и те же инструкции по форматированию. Поэтому, обе команды:



Get-Process | Fl * | Out-Host

Get-Process | Fl * | Out-File c:\proclist.txt

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


Варианты отображения


Вы можете создать файл формата просмотра (.format.ps1xml), содержащий более одного варианта просмотра для данного имени типа. Так, файл DotNetTypes.format.ps1xml содержит более одного варианте просмотра для имени System.Diagnostics.Process.

Каждый раз при запуске системы форматирования по умолчанию используется тот формат просмотра, который первым зарегистрирован в памяти. Поэтому, команда Get-Process произведет те же самые выходные данные, что и Get-Process | Format-Table. Данные будут идентичными потому, что в первом случае вы не уточнили формат просмотра. Оболочка следует правилу №1, находит зарегистрированные варианты просмотра в DotNetTypes.format.ps1xml, использует самый первый вариант для имени System.Diagnostics.Process. Этот первый вариант – таблица. Во втором случае вы уточнили, что данные должны быть отображены в таблице, что совпало с форматом просмотра, используемым по умолчанию. Однако вы могли бы вручную указать другой формат просмотра с помощью параметра –view командлета Format-. Здесь существует одно правило. Вариант просмотра, который вы указываете, должен совпадать с параметром командлета Format-. Другими словами, если для имени Diagnostics предусмотрен только один вариант просмотра – таблица, то вы должны использоват командлет Format-Table. Если же вы попытаетесь запустить команду:

Get-Process | Format-List –view diagnostics

а варианта отображения имени diagnostics в виде списка не существует, вы увидите ошибку, даже если вариант показа в форме таблицы существует.

Например, данная команда будет работать:

Get-Process | Ft –view priority

так как для имени Priority предусмотрен формат просмотра – таблица. Однако следующая команда работать не будет:

Get-Process | Fl –view priority

потому что командлет Format-List не может использовать формат таблицы, предусмотренный для имени Priority.

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

Не пытайтесь изменить файлы .format.ps1xml с цифровой подписью Microsoft, которые поставляются вместе с Windows PowerShell.

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

• Используйте параметр –append, чтобы загрузить ваш файл после существующего в памяти оболочки. Это удобно в тех случаях, когда необходимо создать дополнительный вариант просмотра для того или иного имени. Но если в оболочке уже был предусмотрен другой формат просмотра, то по умолчанию будет использоваться именно этот, существующий вариант.

• Если вы хотите, чтобы созданный вами файл сохранился в памяти перед существующим, используйте параметр –prepend. В данном случае по умолчанию будет использоваться именно ваш файл.

Подробная инструкция создания файлов .format.ps1xml не предусмотрена в рамках данного курса. В некоторых книгах этот вопрос раскрыт более подробно, например, в Windows PowerShell v2.0: TFM под авторством Don Jones и Jeffery Hicks.

Не забывайте о том, что любые изменения, вносимые пользователем в оболочку, действуют только в течение одной сессии; оболочка не загружает созданные вами файлы автоматически каждый раз. Если вы хотите, чтобы созданный вами файл был доступен каждый раз при запуске новой сессии, создайте специальный скрипт для Windows PowerShell, который будет запускать командлет Update- FormatData каждый раз при открытии нового окна.




Поделитесь с Вашими друзьями:
1   ...   4   5   6   7   8   9   10   11   ...   27


База данных защищена авторским правом ©nethash.ru 2019
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал