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. Первый экземпляр использует хэш-таблицу параметра Property для вызова метода 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. Используйте строгий параметр для создания неустранимой ошибки
В этом примере показано, что добавление строгого параметра приводит 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 <<<< -COM 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.
Псевдоним параметра ArgumentList — Args.
Тип: | 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