Поделиться через


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. Create объекта 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. Create COM-объект internet Обозреватель

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

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

В этом примере показано, как создать и использовать COM-объект для управления рабочим столом Windows.

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