Add-Type
Добавляет класс Microsoft .NET в сеанс PowerShell.
Синтаксис
FromSource (по умолчанию)
Add-Type
[-TypeDefinition] <String>
[-Language <Language>]
[-ReferencedAssemblies <String[]>]
[-OutputAssembly <String>]
[-OutputType <OutputAssemblyType>]
[-PassThru]
[-IgnoreWarnings]
[-CompilerOptions <String[]>]
[<CommonParameters>]
FromMember
Add-Type
[-Name] <String>
[-MemberDefinition] <String[]>
[-Namespace <String>]
[-UsingNamespace <String[]>]
[-Language <Language>]
[-ReferencedAssemblies <String[]>]
[-OutputAssembly <String>]
[-OutputType <OutputAssemblyType>]
[-PassThru]
[-IgnoreWarnings]
[-CompilerOptions <String[]>]
[<CommonParameters>]
FromPath
Add-Type
[-Path] <String[]>
[-ReferencedAssemblies <String[]>]
[-OutputAssembly <String>]
[-OutputType <OutputAssemblyType>]
[-PassThru]
[-IgnoreWarnings]
[-CompilerOptions <String[]>]
[<CommonParameters>]
FromLiteralPath
Add-Type
-LiteralPath <String[]>
[-ReferencedAssemblies <String[]>]
[-OutputAssembly <String>]
[-OutputType <OutputAssemblyType>]
[-PassThru]
[-IgnoreWarnings]
[-CompilerOptions <String[]>]
[<CommonParameters>]
FromAssemblyName
Add-Type
-AssemblyName <String[]>
[-PassThru]
[<CommonParameters>]
Описание
Командлет Add-Type
позволяет определить класс Microsoft .NET Core в сеансе PowerShell. Затем можно создать экземпляры объектов с помощью командлета New-Object
и использовать объекты так же, как и любой объект .NET Core. При добавлении команды Add-Type
в профиль PowerShell класс доступен во всех сеансах PowerShell.
Тип можно указать, указав существующие сборки или файлы исходного кода, или указать встроенный или сохраненный в переменной исходный код. Можно даже указать только метод и Add-Type
определяет и создает класс. В Windows эту функцию можно использовать для вызова платформенного вызова (P/Invoke) неуправляемых функций в PowerShell. Если указать исходный код, Add-Type
компилирует указанный исходный код и создает сборку в памяти, содержащую новые типы .NET Core.
Параметры Add-Type
можно использовать для указания альтернативного языка и компилятора, C# — это параметры компилятора, зависимости сборок, пространство имен класса, имена типа и результирующая сборка.
Начиная с PowerShell 7, Add-Type
не компилирует тип, если тип с тем же именем уже существует. Кроме того, Add-Type
ищет сборки в папке ref
в папке, содержащей pwsh.dll
.
Примеры
Пример 1. Добавление типа .NET в сеанс
В этом примере в сеанс добавляется класс basicTest, указав исходный код, хранящийся в переменной. Класс BasicTest используется для добавления целых чисел, создания объекта и умножения целых чисел.
$Source = @"
public class BasicTest
{
public static int Add(int a, int b)
{
return (a + b);
}
public int Multiply(int a, int b)
{
return (a * b);
}
}
"@
Add-Type -TypeDefinition $Source
[BasicTest]::Add(4, 3)
$BasicTestObject = New-Object BasicTest
$BasicTestObject.Multiply(5, 2)
Переменная $Source
сохраняет исходный код для класса. Тип имеет статический метод с именем Add
и нестатический метод, называемый Multiply
.
Командлет Add-Type
добавляет класс в сеанс. Так как он использует встроенный исходный код, команда использует параметр TypeDefinition для указания кода в переменной $Source
.
Статический метод Add
BasicTest использует символы двойной двоеточия (::
) для указания статического элемента класса. Добавляются целые числа и отображается сумма.
Командлет New-Object
создает экземпляр класса BasicTest. Он сохраняет новый объект в переменной $BasicTestObject
.
$BasicTestObject
использует метод Multiply
. Целые числа умножаются и отображается продукт.
Пример 2. Проверка добавленного типа
В этом примере используется командлет Get-Member
для проверки объектов, созданных Add-Type
и командлетов New-Object
, созданных в примере 1.
[BasicTest] | Get-Member
TypeName: System.RuntimeType
Name MemberType Definition
---- ---------- ----------
AsType Method type AsType()
Clone Method System.Object Clone(), System.Object ICloneable.Clone()
Equals Method bool Equals(System.Object obj), bool Equals(type o)
FindInterfaces Method type[] FindInterfaces(System.Reflection.TypeFilter filter...
...
[BasicTest] | Get-Member -Static
TypeName: BasicTest
Name MemberType Definition
---- ---------- ----------
Add Method static int Add(int a, int b)
Equals Method static bool Equals(System.Object objA, System.Object objB)
new Method BasicTest new()
ReferenceEquals Method static bool ReferenceEquals(System.Object objA, System.Object objB)
$BasicTestObject | Get-Member
TypeName: BasicTest
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
Multiply Method int Multiply(int a, int b)
ToString Method string ToString()
Командлет Get-Member
получает тип и члены класса BasicTest, который Add-Type
добавлен в сеанс. Команда Get-Member
показывает, что это объект System.RuntimeType, производный от класса System.Object.
Параметр Get-Member
static получает статические свойства и методы класса BasicTest. В выходных данных показано, что включен метод Add
.
Командлет Get-Member
получает члены объекта, хранящегося в переменной $BasicTestObject
.
$BasicTestObject
был создан с помощью командлета New-Object
с классом BasicTest. Выходные данные показывают, что значение переменной $BasicTestObject
является экземпляром класса BasicTest и включает в себя элемент с именем Multiply
.
Пример 3. Добавление типов из сборки
В этом примере классы из сборки JsonSchema.NET.dll
добавляются в текущий сеанс.
Set-Location -Path $PSHOME
$AccType = Add-Type -AssemblyName *jsonschema* -PassThru
Set-Location
использует параметр пути для указания переменной $PSHOME
. Переменная ссылается на каталог установки PowerShell, где находится DLL-файл.
Переменная $AccType
сохраняет объект, созданный с помощью командлета Add-Type
.
Add-Type
использует параметр AssemblyName для указания имени сборки. Подстановочный знак звездочки (*
) позволяет получить правильную сборку, даже если вы не уверены в имени или его орфографии. Параметр PassThru создает объекты, представляющие классы, добавленные в сеанс.
Пример 4. Вызов собственных API Windows
В этом примере показано, как вызывать собственные API Windows в PowerShell.
Add-Type
использует механизм вызова платформы (P/Invoke) для вызова функции в User32.dll
из PowerShell. Этот пример работает только на компьютерах под управлением операционной системы Windows.
$Signature = @"
[DllImport("user32.dll")]public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
"@
$addTypeSplat = @{
MemberDefinition = $Signature
Name = "Win32ShowWindowAsync"
Namespace = 'Win32Functions'
PassThru = $true
}
$ShowWindowAsync = Add-Type @addTypeSplat
# Minimize the PowerShell console
$ShowWindowAsync::ShowWindowAsync((Get-Process -Id $PID).MainWindowHandle, 2)
# Restore the PowerShell console
$ShowWindowAsync::ShowWindowAsync((Get-Process -Id $PID).MainWindowHandle, 4)
Переменная $Signature
сохраняет сигнатуру C# функции ShowWindowAsync
. Чтобы убедиться, что результирующий метод отображается в сеансе PowerShell, ключевое слово public
было добавлено в стандартную подпись. Дополнительные сведения см. в функции ShowWindowAsync.
Переменная $ShowWindowAsync
сохраняет объект, созданный параметром Add-Type
PassThru.
Командлет Add-Type
добавляет функцию ShowWindowAsync
в сеанс PowerShell в качестве статического метода. Команда использует параметр MemberDefinition, чтобы указать определение метода, сохраненное в переменной $Signature
. Команда использует параметры имени
Новый ShowWindowAsync
статический метод используется в командах для минимизации и восстановления консоли PowerShell. Метод принимает два параметра: дескриптор окна и целое число, указывающее, как отображается окно.
Чтобы свести к минимуму консоль PowerShell, ShowWindowAsync
использует командлет Get-Process
с автоматической переменной $PID
, чтобы получить процесс, на котором размещен текущий сеанс PowerShell. Затем он использует свойство MainWindowHandle текущего процесса и значение 2
, представляющее значение SW_MINIMIZE
.
Чтобы восстановить окно, ShowWindowAsync
использует значение 4
для положения окна, представляющего значение SW_RESTORE
.
Чтобы развернуть окно, используйте значение 3
, представляющее SW_MAXIMIZE
.
Параметры
-AssemblyName
Указывает имя сборки, включающей типы.
Add-Type
принимает типы из указанной сборки. Этот параметр требуется при создании типов на основе имени сборки.
Введите полное или простое имя, также известное как частичное имя сборки. Подстановочные знаки разрешены в имени сборки. Если ввести простое или частичное имя, Add-Type
разрешает его в полное имя, а затем использует полное имя для загрузки сборки.
Использование параметров path или LiteralPath гарантирует загрузку сборки, которую вы хотите загрузить. При использовании параметра AssemblyName PowerShell просит .NET разрешить имя сборки с помощью стандартного процесса разрешения сборки .NET. Так как .NET сначала выполняет поиск в папке приложения, Add-Type
может загрузить сборку из $PSHOME
вместо версии в текущей папке. Дополнительные сведения см. в расположении сборки.
Если .NET не удается устранить имя, PowerShell будет выглядеть в текущем расположении, чтобы найти сборку. При использовании подстановочных знаков в параметре AssemblyName процесс разрешения сборки .NET завершается ошибкой, что приводит к тому, что PowerShell будет выглядеть в текущем расположении.
Свойства параметра
Тип: | String[] |
Default value: | None |
Поддерживаются подстановочные знаки: | True |
DontShow: | False |
Aliases: | 4 млн |
Наборы параметров
FromAssemblyName
Position: | Named |
Обязательно: | True |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-CompilerOptions
Задает параметры компилятора исходного кода. Эти параметры отправляются компилятору без редакции.
Этот параметр позволяет направлять компилятору создавать исполняемый файл, внедрять ресурсы или задавать параметры командной строки, например параметр /unsafe
.
Свойства параметра
Тип: | String[] |
Default value: | None |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Наборы параметров
FromSource
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
FromMember
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
FromPath
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
FromLiteralPath
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-IgnoreWarnings
Игнорирует предупреждения компилятора. Используйте этот параметр для предотвращения Add-Type
обработки предупреждений компилятора в виде ошибок.
Свойства параметра
Тип: | SwitchParameter |
Default value: | False |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Наборы параметров
FromSource
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
FromMember
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
FromPath
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
FromLiteralPath
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-Language
Указывает язык, используемый в исходном коде. Допустимое значение для этого параметра — CSharp
.
Свойства параметра
Тип: | Language |
Default value: | CSharp |
Допустимые значения: | CSharp |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Наборы параметров
FromSource
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
FromMember
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-LiteralPath
Указывает путь к файлам исходного кода или файлам DLL сборки, содержащим типы. В отличие от пути, значение параметра LiteralPath используется точно так, как напечатано. Никакие символы не интерпретируются как подстановочные знаки. Если путь содержит escape-символы, заключите его в одинарные кавычки. Одинарные кавычки указывают PowerShell на то, что не следует интерпретировать какие-либо символы как управляющие последовательности.
Использование параметров path или LiteralPath гарантирует загрузку сборки, которую вы хотите загрузить.
Свойства параметра
Тип: | String[] |
Default value: | None |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Aliases: | PSPath, LP |
Наборы параметров
FromLiteralPath
Position: | Named |
Обязательно: | True |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-MemberDefinition
Задает новые свойства или методы для класса.
Add-Type
создает код шаблона, необходимый для поддержки свойств или методов.
В Windows эту функцию можно использовать для вызова платформенного вызова (P/Invoke) неуправляемых функций в PowerShell.
Свойства параметра
Тип: | String[] |
Default value: | None |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Наборы параметров
FromMember
Position: | 1 |
Обязательно: | True |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-Name
Указывает имя создаваемого класса. Этот параметр требуется при создании типа из определения члена.
Имя типа и пространство имен должны быть уникальными в сеансе. Вы не можете выгрузить тип или изменить его. Чтобы изменить код для типа, необходимо изменить имя или запустить новый сеанс PowerShell. В противном случае команда завершается ошибкой.
Свойства параметра
Тип: | String |
Default value: | None |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Наборы параметров
FromMember
Position: | 0 |
Обязательно: | True |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-Namespace
По умолчанию эта команда создает тип в пространстве имен Microsoft.PowerShell.Commands.AddType.AutoGeneratedTypes. При использовании этого параметра тип создается в указанном пространстве имен. Если значение пустой строки, тип создается в глобальном пространстве имен.
Свойства параметра
Тип: | String |
Default value: | None |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Aliases: | НС |
Наборы параметров
FromMember
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-OutputAssembly
Создает DLL-файл для сборки с указанным именем в расположении. Введите необязательный путь и имя файла. Разрешено использование подстановочных символов. По умолчанию Add-Type
создает сборку только в памяти. Если вы выводите сборку в файл, необходимо включить параметр PassThru, чтобы вернуть тип из созданной сборки.
Свойства параметра
Тип: | String |
Default value: | None |
Поддерживаются подстановочные знаки: | True |
DontShow: | False |
Aliases: | ОА |
Наборы параметров
FromSource
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
FromMember
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
FromPath
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
FromLiteralPath
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-OutputType
Указывает выходной тип выходной сборки. По умолчанию выходной тип не указан. Этот параметр действителен только в том случае, если в команде указана выходная сборка. Дополнительные сведения о значениях см. в разделе OutputAssemblyType Enumeration.
Допустимые значения для этого параметра приведены следующим образом:
ConsoleApplication
Library
WindowsApplication
Это важно
По состоянию на PowerShell 7.1 ConsoleApplication
и WindowsApplication
не поддерживаются, и PowerShell выдает завершающееся сообщение об ошибке, если они указаны в качестве значений для параметра OutputType.
Свойства параметра
Тип: | OutputAssemblyType |
Default value: | None |
Допустимые значения: | ConsoleApplication, Library, WindowsApplication |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Aliases: | OT |
Наборы параметров
FromSource
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
FromMember
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
FromPath
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
FromLiteralPath
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-PassThru
Возвращает объект System.Runtime, представляющий добавленные типы. По умолчанию этот командлет не создает выходные данные. Используйте этот параметр, если вы использовали OutputAssembly для создания DLL-файла и хотите вернуть тип из созданной сборки.
Свойства параметра
Тип: | SwitchParameter |
Default value: | False |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Наборы параметров
(All)
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-Path
Указывает путь к файлам исходного кода или файлам DLL сборки, содержащим типы.
При отправке файлов исходного кода Add-Type
компилирует код в файлах и создает сборку типов в памяти. Расширение файла, указанное в значении пути, определяет компилятор, который Add-Type
использует.
Использование параметров path или LiteralPath гарантирует загрузку сборки, которую вы хотите загрузить.
Свойства параметра
Тип: | String[] |
Default value: | None |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Наборы параметров
FromPath
Position: | 0 |
Обязательно: | True |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-ReferencedAssemblies
Указывает сборки, от которых зависит тип. По умолчанию Add-Type
ссылки System.dll
и System.Management.Automation.dll
. Начиная с PowerShell 6, ReferencedAssemblies не включают сборки .NET по умолчанию. Необходимо включить конкретную ссылку на них в значение, переданное этому параметру.
Свойства параметра
Тип: | String[] |
Default value: | None |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Aliases: | Анализ розничной торговли |
Наборы параметров
FromSource
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
FromMember
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
FromPath
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
FromLiteralPath
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-TypeDefinition
Указывает исходный код, содержащий определения типов. Введите исходный код в строке или строке или введите переменную, содержащую исходный код. Дополнительные сведения о here-strings см. в about_Quoting_Rules.
Добавьте объявление пространства имен в определение типа. Если опущено объявление пространства имен, тип может иметь то же имя, что и другой тип или ярлык другого типа, что приводит к непреднамеренной перезаписи. Например, если вы определяете тип
Свойства параметра
Тип: | String |
Default value: | None |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Наборы параметров
FromSource
Position: | 0 |
Обязательно: | True |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
-UsingNamespace
Указывает другие пространства имен, необходимые для класса. Это так же, как ключевое слово C#, Using
.
По умолчанию Add-Type
ссылается на пространство имен System. Если используется параметр MemberDefinition, Add-Type
также ссылается на пространство имен System.Runtime.InteropServices. Добавляемые пространства имен с помощью параметра using using UsingNamespace ссылаются в дополнение к пространствам имен по умолчанию.
Свойства параметра
Тип: | String[] |
Default value: | System namespace |
Поддерживаются подстановочные знаки: | False |
DontShow: | False |
Aliases: | Использование |
Наборы параметров
FromMember
Position: | Named |
Обязательно: | False |
Значение из конвейера: | False |
Значение из конвейера по имени свойства: | False |
Значение из оставшихся аргументов: | False |
CommonParameters
Этот командлет поддерживает общие параметры: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction и -WarningVariable. Дополнительные сведения см. в разделе about_CommonParameters.
Входные данные
None
Невозможно передать объекты в этот командлет.
Выходные данные
None
По умолчанию этот командлет не возвращает выходные данные.
Type
При использовании параметра PassThru этот командлет возвращает объект System.Type, представляющий новый тип.
Примечания
Добавляемые типы существуют только в текущем сеансе. Чтобы использовать типы во всех сеансах, добавьте их в профиль PowerShell. Дополнительные сведения о профиле см. в about_Profiles.
Имена типов и пространства имен должны быть уникальными в сеансе. Вы не можете выгрузить тип или изменить его. Если вам нужно изменить код для типа, необходимо изменить имя или запустить новый сеанс PowerShell. В противном случае команда завершается ошибкой.
В Windows PowerShell (версия 5.1 и ниже) необходимо использовать Add-Type
для всего, что еще не загружено. Чаще всего это относится к сборкам, найденным в глобальном кэше сборок (GAC).
В PowerShell 6 и более поздних версиях нет GAC, поэтому PowerShell устанавливает собственные сборки в $PSHOME
.
Эти сборки автоматически загружаются по запросу, поэтому для их загрузки не требуется использовать Add-Type
. Однако использование Add-Type
по-прежнему разрешено разрешить скриптам быть неявно совместимыми с любой версией PowerShell.
Сборки в GAC могут загружаться по имени типа, а не по пути. Для загрузки сборок из произвольного пути требуется Add-Type
, так как эти сборки не могут загружаться автоматически.