Использование Windows PowerShell с FSE. Powershell условия


parameters - Условие параметра Powershell

function test{ [cmdletBinding(DefaultParameterSetName = 'all')] param( [Parameter(Position=0,Mandatory=$true)] [string]$Age, [Parameter(Position=1,Mandatory=$true)] [string]$Sex, [Parameter(Position=2,Mandatory=$true)] [string]$Location, [Parameter(ParameterSetName='Extra',Mandatory=$true)][bool]$Favorite, [Parameter(ParameterSetName='Extra',Mandatory=$true)][string]$FavoriteCar ) if ($PSCmdlet.ParameterSetName -eq 'extra') { if($Favorite) { Write-Host ('age:{0}, sex: {1}, location: {2}, favcar: {3}' -f $age ,$sex, $Location,$FavoriteCar) } else { 'nothing' } } else { Write-Host ('age:{0}, sex: {1}, location: {2}' -f $age ,$sex, $Location) } }

вам не нужно делать [ValidateSet("True","False")][switch] потому что [switch] всегда оценивает значение boolean. true если присутствует, иначе false

Если не задано имя параметра по умолчанию, PS будет по умолчанию использовать любое значение параметра ParameterSetName, которое в этом случае является extra и предложит вам параметр favcar, который является обязательным. Конечно, нет all заданных параметров, но мы установили его так, чтобы PS dosent попытался запустить extra ParameterSet по умолчанию.

РЕДАКТИРОВАТЬ

в команде ниже, поскольку параметры $favorite\$favoritecar не используются. PS не будет запрашивать какие-либо значения.

test -Age 10 -Sex female -Location Moon

Вывод:

age:10, sex: female, location: Moon

ниже будет заставлять PS использовать параметр "extra" и предлагать ввести значение для параметра $favoritecar потому что оно обязательно в параметре "extra".

test -Age 10 -Sex female -Location Moon -favorite $true

ниже будет по-прежнему запрашиваться параметр $favoritecar поскольку он является обязательным, однако ничто не будет обработано из-за условия if в коде.

test -Age 10 -Sex female -Location Moon -Favorite $false -FavoriteCar Ferrari

Вывод:

nothing

qaru.site

PowerShell: прощай, Goto | Windows IT Pro/RE

Когда более 30 лет назад в MS-DOS появились пакетные файлы, язык программирования BASIC был основным языком программирования для микрокомпьютеров. Оператор Goto используют в языке BASIC, чтобы упростить повторение строк кода, поэтому разработчики Microsoft добавили команду Goto к «языку» пакетных файлов с целью обеспечить функцию того же типа. В листинге 1 показан простой пакетный файл, в котором команда Goto используется для перехода к метке пакетного файла, чтобы повторить команду Echo пять раз.

Когда «язык» пакетных файлов был обновлен в Cmd.exe на платформе Windows NT, Microsoft усовершенствовала команду Call, чтобы метка в пакетном файле могла действовать как простая подпрограмма, аналогично старому оператору GOSUB в языке BASIC. В листинге 2 показан пример такого использования команды Call.

При выполнении пакетного файла в листинге 2 выводится фраза Hello, Ken, а затем End of batch file. Команда Call позволяет перейти к команде с меткой, а затем выполнение возвращается строке, следующей после команды Call. Кроме того, в подпрограммах пакетного файла нет встроенного способа передачи значений без переменных среды и неинтуитивных синтаксических приемов Cmd.exe.

Дело в том, что команды Goto и Call пакетного файла позволяют повторять строки кода, но это делается неструктурированным способом. То есть команда Goto или Call обеспечивает произвольный переход к любой метке в пакетном файле. Пакетный файл становится более сложным, использование Goto или Call в конечном итоге ведет к превращению кода в «спагетти», так как отслеживать логику пакетного файла становится все труднее.

Авторы PowerShell полностью обошли проблему «спагетти-кода». В PowerShell нет ни команды Goto, ни команды Call, потому что они не нужны. Вместо них в PowerShell появились структурированные программные инструкции, заменившие как Goto (для итерации), так и Call (для подпрограмм).

Итерации PowerShell

Итерация (или цикл) — это повторение кода. PowerShell располагает четырьмя базовыми операторами, которые повторяют выполнение строк кода в зависимости от условия: while, do while, do until и for. Четыре оператора, или конструкции цикла, фактически устраняют необходимость в команде Goto.

Когда в MS-DOS появились пакетные файлы, BASIC был основным языком программирования для микрокомпьютеров, и GOTO была незаменимой командой. К счастью, положение изменилось. Ниже показано, как while, do while, do until и for заменили традиционные команды в различных ситуациях.

Оператор While

Оператор while, или цикл while, повторяет строки кода, пока сохраняется истинность определенного условия. В листинге 3 показан пример сценария, в котором устанавливается переменная и выдается значение этой переменной при условии, что оно больше 0. Выходные данные сценария — числа 5, 4, 3, 2 и 1.

Код в скобках после ключевого слова while — условный оператор, который определяет, сколько раз выполняется код в фигурных скобках (известный как блок сценария, scriptblock). Когда вы используете цикл while, PowerShell проверяет условие в начале цикла. Выполните команду help about_While в PowerShell, чтобы получить больше информации и примеры цикла while.

Оператор Do

Оператор do, или цикл do, похож на оператор while; разница в том, что PowerShell проверяет условный оператор в конце цикла, а не в начале. Для цикла do требуется, чтобы в начале блока присутствовало ключевое слово while или until, поэтому мы обычно называем его циклом do while или do until. В листинге 4 показан тот же цикл, что и в листинге 3, реализованный в виде цикла do while.

