Поделиться через


о_Требует

Краткое описание

Запрещает выполнение скрипта без обязательных элементов.

Длинное описание

Инструкция #Requires запрещает выполнение скрипта, если не выполнены предварительные требования к версии PowerShell, модулям (и версиям) и выпуску. Если предварительные требования не выполнены, PowerShell не запускает скрипт или предоставляет другие функции среды выполнения, например завершение вкладки.

Синтаксис

#Requires -Version <N>[.<n>]
#Requires -Modules { <Module-Name> | <Hashtable> }
#Requires -PSEdition <PSEdition-Name>
#Requires -RunAsAdministrator

Дополнительные сведения о синтаксисе см. в разделе ScriptRequirements.

Правила использования

Скрипт может включать больше чем один оператор #Requires. Операторы #Requires могут отображаться в любой строке скрипта.

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

Предупреждение

Несмотря на то, что оператор #Requires может находиться в любой строке скрипта, его положение в скрипте не влияет на последовательность его применения. Глобальное состояние утверждения #Requires должно быть выполнено перед запуском скрипта.

Пример:

Get-Module AzureRM.Netcore | Remove-Module
#Requires -Modules AzureRM.Netcore

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

Параметры

- Сборка <путь сборки> | <спецификация сборки .NET>

Важный

Синтаксис -Assembly устарел. Она не служит никакой функцией. Синтаксис был добавлен в PowerShell 5.1, но вспомогательный код никогда не был реализован. Синтаксис по-прежнему принимается для обратной совместимости.

Указывает путь к DLL-файлу сборки или имени сборки .NET. Параметр сборки появился в PowerShell 5.0. Дополнительные сведения о сборках .NET см. в разделе "Имена сборок".

Например:

#Requires -Assembly path\to\foo.dll
#Requires -Assembly "System.Management.Automation, Version=3.0.0.0,
  Culture=neutral, PublicKeyToken=31bf3856ad364e35"

-Версия <N>[.<n>]

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

Например:

#Requires -Version 6.0

-Modules <Module-Name> | <Хэш-хэштебл>

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

Если необходимые модули не находятся в текущем сеансе, PowerShell импортирует их. Если модули не удается импортировать, PowerShell выдает завершающееся сообщение об ошибке.

Инструкция #Requires не загружает определения классов и перечислений в модуле. Используйте инструкцию using module в начале скрипта для импорта модуля, включая определения класса и перечисления. Дополнительную информацию смотрите в разделе about_Using.

Для каждого модуля введите имя модуля (<строка>) или хэш-таблицу. Это значение может быть сочетанием строк и хэш-таблиц. Хэш-файл содержит следующие ключи.

  • ModuleName - Обязательный Указывает имя модуля.
  • GUID - Необязательный указывает GUID модуля.
  • Это также Обязательный, чтобы указать хотя бы один из трех приведенных ниже ключей.
    • ModuleVersion. Указывает минимальную допустимую версию модуля.
    • MaximumVersion. Указывает максимальную допустимую версию модуля.
    • RequiredVersion . Указывает точную, требуемую версию модуля. Это невозможно использовать с другими ключами версии.

Заметка

RequiredVersion добавлен в Windows PowerShell 5.0. MaximumVersion добавлен в Windows PowerShell 5.1.

Например:

Требовать установки AzureRM.Netcore (версия 0.12.0 или более поздняя).

#Requires -Modules @{ ModuleName="AzureRM.Netcore"; ModuleVersion="0.12.0" }

Требовать, чтобы AzureRM.Netcore (установлена только версия 0.12.0).

#Requires -Modules @{ ModuleName="AzureRM.Netcore"; RequiredVersion="0.12.0" }

Требуется установка AzureRM.Netcore (версии 0.12.0 или более ранней).

#Requires -Modules @{ ModuleName="AzureRM.Netcore"; MaximumVersion="0.12.0" }

Необходимо, чтобы была установлена любая версия AzureRM.Netcore и PowerShellGet.

#Requires -Modules AzureRM.Netcore, PowerShellGet

При использовании ключа RequiredVersion убедитесь, что строка версии точно соответствует нужной строке версии.

Get-Module AzureRM.Netcore -ListAvailable
    Directory: /home/azureuser/.local/share/powershell/Modules

ModuleType Version Name            PSEdition ExportedCommands
---------- ------- ----            --------- ----------------
Script     0.12.0  AzureRM.Netcore Core

Следующий пример проваливается, так как 0.12 не точно соответствует 0.12.0.

#Requires -Modules @{ ModuleName="AzureRM.Netcore"; RequiredVersion="0.12" }

-PSEdition PSEdition-Name <>

Указывает выпуск PowerShell, который требуется скрипту. Допустимые значения: Core для PowerShell и Desktop для Windows PowerShell.

Например:

#Requires -PSEdition Core

-ЗапускОтИмениАдминистратора

Если этот параметр коммутатора добавляется в инструкцию #Requires, он указывает, что сеанс PowerShell, в котором выполняется скрипт, должен быть запущен с повышенными правами пользователя. Параметр RunAsAdministrator игнорируется в операционной системе, отличной от Windows. Параметр RunAsAdministrator был представлен в PowerShell 4.0.

Например:

#Requires -RunAsAdministrator

Примеры

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

#Requires -Modules AzureRM.Netcore
#Requires -Version 6.0
param
(
    [Parameter(Mandatory=$true)]
    [string[]]
    $Path
)
...

См. также