New-Object

Tworzy wystąpienie obiektu microsoft .NET Framework lub COM.

Składnia

New-Object
   [-TypeName] <String>
   [[-ArgumentList] <Object[]>]
   [-Property <IDictionary>]
   [<CommonParameters>]
New-Object
   [-ComObject] <String>
   [-Strict]
   [-Property <IDictionary>]
   [<CommonParameters>]

Opis

Polecenie New-Object cmdlet tworzy wystąpienie obiektu .NET Framework lub COM.

Można określić typ klasy .NET Framework lub ProgID obiektu COM. Domyślnie należy wpisać w pełni kwalifikowaną nazwę klasy .NET Framework, a polecenie cmdlet zwraca odwołanie do wystąpienia tej klasy. Aby utworzyć wystąpienie obiektu COM, użyj parametru ComObject i określ identyfikator ProgID obiektu jako jego wartość.

Przykłady

Przykład 1. Tworzenie obiektu System.Version

W tym przykładzie jest tworzony obiekt System.Version przy użyciu ciągu "1.2.3.4" jako konstruktora.

New-Object -TypeName System.Version -ArgumentList "1.2.3.4"

Major  Minor  Build  Revision
-----  -----  -----  --------
1      2      3      4

Przykład 2. Tworzenie obiektu COM programu Internet Explorer

W tym przykładzie tworzone są dwa wystąpienia obiektu COM reprezentującego aplikację programu Internet Explorer. Pierwsze wystąpienie używa tabeli skrótów parametrów właściwości do wywołania metody Navigate2 i ustawić właściwość Visible obiektu, aby $True aplikacja stała się widoczna. Drugie wystąpienie pobiera te same wyniki z poszczególnymi poleceniami.

$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`

Przykład 3. Użyj parametru Strict w celu wygenerowania błędu bez zakończenia

W tym przykładzie pokazano, że dodanie parametru Strict powoduje New-Object wygenerowanie błędu niezwiązanego z kończeniem, gdy obiekt COM używa zestawu międzyoperacyjnego.

$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

Przykład 4. Tworzenie obiektu COM do zarządzania pulpitem z systemem Windows

W tym przykładzie pokazano, jak utworzyć obiekt COM i użyć go do zarządzania pulpitem z systemem Windows.

Pierwsze polecenie używa parametru New-ObjectComObject polecenia cmdlet do utworzenia obiektu COM z identyfikatorem Shell.Application ProgID. Przechowuje wynikowy obiekt w zmiennej $ObjShell . Drugie polecenie potokuje zmienną $ObjShell do Get-Member polecenia cmdlet, które wyświetla właściwości i metody obiektu COM. Wśród metod jest metoda ToggleDesktop . Trzecie polecenie wywołuje metodę ToggleDesktop obiektu, aby zminimalizować otwarte okna na pulpicie.

$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}

Przykład 5. Przekazywanie wielu argumentów do konstruktora

W tym przykładzie pokazano, jak utworzyć obiekt za pomocą konstruktora, który przyjmuje wiele parametrów. Parametry należy umieścić w tablicy przy użyciu parametru ArgumentList .

$array = @('One', 'Two', 'Three')
$parameters = @{
    TypeName = 'System.Collections.Generic.HashSet[string]'
    ArgumentList = ([string[]]$array, [System.StringComparer]::OrdinalIgnoreCase)
}
$set = New-Object @parameters

Program PowerShell wiąże każdy element członkowski tablicy z parametrem konstruktora.

Uwaga

W tym przykładzie użyto splattingu parametrów na potrzeby czytelności. Aby uzyskać więcej informacji, zobacz about_Splatting.

Przykład 6. Wywoływanie konstruktora, który przyjmuje tablicę jako pojedynczy parametr

W tym przykładzie pokazano, jak utworzyć obiekt z konstruktorem, który przyjmuje parametr, który jest tablicą lub kolekcją. Parametr tablicy należy umieścić w opakowaniu wewnątrz innej tablicy.

$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

Pierwsza próba utworzenia obiektu w tym przykładzie kończy się niepowodzeniem. Program PowerShell próbował powiązać trzy elementy członkowskie z $array parametrami konstruktora, ale konstruktor nie przyjmuje trzech parametrów. Zawijanie $array w innej tablicy uniemożliwia programowi PowerShell próbę powiązania trzech elementów członkowskich z $array parametrami konstruktora.

Parametry

-ArgumentList

Określa tablicę argumentów, które mają być przekazywane do konstruktora klasy .NET Framework. Jeśli konstruktor przyjmuje pojedynczy parametr, który jest tablicą, należy owinąć ten parametr wewnątrz innej tablicy. Na przykład:

$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate -ArgumentList (,$bytes)

Aby uzyskać więcej informacji na temat zachowania argumentlist, zobacz about_Splatting.

Alias argumentList to Args.

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

-ComObject

Określa identyfikator programowy (ProgID) obiektu COM.

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

-Property

Ustawia wartości właściwości i wywołuje metody nowego obiektu.

Wprowadź tabelę skrótów, w której klucze są nazwami właściwości lub metod, a wartości to wartości właściwości lub argumenty metody. New-Object tworzy obiekt i ustawia każdą wartość właściwości i wywołuje każdą metodę w kolejności wyświetlanej w tabeli skrótów.

Jeśli nowy obiekt pochodzi z klasy PSObject i określisz właściwość, która nie istnieje w obiekcie, New-Object dodaje określoną właściwość do obiektu jako właściwość NoteProperty. Jeśli obiekt nie jest obiektem PSObject, polecenie generuje błąd niepowodujący zakończenia.

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

-Strict

Wskazuje, że polecenie cmdlet generuje błąd niepowodujący zakończenia, gdy obiekt COM, który próbujesz utworzyć, używa zestawu międzyoperacyjnego. Ta funkcja odróżnia rzeczywiste obiekty COM od obiektów .NET Framework z otokami wywołującymi com.

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

-TypeName

Określa w pełni kwalifikowaną nazwę klasy .NET Framework. Nie można określić parametru TypeName i parametru ComObject .

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

Dane wejściowe

None

Nie można przekazać potoku danych wejściowych do tego polecenia cmdlet.

Dane wyjściowe

Object

New-Object zwraca utworzony obiekt.

Uwagi

  • New-Object udostępnia najczęściej używane funkcje funkcji VBScript CreateObject. Instrukcję podobną Set objShell = CreateObject("Shell.Application") do języka VBScript można przetłumaczyć $objShell = New-Object -COMObject "Shell.Application" na w programie PowerShell.
  • New-Objectrozszerza funkcjonalność dostępną w środowisku hosta skryptów systemu Windows, ułatwiając pracę z obiektami .NET Framework z poziomu wiersza polecenia i skryptów.