В листинге 5 показан тот же цикл, что и в листингах 3 и 4, но реализованный в виде цикла do until. Ключевое слово until меняет логику цикла «повторять до тех пор, пока условие не станет истинным» вместо «повторять, пока условие истинно».

Единственная разница между циклами while, do while и do until — место проверки оператора условия (начало или конец цикла) и логика повторения (пока условие не нарушится или до его выполнения). Выполните команду help about_Do в PowerShell, чтобы получить больше информации и примеры циклов do while и do until.

Оператор For

Оператор for, или цикл for, повторяет код в блоке в зависимости от набора условий. Код в цикле for имеет инструкцию инициализации, инструкцию условия и инструкцию повторения. Инструкция инициализации выполняется в начале цикла и задает начальные условия, инструкция условия проверяет, должен ли продолжаться цикл, а инструкция повторения выполняется в каждом цикле. В листинге 6 показан простой пример цикла for.

В листинге 6 инструкция инициализации — $n = 5, инструкция условия — $n -ge 1, а инструкция повторения — $n-. Вывод листинга 6 точно такой же, как в листингах 3, 4 и 5. Выполните команду help about_For в PowerShell, чтобы получить больше информации и примеры цикла for.

Какой оператор использовать

Все четыре основных оператора итерации PowerShell (while, do while, do until и for) позволяют повторно выполнять код в зависимости от условия. Используйте тот оператор повторения, который позволяет получить более ясный программный код.

Оператор Foreach

Пользователям, более глубоко знающим PowerShell, известно об операторе foreach, или цикле foreach, который позволяет повторять команды для каждого элемента массива или коллекции объектов. Цикл foreach больше похож на команду For пакетного файла. В следующей статье я покажу, как можно заменить команду For пакетного файла в PowerShell.

Подпрограммы PowerShell

PowerShell не нуждается в команде Call или метках подпрограмм. Вместо этого в PowerShell применяются функции, как в других структурированных языках программирования. Функция — просто имя блока программного кода. Для запуска кода в функции просто вставьте имя функции в программу. В листинге 7 содержится простой пример как определения, так и выполнения функции PowerShell.

Ключевое слово function указывает PowerShell, чт

www.osp.ru

Использование Windows PowerShell с FSE

FPE поддерживает следующие командлеты. Они сгруппированы по функциям, чтобы можно было быстрее найти нужные командлеты.

В следующей таблице содержатся командлеты, используемые для управления проверкой по расписанию.

Командлет Функция

Set-FseScheduledScan

Устанавливает конфигурацию проверки по расписанию.

Get-FseScheduledScan

Получает конфигурацию проверки по расписанию.

Start-FseScheduledScan

Немедленно начинает проверку хранилища почтового ящика.

Stop-FseScheduledScan

Останавливает запущенную проверку хранилища почтового ящика.

В следующей таблице содержатся командлеты, используемые для управления проверкой в реальном времени.

Командлет Функция

Set-FseRealtimeScan

Устанавливает конфигурацию проверки в реальном времени.

Get-FseRealtimeScan

Получает конфигурацию проверки в реальном времени.

В следующей таблице содержатся командлеты, используемые для управления проверкой транспорта.

Командлет Функция

Set-FseTransportScan

Устанавливает конфигурацию проверки транспорта.

Get-FseTransportScan

Получает конфигурацию проверки транспорта.

В следующей таблице содержатся командлеты, используемые для управления проверкой по требованию.

Командлет Функция

Set-FseOnDemandScan

Устанавливает конфигурацию проверки по требованию.

Get-FseOnDemandScan

Получает конфигурацию проверки по требованию.

Start-FseOnDemandScan

Запускает проверку по требованию.

Stop-FseOnDemandScan

Останавливает проверку по требованию.

Suspend-FseOnDemandScan

Приостанавливает запущенную проверку по требованию.

Resume-FseOnDemandScan

Возобновляет приостановленную проверку по требованию.

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

Командлет Функция

New-FseFilterList

Создает новый список фильтров.

Get-FseFilterList

Получает списки фильтров.

Set-FseFilterList

Изменяет свойства списка фильтров.

Clear-FseFilterList

Очищает все записи в списке фильтров.

Remove-FseFilterList

Удаляет список фильтров.

Add-FseFilterListEntry

Добавляет один или несколько элементов в существующий список фильтров.

Remove-FseFilterListEntry

Удаляет один или несколько элементов из списка фильтров.

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

Командлет Функция

Set-FseScheduledFilter

Создает фильтр, настраивает его и связывает его с заданием проверки по расписанию.

Get-FseScheduledFilter

Получает настроенные фильтры задания проверки по расписанию.

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

Командлет Функция

Set-FseRealtimeFilter

Создает фильтр, настраивает его и связывает его с заданием проверки в реальном времени.

Get-FseRealtimeFilter

Получает настроенные фильтры задания проверки в реальном времени.

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

Командлет Функция

Set-FseTransportFilter

Создает фильтр, настраивает его и связывает его с заданием проверки транспорта.

Get-FseTransportFilter

Получает настроенные фильтры задания проверки транспорта.

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

Командлет Функция

Set-FseOnDemandFilter

Создает фильтр, настраивает его и связывает его с заданием проверки по требованию.

Get-FseOnDemandFilter

Получает настроенные фильтры задания проверки по требованию.

В следующей таблице содержатся командлеты, используемые для управления антивирусными ядрами.

Командлет

Функция

Set-FseEngineManagement

Настраивает параметры ядра.

Get-FseEngineManagement

Получает параметры ядра.

В следующей таблице содержатся командлеты, используемые для управления обновлением определений.

Командлет Функция

Set-FseSignatureOptions

Устанавливает параметры обновления определений.

