New-Object
Создает экземпляр объекта Microsoft .NET Framework или COM.
Синтаксис
New-Object
[-TypeName] <String>
[[-ArgumentList] <Object[]>]
[-Property <IDictionary>]
[<CommonParameters>]
New-Object
[-ComObject] <String>
[-Strict]
[-Property <IDictionary>]
[<CommonParameters>]
Описание
Командлет New-Object
создает экземпляр объекта .NET Framework или COM.
Можно указать тип класса .NET Framework или ProgID объекта COM. По умолчанию вы вводите полное имя класса .NET Framework, а командлет возвращает ссылку на экземпляр этого класса. Чтобы создать экземпляр COM-объекта, используйте параметр ComObject и укажите progID объекта в качестве значения.
Примеры
Пример 1. Создание объекта System.Version
В этом примере создается объект System.Version с помощью строки "1.2.3.4" в качестве конструктора.
New-Object -TypeName System.Version -ArgumentList "1.2.3.4"
Major Minor Build Revision
----- ----- ----- --------
1 2 3 4
Пример 2. Создание COM-объекта Internet Explorer
В этом примере создается два экземпляра COM-объекта, представляющего приложение Internet Explorer. Первый экземпляр использует хэш-таблицу хэша свойства свойства для вызова метода Navigate2 и задания свойства Visible объекта $true
, чтобы сделать приложение видимым.
Второй экземпляр получает те же результаты с отдельными командами.
$IE1 = New-Object -ComObject InternetExplorer.Application -Property @{Navigate2="www.microsoft.com"; Visible = $true}
# The following command gets the same results as the example above.
$IE2 = New-Object -ComObject InternetExplorer.Application`
$IE2.Navigate2("www.microsoft.com")`
$IE2.Visible = $true`
Пример 3. Используйте строгий параметр для создания неустранимой ошибки
В этом примере показано, что добавление параметра Strict приводит к тому, что командлет New-Object
создает ошибку, не завершающуюся при использовании сборки взаимодействия COM.
$A = New-Object -ComObject Word.Application -Strict -Property @{Visible = $true}
New-Object : The object written to the pipeline is an instance of the type
"Microsoft.Office.Interop.Word.ApplicationClass" from the component's primary interop assembly. If
this type exposes different members than the IDispatch members, scripts written to work with this
object might not work if the primary interop assembly is not installed.
At line:1 char:14
+ $A = New-Object <<<< -ComObject Word.Application -Strict; $a.Visible=$true
Пример 4. Создание COM-объекта для управления рабочим столом Windows
В этом примере показано, как создать и использовать COM-объект для управления рабочим столом Windows.
Первая команда использует параметр ComObject командлета New-Object
для создания COM-объекта с Shell.Application ProgID. Он сохраняет полученный объект в переменной $objShell
. Вторая команда передает переменную $objShell
командлету Get-Member
, который отображает свойства и методы объекта COM. Среди методов используется метод ToggleDesktop. Третья команда вызывает метод ToggleDesktop объекта, чтобы свести к минимуму открытые окна на рабочем столе.
$objShell = New-Object -ComObject "Shell.Application"
$objShell | Get-Member
$objShell.ToggleDesktop()
TypeName: System.__ComObject#{866738b9-6cf2-4de8-8767-f794ebe74f4e}
Name MemberType Definition
---- ---------- ----------
AddToRecent Method void AddToRecent (Variant, string)
BrowseForFolder Method Folder BrowseForFolder (int, string, int, Variant)
CanStartStopService Method Variant CanStartStopService (string)
CascadeWindows Method void CascadeWindows ()
ControlPanelItem Method void ControlPanelItem (string)
EjectPC Method void EjectPC ()
Explore Method void Explore (Variant)
ExplorerPolicy Method Variant ExplorerPolicy (string)
FileRun Method void FileRun ()
FindComputer Method void FindComputer ()
FindFiles Method void FindFiles ()
FindPrinter Method void FindPrinter (string, string, string)
GetSetting Method bool GetSetting (int)
GetSystemInformation Method Variant GetSystemInformation (string)
Help Method void Help ()
IsRestricted Method int IsRestricted (string, string)
IsServiceRunning Method Variant IsServiceRunning (string)
MinimizeAll Method void MinimizeAll ()
NameSpace Method Folder NameSpace (Variant)
Open Method void Open (Variant)
RefreshMenu Method void RefreshMenu ()
ServiceStart Method Variant ServiceStart (string, Variant)
ServiceStop Method Variant ServiceStop (string, Variant)
SetTime Method void SetTime ()
ShellExecute Method void ShellExecute (string, Variant, Variant, Variant, Variant)
ShowBrowserBar Method Variant ShowBrowserBar (string, Variant)
ShutdownWindows Method void ShutdownWindows ()
Suspend Method void Suspend ()
TileHorizontally Method void TileHorizontally ()
TileVertically Method void TileVertically ()
ToggleDesktop Method void ToggleDesktop ()
TrayProperties Method void TrayProperties ()
UndoMinimizeALL Method void UndoMinimizeALL ()
Windows Method IDispatch Windows ()
WindowsSecurity Method void WindowsSecurity ()
WindowSwitcher Method void WindowSwitcher ()
Application Property IDispatch Application () {get}
Parent Property IDispatch Parent () {get}
Пример 5. Передача нескольких аргументов конструктору
В этом примере показано, как создать объект с конструктором, принимаюющим несколько параметров. Параметры должны быть помещены в массив при использовании параметра ArgumentList.
$array = @('One', 'Two', 'Three')
$parameters = @{
TypeName = 'System.Collections.Generic.HashSet[string]'
ArgumentList = ([string[]]$array, [System.StringComparer]::OrdinalIgnoreCase)
}
$set = New-Object @parameters
PowerShell привязывает каждый элемент массива к параметру конструктора.
Заметка
В этом примере используется splatting параметров для удобства чтения. Дополнительные сведения см. в about_Splatting.
Пример 6. Вызов конструктора, который принимает массив в качестве одного параметра
В этом примере показано, как создать объект с конструктором, принимаюющим параметр, который является массивом или коллекцией. Параметр массива должен быть помещен в оболочку в другой массив.
$array = @('One', 'Two', 'Three')
# This command throws an exception.
$set = New-Object -TypeName 'System.Collections.Generic.HashSet[string]' -ArgumentList $array
# This command succeeds.
$set = New-Object -TypeName 'System.Collections.Generic.HashSet[string]' -ArgumentList (,[string[]]$array)
$set
New-Object : Cannot find an overload for "HashSet`1" and the argument count: "3".
At line:1 char:8
+ $set = New-Object -TypeName 'System.Collections.Generic.HashSet[strin ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [New-Object], MethodException
+ FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand
One
Two
Three
Первая попытка создать объект в этом примере завершается ошибкой. PowerShell попыталась привязать три члена $array
к параметрам конструктора, но конструктор не принимает три параметра. Упаковка $array
в другом массиве предотвращает попытку PowerShell привязать три члена $array
к параметрам конструктора.
Параметры
-ArgumentList
Задает массив аргументов для передачи конструктору класса .NET Framework. Если конструктор принимает один параметр массива, необходимо упаковать этот параметр внутри другого массива. Например:
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate -ArgumentList (,$bytes)
Дополнительные сведения о поведении ArgumentListсм. в about_Splatting.
Псевдоним для ArgumentListArgs.
Тип: | Object[] |
Aliases: | Args |
Position: | 1 |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-ComObject
Указывает программный идентификатор (ProgID) объекта COM.
Тип: | String |
Position: | 0 |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Property
Задает значения свойств и вызывает методы нового объекта.
Введите хэш-таблицу, в которой ключи являются именами свойств или методов, а значения — значениями свойств или аргументами метода.
New-Object
создает объект и задает каждое значение свойства и вызывает каждый метод в том порядке, в котором они отображаются в хэш-таблице.
Если новый объект является производным от класса PSObject, и вы указываете свойство, которое не существует в объекте, New-Object
добавляет указанное свойство в объект в виде NoteProperty. Если объект не является PSObject, команда создает ошибку без конца.
Тип: | IDictionary |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-Strict
Указывает, что командлет создает ошибку, не завершающуюся при попытке создания COM-объекта, использующего сборку взаимодействия. Эта функция отличает фактические COM-объекты от объектов .NET Framework с вызываемыми COM-оболочками.
Тип: | SwitchParameter |
Position: | Named |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-TypeName
Указывает полное имя класса .NET Framework. Нельзя указать параметр TypeName и параметр ComObject.
Тип: | String |
Position: | 0 |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
Входные данные
None
Невозможно передать объекты в этот командлет.
Выходные данные
Этот командлет возвращает создаваемый объект.
Примечания
-
New-Object
предоставляет наиболее часто используемые функции функции VBScript CreateObject. Инструкцию, напримерSet objShell = CreateObject("Shell.Application")
в VBScript, можно преобразовать в$objShell = New-Object -ComObject "Shell.Application"
в PowerShell. -
New-Object
расширяет функциональные возможности, доступные в среде узла скриптов Windows, что упрощает работу с объектами .NET Framework из командной строки и в сценариях.
Связанные ссылки
PowerShell