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. Использование строгого параметра для создания неустранимой ошибки

В этом примере показано, что добавление параметра 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  <<<< -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 привязывает каждый элемент массива к параметру конструктора.

Примечание

В этом примере для удобочитаемости используется сплатирование параметров. Дополнительные сведения см. в 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.

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 возвращает созданный объект.

Примечания

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