Get-FseSignatureOptions

Получает параметры обновления определений.

Set-FseSignatureUpdate

Устанавливает расписание обновления определений.

Get-FseSignatureUpdate

Получает расписание обновления определений.

Start-FseSignatureUpdate

Начинает немедленное обновление определений.

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

Командлет Функция

Set-FseAdvancedOptions

Устанавливает дополнительные параметры.

Get-FseAdvancedOptions

Получает дополнительные параметры.

Set-FseLoggingOptions

Устанавливает параметры ведения журнала и диагностики.

Get-FseLoggingOptions

Получает параметры ведения журнала.

Set-FseTracing

Устанавливает параметры трассировки.

Get-FseTracing

Получает параметры трассировки.

Get-FseExchangeManagementStatus

Подтверждает, доступна ли защита от нежелательной почты.

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

Командлет Функция

Get-FseIncident

Получает записи из базы данных происшествий.

Remove-FseIncident

Удаляет элемент из базы данных происшествий.

Set-FseIncidentOptions

Устанавливает параметры базы данных происшествий.

Get-FseIncidentOptions

Получает параметры базы данных происшествий.

Get-FseQuarantine

Получает записи из базы данных карантина.

Export-FseQuarantine

Сохраняет помещенные на карантин элементы на диске.

Remove-FseQuarantine

Удаляет элементы из базы данных карантина.

Send-FseQuarantine

Доставляет помещенный на карантин элемент указанным получателям.

Set-FseQuarantineOptions

Устанавливает параметры базы данных карантина.

Get-FseQuarantineOptions

Получает параметры базы данных карантина.

В следующей таблице содержатся командлеты, используемые для настройки уведомлений.

Командлет Функция

Set-FseNotification

Устанавливает значения уведомлений.

Get-FseNotification

Получает значения уведомлений.

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

Командлет Функция

Get-FseReport

Получает статистические отчеты о действиях FPE.

Clear-FseReport

Сбрасывает отчет о действиях FPE.

Get-FseSpamReport

Получает отчет о блокировке нежелательной почты

В следующей таблице содержатся командлеты, используемые для получения сведений о продукте Forefront.

Командлет Функция

Get-FseProductInfo

Получает сведения о сервере и о продукте Forefront.

Set-FseLicensing

Устанавливает необходимые параметры лицензирования для FPE.

Get-FseLicensing

Получает текущее состояние лицензии продукта.

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

Командлет Функция

Import-FseSettings

Импортирует параметры конфигурации из XML-файла.

Export-FseSettings

Экспортирует параметры конфигурации в XML-файл.

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

Командлет Функция

Set-FseExtendedOption

Устанавливает расширенный параметр.

Get-FseExtendedOption

Получает значение расширенного параметра.

New-FseExtendedOption

Создает новый расширенный параметр.

Remove-FseExtendedOption

Удаляет расширенный параметр.

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

Командлет Функция

Set-FseSpamContentFilter

Устанавливает параметры конфигурации для фильтра содержимого нежелательной почты.

Get-FseSpamContentFilter

Получает параметры конфигурации для фильтра содержимого нежелательной почты.

Set-FseSpamFiltering

Включает или отключает фильтрацию нежелательной почты.

Get-FseSpamFiltering

Получает состояние фильтрации нежелательной почты.

Set-FseSpamConnectionFilter

Устанавливает параметры конфигурации для списка блокировки DNS (DNSBL).

Get-FseSpamConnectionFilter

Получает параметры конфигурации для фильтра блокировки DNSBL.

Get-FseSpamAgentLog

Получает записи журналов от всех агентов защиты от нежелательной почты.

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

Командлет

Функция

Set-FseBackscatterFilter

Настраивает агент защиты от возвращаемых писем.

Get-FseBackscatterFilter

Получает параметры настройки агента защиты от возвращаемых писем.

New-FseBackscatterKeys

Создает новый набор ключей возвращаемых писем.

В следующей таблице содержатся командлеты, используемые для проверки состояния системы.

Командлет

Функция

Get-FseHealth

Получает текущее состояние системы FSE.

technet.microsoft.com

Приступая к работе с коллекцией PowerShell

  • 06/12/2017
  • Время чтения: 7 мин
  • Соавторы

В этой статье

В коллекции PowerShell — это репозиторий пакет, содержащий сценарии, модули и ресурсы DSC, можно загрузить и использовать.The PowerShell Gallery is a package repository containing scripts, modules, and DSC resources you can download and leverage. Использовать командлеты в PowerShellGet модуля для установки пакетов из коллекции PowerShell.You use the cmdlets in the PowerShellGet module to install packages from the PowerShell Gallery. Входить в систему для скачивания элементов из коллекции PowerShell необязательно.You do not need to sign in to download items from the PowerShell Gallery.

Примечание

Можно скачать пакет непосредственно из коллекции PowerShell, но делать это не рекомендуется.It is possible to download a package from the PowerShell Gallery directly, but this is not a recommended approach. Дополнительные сведения см. в статье Скачивание пакета вручную.For more details, see Manual Package Download.

Обнаружение пакетов в коллекции PowerShellDiscovering packages from the PowerShell Gallery

Пакеты можно найти в коллекции PowerShell с помощью поиска элемента управления в коллекции PowerShell Домашняя страница, просмотра модули и сценарии из странице пакетов .You can find packages in the PowerShell Gallery by using the Search control on the PowerShell Gallery's home page, or by browsing through the Modules and Scripts from the Packages page. Можно также найти пакеты из коллекции PowerShell, выполнив Find-Module, Find-DscResource, и Find-Script командлетов, в зависимости от типа пакета с помощью -Repository PSGallery.You can also find packages from the PowerShell Gallery by running the Find-Module, Find-DscResource, and Find-Script cmdlets, depending on the package type, with -Repository PSGallery.

