Имя поставщика
Function
Диски
Function:
Краткое описание
Предоставляет доступ к функциям, определенным в Windows PowerShell.
Подробное описание
Поставщик Windows PowerShell Function позволяет извлекать, добавлять, изменять, очищать и удалять функции и фильтры в Windows PowerShell.
Функция представляет собой именованный блок кода, выполняющий некоторое действие. Если набрать имя функции, выполняется код этой функции. Фильтр представляет собой именованный блок кода, устанавливающий условия выполнения некоторого действия. Имя фильтра можно ввести вместо условия, например в команде Where-Object.
На диске Function: функции предварены меткой "Function", а фильтры предварены меткой "Filter", но правильная работа в корректном контексте обеспечивается независимо от метки.
Поставщик Function представляет собой плоское пространство имен, содержащее только объекты функций и фильтров. Ни функции, ни фильтры не имеют дочерних элементов.
Каждая функция является экземпляром класса System.Management.Automation.FunctionInfo. Каждый фильтр является экземпляром класса System.Management.Automation.FilterInfo.
Примеры в данном разделе иллюстрируют управление функциями, но те же методы применимы и к фильтрам.
Поставщик Function отображает свое хранилище данных как диск Function:. Для работы с функциями можно изменить свое положение на диск Function: ("set-location function:"). Можно также работать в оболочке Windows PowerShell с другого диска. Для ссылки на функцию из другого положения следует использовать в пути имя диска (Function:).
Поставщик Function поддерживает все командлеты, в именах которых содержится существительное Item (командлеты Item), кроме Invoke-Item. Кроме того, он поддерживает командлеты Get-Content и Set-Content. Однако он не поддерживает командлеты, в именах которых содержится существительное ItemProperty (командлеты ItemProperty), и не поддерживает параметр Filter в любом командлете.
Все изменения в функциях затрагивают только текущую консоль. Добавьте функцию в профиль Windows PowerShell, чтобы сохранить изменения, либо используйте командлет Export-Console, чтобы сохранить текущее состояние консоли.
Примеры
Обращение к диску Function:
-------------------------- ПРИМЕР 1 --------------------------
Изменение текущего положения на диск Function:. Эту команду можно использовать с любого диска в оболочке Windows PowerShell. Чтобы вернуться к диску файловой системы, введите имя диска. Например, введите команду "set-location c:".
set-location function:
Извлечение функций
-------------------------- ПРИМЕР 1 --------------------------
Эта команда возвращает список всех функций в текущем сеансе. Эту команду можно использовать с любого диска Windows PowerShell.
get-childitem -path function:
-------------------------- ПРИМЕР 2 --------------------------
Эта команда извлекает функцию "man" с диска Function:. Для извлечения функции используется командлет Get-Item. Оператор конвейера (|) передает результаты командлету Format-Table.
Параметр Wrap переводит текст, не умещающийся на строке, на следующую строку. Параметр Autosize подгоняет ширину столбцов таблицы под размер текста.
get-item -path man | format-table -wrap -autosize
Если вы находитесь на другом диске, добавьте в путь имя диска (Function:).
-------------------------- ПРИМЕР 3 --------------------------
Обе эти команды извлекают функцию с именем "c:". Первую команду можно использовать на любом диске. Вторая команда используется на диске Function:.
Поскольку имя функции оканчивается двоеточием, то есть имеет синтаксис имени диска, необходимо указать в пути имя диска. Находясь на диске Function:, можно использовать любой из форматов. Во второй команде точка (.) представляет текущее положение.
c:\PS> get-item -path function:c: PS Function> get-item -path .\c:
Создание функции
-------------------------- ПРИМЕР 1 --------------------------
Эта команда использует командлет New-Item для создания функции с именем "HKLM:". Выражение в фигурных скобках представляет собой блок скрипта, который представлен именем функции.
new-item -path function:hklm: -value {set-location hklm:}
Создать функцию также можно, набрав ее в командной строке Windows PowerShell. Например, введите "function:hklm: {set-location hklm:}". Если текущим положением является диск Function:, имя диска можно не указывать. Поскольку невозможно указать метку "Filter" в командлете New-Item, фильтры помечаются как функции, но правильная работа возможна с любой меткой. Для создания фильтра с меткой "Filter" наберите фильтр в командной строке. Например, введите "filter:Running {$_.Status -eq "Running"}".
-------------------------- ПРИМЕР 2 --------------------------
Эта команда использует командлет New-Item для создания функции с именем Csrss. Динамический параметр Options используется для указания значения ReadOnly в свойстве Options функции.
new-item -path function: -name csrss -options readonly -value {get-process csrss}
Эта команда работает из любого положения. Если диск Function: уже открыт, для задания пути можно использовать точку (.). Точка обозначает текущее местоположение.
Удаление функции
-------------------------- ПРИМЕР 1 --------------------------
Эта команда удаляет функцию "hklm:" из текущего сеанса.
remove-item function:hklm:
-------------------------- ПРИМЕР 2 --------------------------
Эта команда удаляет все функции из текущего сеанса, кроме функций, в свойстве Options которых содержится значение Constant. Если не задан параметр Force, команда не удаляет функции со значением ReadOnly свойства Options.
remove-item function:* -force
При удалении всех функций изменяется приглашение в командной строке, поскольку удаляется функция приглашения, определяющая содержимое приглашения в командной строке.
Отображение свойств и методов функций
-------------------------- ПРИМЕР 1 --------------------------
Эта команда использует командлет Get-Item для получения всех функций. Результаты с помощью оператора конвейера передаются командлету Get-Member, который отображает методы и свойства объекта.
get-item -path function:* | get-member
При передаче командлету Get-Member по конвейеру коллекции объектов (например коллекции функций на диске Function:) командлет Get-Member обрабатывает каждый объект коллекции отдельно и возвращает информацию о каждом найденном типе объекта. Если все объекты принадлежат к одному типу, выводятся сведения о единственном типе объекта. В данном случае все функции являются объектами FunctionInfo. Для получения сведений о коллекции объектов FunctionInfo используйте параметр InputObject командлета Get-Member. Например, введите "get-member -InputObject (get-item function:*)". При использовании параметра InputObject командлет Get-Member выполняет оценку всей коллекции, а не отдельных объектов из нее.
-------------------------- ПРИМЕР 2 --------------------------
Эта команда перечисляет значения свойств функции "prompt". Она использует командлет Get-Item для получения объекта, представляющего функцию "prompt". Оператор конвейера (|) передает результаты команде Format-List. Команда Format-List использует параметр Property с подстановочным знаком (*) для форматирования и отображения значений всех свойств функции "prompt".
get-item function:prompt | format-list -property *
Изменение свойств функции
-------------------------- ПРИМЕР 1 --------------------------
Для изменения свойства Options функции можно использовать командлет Set-Item с динамическим параметром Options.
Эта команда задает значения параметров AllScope и ReadOnly для функции "prompt". В ней используется динамический параметр Options командлета Set-Item. Параметр Options доступен для Set-Item только при использовании с поставщиком Alias или Function.
set-item -path function:prompt -options "AllScope,ReadOnly"
-------------------------- ПРИМЕР 2 --------------------------
В этой команде командлет Set-Item используется для изменения функции "prompt" таким образом, чтобы перед значением пути отображалось время.
set-item -path function:prompt -value {'PS '+ $(Get-Date -format t) + " " + $(Get-Location) + '> '}
Это изменение затрагивает как свойство Definition объекта FunctionInfo, так и свойство ScriptBlock. Чтобы увидеть результаты изменения, наберите "get-item -path function:prompt | format-list -property *".
-------------------------- ПРИМЕР 3 --------------------------
Эта команда использует командлет Rename-Item для изменения имени функции "help" на "gh".
rename-item -path function:help -newname gh
Копирование функции
-------------------------- ПРИМЕР 1 --------------------------
Эта команда копирует функцию "prompt" в "oldPrompt", в результате чего создается новое имя для блока скрипта, связанного с функцией prompt. Таким образом можно сохранить исходную функцию prompt, если планируется изменить ее.
Свойство Options новой функции имеет значение None. Чтобы изменить значение свойства Options, используйте командлет Set-Item.
copy-item -path function:prompt -destination function:oldPrompt
Динамические параметры
Динамические параметры — это параметры командлетов, добавляемые поставщиком Windows PowerShell и доступные только при использовании командлета на диске поставщика.
Options <System.Management.Automation.ScopedItemOptions>
Определяет значение свойства Options функции.
Value | Description |
---|---|
None |
Без параметров. По умолчанию используется "None". |
Constant |
Функцию нельзя удалить, и ее свойства нельзя изменить. Значение Constant доступно только при создании функции. Этому параметру существующей функции нельзя задать значение Constant. |
Private |
Функция видна только в текущей области (не в дочерних областях). |
ReadOnly |
Свойства функции не могут быть изменены. Исключение составляет параметр Force. Для удаления функции можно использовать командлет Remove-Item. |
AllScope |
Функция копируется во все создаваемые новые области. |
Поддержка командлетов
См. также