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


about_Using

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

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

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

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

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

Инструкция using не должна содержать переменные.

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

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

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

using namespace <.NET-namespace>

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

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

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

using module <module-name>

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

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

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

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

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

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

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

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

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

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

using assembly <.NET-assembly-path>

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

Если вы не создаете новые классы PowerShell, используйте Add-Type командлет . Дополнительные сведения см. в разделе Add-Type.

Примеры

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

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

Обратите внимание на using namespace System.Text то, как и using namespace System.IO упрощают ссылки на [UnicodeEncoding] и [MemoryStream]System.Text[Stream] в 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)
$hashfromstream = Get-FileHash -InputStream $memorystream `
  -Algorithm $algorithm
$hashfromstream.Hash.ToString()

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

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

  • CardGames.Deck
  • CardGames.Card

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

using module CardGames
using namespace CardGames

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

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

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

using assembly 'C:\Program Files\PowerShell\7\System.DirectoryServices.dll'
using namespace System.DirectoryServices.ActiveDirectory

class myDirectoryClass : System.DirectoryServices.ActiveDirectory.DirectoryContext
{

  [DirectoryContext]$domain

  myDirectoryClass([DirectoryContextType]$ctx) : base($ctx)
  {
    $this.domain = [DirectoryContext]::new([DirectoryContextType]$ctx)
  }

}

$myDomain = [myDirectoryClass]::new([DirectoryContextType]::Domain)
$myDomain
domain                                                    Name UserName ContextType
------                                                    ---- -------- -----------
System.DirectoryServices.ActiveDirectory.DirectoryContext                    Domain