Вы можете фильтровать результаты из коллекции, используя следующие параметры:You can filter results from the Gallery by using the following parameters:

  • NameName
  • AllVersionsAllVersions
  • MinimumVersionMinimumVersion
  • RequiredVersionRequiredVersion
  • TagTag
  • IncludesIncludes
  • DscResourceDscResource
  • RoleCapabilityRoleCapability
  • КомандаCommand
  • ФильтрFilter

Если вас интересуют только определенные ресурсы DSC в коллекции, выполните командлет Find-DscResource.If you're only interested in discovering specific DSC resources in the Gallery, you can run the Find-DscResource cmdlet. Командлет Find-DscResource возвращает сведения о ресурсах DSC, содержащихся в коллекции.Find-DscResource returns data on DSC resources contained in the Gallery. Поскольку ресурсы DSC всегда являются частью модуля, вам по-прежнему потребуется выполнить командлет Install-Module, чтобы установить их.Because DSC resources are always delivered as part of a module, you still need to run Install-Module to install those DSC resources.

Изучение пакетов в коллекции PowerShellLearning about packages in the PowerShell Gallery

Когда вы нашли пакет, который вас интересует, о нем можно узнать больше.Once you've identified a package that you're interested in, you may want to learn more about it. Для этого можно изучить страницу конкретного пакета в коллекции.You can do this by examining that package's specific page on the Gallery. На ней представлены все метаданные, переданные вместе с пакетом.On that page, you'll be able to see all of the metadata uploaded with the package. Эти метаданные предоставляются автором пакета и не проверяются корпорацией Майкрософт.This metadata is provided by the package's author, and is not verified by Microsoft. Владелец пакета привязан к учетной записи в коллекции, используемой для публикации пакета, поэтому надежнее ориентироваться на нее, а не на информацию в поле "Автор".The Owner of the package is strongly tied to the Gallery account used to publish the package, and is more trustworthy than the Author field.

Если вы нашли пакет, который, по вашему мнению, опубликован с нарушениями, щелкните Сообщить о нарушении на странице этого пакета.If you discover a package that you feel is not published in good faith, click Report Abuse on that package's page.

При использовании командлетов Find-Module или Find-Script эти данные можно доступны в возвращенном объекте PSGetModuleInfo.If you're running Find-Module or Find-Script, you can view this data in the returned PSGetModuleInfo object. Например, при выполнении Find-Module -Name PSReadLine -Repository PSGallery |Get-MemberFor example, running Find-Module -Name PSReadLine -Repository PSGallery |Get-Member возвращаются сведения о модуле PSReadLine, содержащемся в коллекции.returns data on the PSReadLine module in the Gallery.

Скачивание пакетов из коллекции PowerShellDownloading packages from the PowerShell Gallery

При скачивании пакетов из коллекции PowerShell рекомендуется сделать следующее:We encourage the following process when downloading packages from the PowerShell Gallery:

ИзучениеInspect

Чтобы скачать пакет из коллекции для изучения, выполните командлет Save-Module или Save-Script (в зависимости от типа пакета).To download a package from the Gallery for inspection, run either the Save-Module or Save-Script cmdlet, depending on the package type. Так вы сможете сохранить пакет локально без установки и проверить его содержимое.This lets you save the package locally without installing it, and inspect the package contents. Не забудьте удалить пакет, сохраненный вручную.Remember to delete the saved package manually.

Некоторые из этих пакетов созданы корпорацией Майкрософт, а другие — сообществом PowerShell.Some of these packages are authored by Microsoft, and others are authored by the PowerShell community. Корпорация Майкрософт рекомендует ознакомиться с содержимым и кодом пакетов в этой коллекции перед их установкой.Microsoft recommends that you review the contents and code of packages on this gallery prior to installation.

Если вы нашли пакет, который, по вашему мнению, опубликован с нарушениями, щелкните Сообщить о нарушении на странице этого пакета.If you discover a package that you feel is not published in good faith, click Report Abuse on that package's page.

УстановкаInstall

Чтобы установить пакет из коллекции для использования, выполните командлет Install-Module или Install-Script (в зависимости от типа пакета).To install a package from the Gallery for use, run either the Install-Module or Install-Script cmdlet, depending on the package type.

Командлет Install-Module устанавливает модуль в $env:ProgramFiles\WindowsPowerShell\Modules по умолчанию.Install-Module installs the module to $env:ProgramFiles\WindowsPowerShell\Modules by default. Для выполнения этой операции необходима учетная запись администратора.This requires an administrator account. При добавлении параметра -Scope CurrentUser модуль будет установлен в каталог $env:USERPROFILE\Documents\WindowsPowerShell\Modules.If you add the -Scope CurrentUser parameter, the module is installed to $env:USERPROFILE\Documents\WindowsPowerShell\Modules .

Командлет Install-Script по умолчанию устанавливает скрипт в каталог $env:ProgramFiles\WindowsPowerShell\Scripts.Install-Script installs the script to $env:ProgramFiles\WindowsPowerShell\Scripts by default. Для выполнения этой операции необходима учетная запись администратора.This requires an administrator account. При добавлении параметра -Scope CurrentUser скрипт будет установлен в каталог $env:USERPROFILE\Documents\WindowsPowerShell\Scripts.If you add the -Scope CurrentUser parameter, the script is installed to $env:USERPROFILE\Documents\WindowsPowerShell\Scripts .

