New-Object
Hiermee maakt u een exemplaar van een Microsoft .NET Framework- of COM-object.
Syntaxis
New-Object
[-TypeName] <String>
[[-ArgumentList] <Object[]>]
[-Property <IDictionary>]
[<CommonParameters>]
New-Object
[-ComObject] <String>
[-Strict]
[-Property <IDictionary>]
[<CommonParameters>]
Description
Met de cmdlet New-Object
wordt een exemplaar van een .NET Framework- of COM-object gemaakt.
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 eigenschap parameter gebruikt om de methode Navigate2 aan te roepen en de eigenschap zichtbaar van het object in te stellen op $True
om de toepassing zichtbaar te 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 een interop-assembly gebruikt.
$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 maakt gebruik van de ComObject parameter van de New-Object
cmdlet om een COM-object te maken met de Shell.Application ProgID. Het resulterende object wordt opgeslagen in de variabele $ObjShell
. De tweede opdracht geeft de $ObjShell
variabele door aan de Get-Member
cmdlet, waarin de eigenschappen en methoden van het COM-object worden weergegeven. Onder de methoden is de methode ToggleDesktop. 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 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_Splattingvoor 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 van $array
te binden aan parameters van de constructor, maar de constructor neemt geen drie parameters. Wrapping $array
in een andere matrix voorkomt dat PowerShell probeert de drie leden van $array
te binden aan parameters van de constructor.
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. Bijvoorbeeld:
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate -ArgumentList (,$bytes)
Zie about_Splattingvoor meer informatie over het gedrag van ArgumentList.
De alias voor ArgumentList is Args.
Type: | Object[] |
Aliassen: | Args |
Position: | 1 |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-ComObject
Hiermee geeft u de programmatische id (ProgID) van het COM-object.
Type: | String |
Position: | 0 |
Default value: | None |
Vereist: | True |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | 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
de opgegeven eigenschap als een NoteProperty aan het object toevoegt. Als het object geen PSObject-is, genereert de opdracht een niet-afsluitfout.
Type: | IDictionary |
Position: | Named |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | 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 |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | 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 |
Vereist: | True |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
Invoerwaarden
None
U kunt geen objecten doorsluisen naar deze cmdlet.
Uitvoerwaarden
Met deze cmdlet wordt het object geretourneerd dat wordt gemaakt.
Notities
-
New-Object
biedt de meestgebruikte functionaliteit van de functie VBScript CreateObject. Een instructie zoalsSet objShell = CreateObject("Shell.Application")
in VBScript kan worden vertaald naar$objShell = New-Object -COMObject "Shell.Application"
in 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.