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


about_Using

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

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

Подробное описание

Инструкция using позволяет указать пространства имен, которые будут использоваться в сеансе. Добавление пространств имен упрощает использование классов и членов .NET и позволяет импортировать классы из модулей скриптов и сборок.

Инструкции using должны поступать перед любыми другими инструкциями в скрипте или модуле. Без раскомментированного оператора не может предшествовать ему, включая параметры.

Оператор using не должен содержать переменные.

Оператор using не совпадает с модификатором using: область для переменных. Дополнительные сведения см. в about_Remote_Variables.

Синтаксис пространства имен

Чтобы разрешить типы из пространства имен .NET, выполните следующие действия.

using namespace <.NET-namespace>

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

Пример. Добавление пространств имен для разрешения имен типа

Следующий скрипт получает криптографический хэш для строки Hello World.

Обратите внимание, using namespace System.Text как и using namespace System.IO упростить ссылки на [UnicodeEncoding] вход System.Text и [Stream][MemoryStream] в System.IO.

using namespace System.Text
using namespace System.IO

[string]$string = "Hello World"
## Valid values are "SHA1", "SHA256", "SHA384", "SHA512", "MD5"
[string]$algorithm = "SHA256"

[byte[]]$stringBytes = [UnicodeEncoding]::Unicode.GetBytes($string)

[Stream]$memoryStream = [MemoryStream]::new($stringBytes)
$getFileHashSplat = @{
    InputStream = $memoryStream
    Algorithm   = $algorithm
}
$hashFromStream = Get-FileHash @getFileHashSplat
$hashFromStream.Hash.ToString()

Синтаксис модуля

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

using module <module-name>

Значением <module-name> может быть имя модуля, полная спецификация модуля или путь к файлу модуля.

Когда <module-name> это путь, путь может быть полностью или относительным. Относительный путь разрешается относительно скрипта, имеющего инструкцию using .

Если <module-name> это спецификация имени или модуля, PowerShell выполняет поиск в PSModulePath для указанного модуля.

Спецификация модуля — это хэш-файл, имеющий следующие ключи.

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

Import-Module#requires и оператор импортирует только функции модуля, псевдонимы и переменные, как определено модулем. Классы и перечисления не импортируются.

Инструкция using module импортирует классы и перечисления из корневого модуля (ModuleToProcess) модуля скрипта или двоичного модуля. Он не последовательно импортирует классы или перечисления, определенные в вложенных модулях или в скриптах, которые являются точками источника в корневом модуле. Определите классы и перечисления, доступные пользователям за пределами модуля непосредственно в корневом модуле.

Во время разработки модуля скрипта обычно вносятся изменения в код, а затем загружается новая версия модуля с параметром Import-ModuleForce . Это работает только для изменений функций в корневом модуле. Import-Module не перезагрузит вложенные модули. Кроме того, нет способа загрузить обновленные классы или перечисления.

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

Пример. Загрузка классов из модуля скрипта

В этом примере модуль скрипта PowerShell с именем CardGames определяет следующие классы:

  • Презентация
  • Card

Import-Module#requires и оператор импортирует только функции модуля, псевдонимы и переменные, как определено модулем. Классы не импортируются. Команда using module импортирует модуль и загружает определения классов.

using module CardGames

[Deck]$deck = [Deck]::new()
$deck.Shuffle()
[Card[]]$hand1 = $deck.Deal(5)
[Card[]]$hand2 = $deck.Deal(5)
[Card[]]$hand3 = $deck.Deal(5)

Синтаксис сборки

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

using assembly <.NET-assembly-path>

Оператор using assembly аналогичен использованию командлета Add-Type . Add-Type Однако командлет добавляет тип во время Add-Type выполнения, а не в начале выполнения скрипта. Дополнительные сведения см. в разделе "Тип надстройки".

Пример. Загрузка типов из сборки

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

using assembly './YamlDotNet.dll'
using namespace YamlDotNet

$yamlSerializer = [Serialization.Serializer]::new()

$info = [ordered]@{
  Inventory = @(
    @{ Name = 'Apples' ; Count = 1234 }
    @{ Name = 'Bagels' ; Count = 5678 }
  )
  CheckedAt = [datetime]'2023-01-01T01:01:01'
}

$yamlSerializer.Serialize($info)
Inventory:
- Name: Apples
  Count: 1234
- Name: Bagels
  Count: 5678
CheckedAt: 2023-01-01T01:01:01.0000000