По умолчанию командлеты Install-Module и Install-Script устанавливают последнюю версию пакета.By default, Install-Module and Install-Script installs the most current version of a package. Чтобы установить более раннюю версию пакета, добавьте параметр -RequiredVersion.To install an older version of the package, add the -RequiredVersion parameter.

РазвертываниеDeploy

Чтобы развернуть пакет из коллекции PowerShell в службе автоматизации Azure, нажмите кнопку службы автоматизации Azure, затем нажмите кнопку развернуть в службе автоматизации Azure на странице сведений о пакете.To deploy a package from the PowerShell Gallery to Azure Automation, click Azure Automation, then click Deploy to Azure Automation on the package details page. Вы будете перенаправлены на портал управления Azure, который нужно войти с помощью данных учетной записи Azure.You are redirected to the Azure Management Portal where you sign in by using your Azure account credentials. Обратите внимание на то, что развертывание пакетов с зависимостями развертывает все зависимости в службе автоматизации Azure.Note that deploying packages with dependencies deploys all the dependencies to Azure Automation. Кнопку "Развернуть в службе автоматизации Azure" можно отключить, добавив тег AzureAutomationNotSupported в метаданные пакета.The 'Deploy to Azure Automation' button can be disabled by adding the AzureAutomationNotSupported tag to your package metadata.

Дополнительные сведения о службе автоматизации Azure см. в соответствующей документации.To learn more about Azure Automation, see the Azure Automation documentation.

Обновление пакетов из коллекции PowerShellUpdating packages from the PowerShell Gallery

Чтобы обновить пакеты, установленные из коллекции PowerShell, выполните командлет [Update-Module][] или [Update-Script][].To update packages installed from the PowerShell Gallery, run either the [Update-Module][] or [Update-Script][] cmdlet. При запуске без дополнительных параметров [] [Update-Module] пытается обновить все модули, установленные путем запуска Install-Module.When run without any additional parameters, [Update-Module][] attempts to update all modules installed by running Install-Module. Чтобы выборочно обновить модули, добавьте параметр -Name.To selectively update modules, add the -Name parameter.

Аналогичным образом, при запуске без дополнительных параметров [] [Update-Script] пытается обновить все скрипты, установить, запустив Install-Script.Similarly, when run without any additional parameters, [Update-Script][] also attempts to update all scripts installed by running Install-Script. Чтобы выборочно обновить скрипты, добавьте параметр -Name.To selectively update scripts, add the -Name parameter.

Перечисление пакетов, установленных из коллекции PowerShellList packages that you have installed from the PowerShell Gallery

Чтобы узнать, какие модули вы установили из коллекции PowerShell, выполните командлет Get-InstalledModule.To find out which modules you have installed from the PowerShell Gallery, run the Get-InstalledModule cmdlet. Эта команда перечисляет все модули в системе, установленные непосредственно из коллекции PowerShell.This command lists all of the modules you have on your system that were installed directly from the PowerShell Gallery.

Аналогично, чтобы узнать, какие скрипты были установлены из коллекции PowerShell, выполните командлет Get-InstalledScript.Similarly, to find out which scripts you have installed from the PowerShell Gallery, run the Get-InstalledScript cmdlet. Эта команда перечисляет все скрипты в системе, установленные непосредственно из коллекции PowerShell.This command lists all of the scripts you have on your system that were installed directly from the PowerShell Gallery.

docs.microsoft.com

Windows PowerShell: Simple Commands. Powerful Administration

  • 08/19/2016
  • Время чтения: 13 мин

В этой статье

Оболочка Windows PowerShellПростые команды. Мощные возможности администрирования

Дон Джонс (Don Jones)

Данная статья основывается на предварительной версии Windows PowerShell. Любая информация, содержащаяся в статье, может быть изменена.

Разработка заняла немало времени, но оболочка Windows PowerShell почти готова к выпуску. Это означает, что для администраторов Windows пришло время с ней познакомиться.. Оболочка Windows PowerShell предоставляет, вероятно, самый простой и наиболее гибкий способ автоматизации широкого спектра административных задач, делая работу более эффективной и результативной.

Кроме того, что еще более важно, корпорация Майкрософт встраивает в оболочку Windows PowerShell™ графические консоли администрирования таких продуктов, как Exchange Server 2007 и System Center 2007. Это означает, что с помощью Windows PowerShell можно будет выполнить почти любую административную задачу. Корпорация Майкрософт планирует со временем включить в состав оболочки возможности администрирования большего числа продуктов. Таким образом, в итоге оболочка Windows PowerShell может стать первым универсальным инструментом для администрирования почти любым серверным продуктом корпорации Майкрософт. Чтобы помочь вам ознакомиться с оболочкой Windows PowerShell, я буду регулярно обсуждать ее в этой новой колонке. Копию оболочки можно загрузить по следующему адресу (на английском языке).

Мощность и простота

Как можно понять из названия, Windows PowerShell — это оболочка, похожая на существующую со времен Windows NT® 3.1 командную строку (Cmd.exe). Оболочка Cmd.exe не сходит со сцены, но с появлением Windows PowerShell останется все меньше причин продолжать ею пользоваться.

Работа с Windows PowerShell не особо отличается от работы с Cmd.exe — если, конечно, не считать того, что у Windows PowerShell больше возможностей. Как и Cmd.exe, оболочка Windows PowerShell имеет встроенный язык сценариев. Правда, намного более гибкий, чем примитивный пакетный язык Cmd.exe. Насколько гибкий? Оболочка Windows PowerShell позволяет автоматизировать чрезвычайно сложные задачи с помощью языка, включающего в себя немногим более полдюжины встроенных ключевых слов.

