Поиск по сайту:

New-Object (Microsoft.PowerShell.Utility)


New-Object

Модуль:
Microsoft.PowerShell.Utility

Создает экземпляр 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 для создания непрерывающейся ошибки.

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

Псевдоним ArgumentList — Args.

Тип :

Object[]

Псевдонимы:

Args

Позиция:

1

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-ComObject

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

Тип :

String

Позиция:

0

Значение по умолчанию:

None

Необходимый:

True

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-Property

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

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

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

Тип :

IСловарь

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-Strict

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

Тип :

SwitchParameter

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-TypeName

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

Тип :

String

Позиция:

0

Значение по умолчанию:

None

Необходимый:

True

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

Входы

Нет

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

Выходы

Объект

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

Примечания

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