New-Object

Hiermee maakt u een exemplaar van een Microsoft .NET Framework- of COM-object.

Syntax

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

Description

De New-Object cmdlet maakt een exemplaar van een .NET Framework- of COM-object.

U kunt het type .NET Framework-klasse of een ProgID van een COM-object opgeven. Standaard typt u de volledig gekwalificeerde naam van een .NET Framework-klasse en retourneert de cmdlet een verwijzing naar een exemplaar van die klasse. Als u een exemplaar van een COM-object wilt maken, gebruikt u de parameter ComObject en geeft u de ProgID van het object op als waarde.

Voorbeelden

Voorbeeld 1: Een System.Version-object maken

In dit voorbeeld wordt een System.Version-object gemaakt met behulp van de tekenreeks 1.2.3.4 als constructor.

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

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

Voorbeeld 2: Een COM-object in Internet Explorer maken

In dit voorbeeld worden twee exemplaren van het COM-object gemaakt dat de Internet Explorer-toepassing vertegenwoordigt. In het eerste exemplaar wordt de hashtabel eigenschapparameter gebruikt om de methode Navigate2 aan te roepen en de eigenschap Visible van het object in te stellen om de toepassing zichtbaar te $True maken. Het tweede exemplaar krijgt dezelfde resultaten met afzonderlijke opdrachten.

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

Voorbeeld 3: Gebruik de parameter Strikt om een fout te genereren die niet wordt beëindigd

In dit voorbeeld ziet u dat het toevoegen van de parameter Strict ervoor zorgt dat de New-Object cmdlet een niet-afsluitfout genereert wanneer het COM-object gebruikmaakt van een interop-assembly.

$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

Voorbeeld 4: Een COM-object maken om Windows-bureaublad te beheren

In dit voorbeeld ziet u hoe u een COM-object maakt en gebruikt om uw Windows-bureaublad te beheren.

De eerste opdracht gebruikt de parameter ComObject van de New-Object cmdlet om een COM-object te maken met de Shell.Application ProgID. Het resulterende object wordt opgeslagen in de $ObjShell variabele. De tweede opdracht geeft de $ObjShell variabele door aan de Get-Member cmdlet, waarin de eigenschappen en methoden van het COM-object worden weergegeven. De methode ToggleDesktop is een van de methoden. Met de derde opdracht wordt de methode ToggleDesktop van het object aangeroepen om de geopende vensters op uw bureaublad te minimaliseren.

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

Voorbeeld 5: Meerdere argumenten doorgeven aan een constructor

In dit voorbeeld ziet u hoe u een object maakt met een constructor die meerdere parameters gebruikt. De parameters moeten in een matrix worden geplaatst wanneer u de parameter ArgumentList gebruikt.

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

PowerShell verbindt elk lid van de matrix met een parameter van de constructor.

Notitie

In dit voorbeeld wordt parametersplatting gebruikt voor leesbaarheid. Zie about_Splatting voor meer informatie.

Voorbeeld 6: Een constructor aanroepen die een matrix als één parameter gebruikt

In dit voorbeeld ziet u hoe u een object maakt met een constructor die een parameter gebruikt die een matrix of verzameling is. De matrixparameter moet in een andere matrix worden geplaatst.

$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

De eerste poging om het object in dit voorbeeld te maken mislukt. PowerShell heeft geprobeerd de drie leden $array van de constructor te binden aan parameters, maar de constructor neemt geen drie parameters. Door in $array een andere matrix te verpakken, voorkomt u dat PowerShell probeert de drie leden van $array de parameters van de constructor te binden.

Parameters

-ArgumentList

Hiermee geeft u een matrix van argumenten die moeten worden doorgegeven aan de constructor van de .NET Framework-klasse. Als de constructor één parameter gebruikt die een matrix is, moet u die parameter in een andere matrix verpakken. Voorbeeld:

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

Zie about_Splatting voor meer informatie over het gedrag van ArgumentList.

De alias voor ArgumentList is Args.

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

-ComObject

Hiermee geeft u de programmatische id (ProgID) van het COM-object.

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

-Property

Hiermee stelt u eigenschapswaarden in en roept u methoden van het nieuwe object aan.

Voer een hashtabel in waarin de sleutels de namen van eigenschappen of methoden zijn en de waarden eigenschapswaarden of methodeargumenten zijn. New-Object maakt het object en stelt elke eigenschapswaarde in en roept elke methode aan in de volgorde waarin ze worden weergegeven in de hash-tabel.

Als het nieuwe object is afgeleid van de psObject-klasse en u een eigenschap opgeeft die niet bestaat in het object, New-Object voegt u de opgegeven eigenschap toe aan het object als een NoteProperty. Als het object geen PSObject is, genereert de opdracht een niet-afsluitfout.

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

-Strict

Geeft aan dat de cmdlet een niet-afsluitfout genereert wanneer een COM-object dat u probeert te maken gebruikmaakt van een interoperabiliteitsassembly. Deze functie onderscheidt werkelijke COM-objecten van .NET Framework-objecten met COM-aanroepbare wrappers.

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

-TypeName

Hiermee geeft u de volledig gekwalificeerde naam van de .NET Framework-klasse. U kunt niet zowel de parameter TypeName als de parameter ComObject opgeven.

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

Invoerwaarden

None

U kunt geen objecten doorsluisen naar deze cmdlet.

Uitvoerwaarden

Object

Met deze cmdlet wordt het object geretourneerd dat wordt gemaakt.

Notities

  • New-Object biedt de meestgebruikte functionaliteit van de functie VBScript CreateObject. Een instructie zoals Set objShell = CreateObject("Shell.Application") in VBScript kan worden vertaald in $objShell = New-Object -COMObject "Shell.Application" PowerShell.
  • New-Object breidt de functionaliteit uit die beschikbaar is in de Windows Script Host-omgeving door het eenvoudig te maken om te werken met .NET Framework-objecten vanaf de opdrachtregel en binnen scripts.