Раз уж я упомянул сценарии, необходимо коснуться и вопросов безопасности. Оболочка Windows PowerShell впитала в себя все, что корпорация Майкрософт узнала о безопасности за последние десять лет. По умолчанию оболочка Windows PowerShell не позволяет запускать сценарии, ее можно использовать только интерактивно для выполнения отдельных команд. Если запуск сценариев все же разрешен, можно настроить Windows PowerShell на выполнение только подписанных сценариев. Все эти меры позволяют гарантировать, что Windows PowerShell не станет вторым VBScript (это замечательный язык, которым часто злоупотребляли для создания вредоносных сценариев). Язык VBScript тоже еще не уходит со сцены, но вы, вероятно, обнаружите, что для решения множества различных задач удобнее использовать Windows PowerShell.

С помощью Windows PowerShell можно делать практически все, что раньше делалось с помощью Cmd.exe. Например, можно выполнить команду ipconfig и получить тот же самый знакомый вывод. Но оболочка Windows PowerShell представляет целый новый набор команд, которые не являются внешними исполняемыми файлами. Эти командлеты («cmdlet» произносится как «команд-лет») встроены прямо в Windows PowerShell. (Несколько наиболее полезных командлетов, которые помогут начать работу с Windows PowerShell, можно найти на боковой панели «Десять самых важных командлетов, готовых к работе».)

Десять самых важных командлетов, готовых к работе

  • Get-Command возвращает список всех имеющихся командлетов.
  • Get-Help отображает справочную информацию о командлетах и общие сведения.
  • Get-WMIObject возвращает сведения об управлении с помощью WMI.
  • Get-EventLog возвращает журналы событий Windows.
  • Get-Process возвращает отдельный активный процесс или список активных процессов.
  • Get-Service возвращает одну из служб Windows.
  • Get-Content считывает содержимое текстового файла, обрабатывая каждую строку как дочерний объект.
  • Add-Content добавляет содержимое в конец текстового файла.
  • Copy-Item копирует файлы, папки и другие объекты.
  • Get-Acl возвращает списки управления доступом (ACL).

Полный список командлетов, входящих в состав Windows PowerShell, можно найти на веб-узле windowssdk.msdn.microsoft.com/en-us/library/ms714408.aspx (на английском языке).

Названия всех командлетов соответствуют стандартному формату «глагол-существительное», благодаря чему их легче понять и запомнить. Например, в результате запуска командлета Get-Command будет выведен список всех имеющихся командлетов. Вероятно, наиболее полезным для администратора является командлет Get-WMIObject. Предположим, требуется выяснить, какой пакет обновления установлен на компьютере Server2. Достаточно просто выполнить команду

Get-WMIObject Win32_OperatingSystem –Property ServicePackMajorVersion –Computer Server2

Чтобы получить те же сведения с помощью VBScript, необходимо написать несколько строк кода. Другие командлеты позволяют работать со службами (Start-Service, Stop-Service и т. д.), процессами (Stop-Process и другие), файлами (например Rename-Item, Copy-Item, Remove-Item, Move-Item) и так далее. У многих из этих командлетов есть сокращенные имена, также называемые псевдонимами. Например, вместо Get-WMIObject достаточно ввести просто gwmi. Получить список этих сокращенных имен можно с помощью команды Get-Alias.

Что дает ориентация на объекты

Поскольку оболочка Windows PowerShell встроена в Microsoft® .NET Framework, она является полностью объектно-ориентированной. Обычно это интересует только разработчиков программного обеспечения, но в данном случае ориентация на объекты приводит к значительному сокращению временных затрат для администраторов. Это происходит потому, что администраторы теперь могут напрямую работать с мощными объектами прямо из текстовой оболочки. Рассмотрим следующий пример.

Get-Process | Sort-Object pm –desc | Select-Object –first 10

Это всего лишь одна строка с тремя различными командлетами, разделенными знаками вертикальной черты (подробнее об этом будет рассказано в статье ниже). За счет выполнения первого командлета будут получены все запущенные процессы, которые затем передаются командлету Sort-Object. Этот второй командлет сортирует все процессы в порядке убывания по свойству pm (Physical Memory, физическая память) каждого объекта процесса. Затем отсортированный набор объектов процессов передается командлету Select-Object, который извлекает и отображает первые десять из них. Что мы получаем в результате? С помощью одной строки отображаются 10 процессов, занимающих больше всего физической памяти компьютера, как показано на рис. 1. Это чрезвычайно эффективный способ выполнить быструю проверку в ходе диагностики.

Рис. 1** Диагностика с помощью одного командлета **(Щелкните изображение, чтобы увеличить его)

Использование знака вертикальной черты (этот символ на клавиатуре США обычно расположен на клавише обратной косой черты) — это важная часть того набора функций, который делает оболочку Windows PowerShell такой полезной. С помощью символа вертикальной черты можно передавать объекты от одного командлета к другому, что позволяет каждой следующей команде уточнять результаты, форматировать их для вывода и т. д. Этот механизм работает, поскольку каждый командлет возвращает не текст, а один или несколько объектов, с которыми могут работать следующие командлеты.

Использование объектов в Windows PowerShell полностью распространяется на переменные. Нет необходимости описывать переменные заранее. Чтобы начать использовать их, нужно просто добавить знак доллара ($) перед именем переменной. Хотя это и необязательно, можно также указать оболочке Windows PowerShell тип данных, которые будут храниться в переменной. Это позволит оболочке сопоставить переменную с одним из чрезвычайно мощных типов .NET Framework, предоставив администратору множество дополнительных встроенных возможностей. Предположим, вам требуется вывести запрос имени компьютера и получить версию пакета обновления, установленного на этом компьютере. Однако вы не знаете, укажет ли пользователь при вводе имени две обратные косые черты (например, \\Сервер2). Поскольку известно, что командлету Get-WMIObject обратные косые черты не требуются, можно сохранить имя компьютера в строковой переменной и воспользоваться методом Replace, чтобы заменить обратные косые черты на пустые строки, как показано ниже.

