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