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 в Интернете Обозреватель

В этом примере создаются два экземпляра COM-объекта, представляющего приложение Обозреватель Интернета. Первый экземпляр использует хэш-таблицу параметра 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.

Type:Object[]
Aliases:Args
Position:1
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ComObject

Указывает программный идентификатор (ProgID) объекта COM.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Property

Задает значения свойств и вызывает методы нового объекта.

Введите хэш-таблицу, в которой ключи — это имена свойств или методов, а значения — это значения свойств или аргументы методов. New-Object создает объект и задает каждое значение свойства и вызывает каждый метод в том порядке, в котором они отображаются в хэш-таблице.

Если новый объект является производным от класса PSObject , и вы указываете свойство, которое не существует в объекте, New-Object добавляет указанное свойство в объект в качестве NoteProperty. Если объект не является PSObject, команда создает ошибку без конца.

Type:IDictionary
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Strict

Указывает, что командлет создает ошибку, не завершающуюся при попытке создания COM-объекта, использующего сборку взаимодействия. Эта функция отличает настоящие COM-объекты от объектов .NET Framework с вызываемыми оболочками COM.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-TypeName

Указывает полное имя класса .NET Framework. Невозможно указать параметр TypeName и параметр ComObject .

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

Входные данные

None

Невозможно передать объекты в этот командлет.

Выходные данные

Object

Этот командлет возвращает создаваемый объект.

Примечания

  • New-Object предоставляет наиболее часто используемые функции функции VBScript CreateObject. Инструкцию, как Set objShell = CreateObject("Shell.Application") и в VBScript, можно преобразовать $objShell = New-Object -COMObject "Shell.Application" в PowerShell.
  • New-Objectрасширяет функциональные возможности, доступные в среде узла скриптов Windows, упрощая работу с объектами платформа .NET Framework из командной строки и в сценариях.