[string]$c = Read-Host "Enter computer name" $c = $c.Replace("\","") Get-WMIObject Win32_OperatingSystem –Property ServicePackMajorVersion –Computer $c

Значение параметра -Computer было передано с помощью переменной $c. Эта переменная была изначально создана как строковая и поэтому обладала всеми возможностями типа String платформы .NET Framework, включая метод Replace. Конечно, изучение всех этих особенностей займет некоторое время, но, возможно, будет проще познакомиться с ними на примерах. Сама оболочка Windows PowerShell помогает упростить обучение. Например, если ввести выражение $c = $c. (не забыв про точку) и нажать клавишу Tab, оболочка Windows PowerShell отобразит Clone(), первый метод типа String. Если продолжать нажимать клавишу Tab, будут последовательно отображаться все доступные методы. В сущности, при этом оболочка Windows PowerShell показывает, что именно ей известно о способах использования типа String!

Теперь более сложная задача: чтение списка имен компьютеров из файла, по одному имени в строке, и отображение номера версии пакета обновления для каждого компьютера. Для решения такой задачи с помощью VBScript потребовалось бы написать десяток или более строк кода. В cmd.exe пришлось бы воспользоваться сложным пакетным файлом. В Windows PowerShell эта задача решается с помощью всего одной строки.

Get-Content "c:\computers.txt" | foreach { $_; gwmi Win32_OperatingSystem -prop ServicePackMajorVersion -comp $_ }

Командлет Get-Content считывает содержимое файла C:\Computers.txt. Каждая строка файла превращается в самостоятельный объект. Этот набор объектов — то есть, имен компьютеров — передается команде foreach, которая в действительности представляет собой псевдоним командлета ForEach-Object. Команды внутри фигурных скобок повторяются один раз для каждого полученного объекта (в нашем примере — для каждого имени компьютера). Особая переменная $_ содержит текущий объект (а именно, текущее имя компьютера).

На самом деле внутри фигурных скобок находятся две команды. Первая из них просто отображает текущее имя компьютера, выводя содержимое переменной $_. Вторая — уже знакомая нам команда gwmi. Результат представляет собой список номеров версий пакетов обновления для всех компьютеров, перечисленных в файле. И все это было выполнено с помощью одной относительно простой строки команд.

Обратите внимание, что для имен параметров -Property и -Computer использовались сокращения. Для Windows PowerShell достаточно, чтобы сокращения позволяли однозначно определить имена параметров.

Удобочитаемость и повторное использование

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

PS C:\> $names = get-content "c:\computers.txt" PS C:\> foreach ($name in $names) { >> $name >> gwmi Win32_OperatingSystem -prop ServicePackMajorVersion -comp $name >> } >>

На этот раз содержимое файла сохраняется в переменной $names. В этом примере все еще используется команда «foreach», но она не входит в состав конвейера, и поэтому ей нужно указать, какой набор объектов должен быть циклически обработан и в какой переменной следует хранить каждый объект. Это сделано с помощью фрагмента ($name in $names). Все остальное практически не изменилось, и нажатие клавиши ВВОД приведет к выполнению кода и отображению результатов.

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

PS C:\> function Get-ServicePacks ($file) { >> $names = get-content $file >> foreach ($name in $names) { >> $name >> gwmi win32_operatingsystem -prop servicepackmajorversion -comp $name >> } >> } >>

Как видите, на самом деле почти ничего не изменилось. Предыдущий пример просто был оформлен как функция с именем «Get-ServicePacks». (При этом сохраняется соглашение Windows PowerShell о формате имен «глагол-существительное».) 101% Technet_Review rusloc1 11/15/2006 10:35:35 AM The function now has an input parameter named $file, which has been substituted in the Get-Content cmdlet so that a different file can be specified when the function is run. Different match in memory: Эта функция имеет входной параметр с именем $file, который подставляется в cmdlet-команду Get-Content, что позволяет указать другой файл при запуске данной функции. The function now has an input parameter named $file, which has been substituted in the Get-Content cmdlet so that a different file can be specified when the function is run. Эта функция имеет входной параметр с именем $file, который подставляется в командлет Get-Content, что позволяет указать другой файл при запуске данной функции. Теперь, когда функция определена, для ее запуска достаточно указать ее имя, почти как для командлета, и передать ей входной параметр.

PS C:\> Get-ServicePacks c:\computers.txt

Результаты показаны на рис. 2.

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

Рис. 2** Результаты работы функции Get-ServicePacks **

Мир как файл (или папка)

Все же оболочка Windows PowerShell — это нечто большее, чем просто функции и командлеты. Рассмотрим в качестве простого примера управление файлами. Вы, вероятно, хорошо знакомы с переходами по дискам и папкам в сmd.exe. Необходимо ввести C:, чтобы переключиться на диск C, и cd \test, чтобы перейти в папку C:\Test. Оболочка Windows PowerShell работает точно так же, хотя cd — это на самом деле псевдоним для командлета Set-Location.

Попробуйте запустить командлет Get-PSDrive, который отображает список всех имеющихся дисков. Кроме обычных дисков C:, D: и, возможно, A:, в списке обнаружатся диски с именами Cert, Env, HKCU и HKLM. Оболочка Windows PowerShell действительно показывает много разных типов ресурсов хранения как «диски». Это позволяет получить доступ к локальному хранилищу сертификатов, переменным среды и реестру с помощью знакомого интерфейса переходов, такого же, как для файлов.

Чтобы перейти к кусту реестра HKEY_LOCAL_MACHINE, достаточно ввести Set-Location HKLM: (или cd hklm:, если вам больше нравятся сокращенные имена) и нажать клавишу ВВОД. Затем выполнить команду cd software\microsoft для перехода к разделу SOFTWARE\Microsoft. Можно воспользоваться командой dir (это псевдоним для командлета Get-ChildItem), чтобы получить список подразделов этого раздела реестра. Если требуется удалить раздел, воспользуйтесь командой del, как если бы этот раздел был файлом или папкой. (Впрочем, будьте осторожны. Удаление нужных разделов или некорректное изменение реестра может вызвать серьезные проблемы.)

Подобная гибкость становится возможной благодаря разработчикам продуктов, которые приводят ресурсы (такие как реестр и хранилище сертификатов) к формату, похожему на формат файловой системы. Корпорация Майкрософт планирует расширить оболочку Windows PowerShell для работы с дополнительными продуктами, обеспечивая возможность переходов, например, в хранилище сервера Exchange Server, как если бы это была файловая система. Описанная выше методика очень важна, поскольку она позволяет работать с огромным множеством хранилищ, используемых системой Windows, причем все они выглядят одинаково. Кроме того, всеми этими хранилищами можно управлять с помощью системы команд и методов, с которыми вы уже знакомы.

Безопасность прежде всего

Как уже упоминалось выше, оболочка Windows PowerShell была разработана с учетом безопасности и надежности. Основной компонент безопасности оболочки Windows PowerShell — это ее политика выполнения. По умолчанию для этой политики задано значение Restricted. В этом можно убедиться с помощью командлета Get-ExecutionPolicy. В режиме Restricted сценарии не выполняются. Точка. Поскольку это режим по умолчанию, оболочку Windows PowerShell нельзя использовать для запуска готовых сценариев.

Задать другие режимы можно с помощью командлета Set-ExecutionPolicy. Мне, например, больше всего нравится режим RemoteSigned. В этом режиме допускается запуск локальных (но не удаленных) сценариев, не имеющих цифровой подписи, что обеспечивает самый простой способ разработки и тестирования сценариев. Режим AllSigned не разрешает запуск сценариев, если они не подписаны с помощью сертификата, выпущенного доверенным издателем. И, наконец, в режиме Unrestricted можно запускать все что угодно. Я рекомендую никогда не включать этот режим, поскольку он позволяет использовать Windows PowerShell для запуска вредоносных сценариев, которые могут каким-либо образом оказаться на компьютере. Обратите внимание, что политику выполнения можно также задать с помощью групповой политики, которая перекрывает локальные параметры. (Если параметр групповой политики перекрывает локальные параметры, команда «Set-ExecutionPolicy» выведет предупреждающее сообщение.)

Кроме того, в оболочке Windows PowerShell нельзя выполнить сценарии из текущего каталога. Необходимо указать путь. Это было сделано для того чтобы предотвратить подмену команд. Предположим, некто создает сценарий с именем IPConfig.ps1 (PS1— это расширение имени файла для сценариев Windows PowerShell). Если бы файлы можно было запускать из текущей папки, то существовал бы риск, что ввод команды ipconfig приведет к запуску сценария, созданного этим «некто», хотя на самом деле вы хотели выполнить программу Windows Ipconfig.exe. Однако, поскольку оболочка Windows PowerShell не поддерживает запуск сценариев из текущей папки, такая ошибка исключается. Если действительно требуется запустить сценарий из текущей папки, нужно просто указать путь, например .\myscript. Явная ссылка на текущую папку позволяет подтвердить, что требуется запустить именно сценарий, а не команду оболочки.

Кроме того, оболочка Windows PowerShell обладает возможностями, которые позволяют сделать эксперименты более безопасными. Например, рассмотрим (только не надо пробовать) такое пугающее сочетание:

Get-Process | Stop-Process

Командлет Get-Process создает набор объектов процессов и передает их командлету Stop-Process, который действительно остановит их! В результате мы получим синий экран с ошибкой STOP примерно через пять секунд после остановки критических процессов Windows. Однако можно просто посмотреть, что должно произойти, не выполняя команд. Для этого достаточно добавить очень простой параметр -Whatif.

Get-process | Stop-Process -Whatif

Запуск такой команды в Windows PowerShell выдаст целый ряд отчетов о том, к чему бы привело исполнение командлетов без их фактического выполнения. Параметр – Whatif еще не описан во встроенной справочной системе Windows PowerShell (к которой можно получить доступ с помощью псевдонима help), но постарайтесь его не забывать. Это отличный инструмент для тестирования сценариев и командлетов. Он позволяет проверить результаты их выполнения и в то же время избежать риска сделать что-нибудь потенциально вредное или опасное.

Заключение

Среди возможностей, которые не вошли в данную версию Windows PowerShell, возможно самая важная — это поддержка интерфейса служб каталогов Active Directory®Services Interface (ADSI). (ADSI). Хотя оболочка Windows PowerShell может использовать очень сложные классы .NET для работы со службой каталогов Active Directory и другими службами каталогов, простой командлет Get-ADSIObject пока отсутствует. В результате работа с объектами каталогов немного затруднена.

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

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

Дон Джонс (Don Jones) — основатель веб-узла ScriptingAnswers.com (на английском языке) и один из авторов книги «Оболочка Windows PowerShell: TFM» («Windows PowerShell: TFM», издательство «SAPIEN Press», 2006 г.). С Доном можно связаться по адресу: [email protected].

© 2008 Корпорация Майкрософт и компания CMP Media, LLC. Все права защищены; полное или частичное воспроизведение без разрешения запрещено.

msdn.microsoft.com