New-Object

Skapar en instans av ett Microsoft .NET Framework- eller COM-objekt.

Syntax

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

Description

Cmdleten New-Object skapar en instans av ett .NET Framework- eller COM-objekt.

Du kan ange antingen typen av en .NET Framework-klass eller ett ProgID för ett COM-objekt. Som standard skriver du det fullständigt kvalificerade namnet på en .NET Framework-klass och cmdleten returnerar en referens till en instans av den klassen. Om du vill skapa en instans av ett COM-objekt använder du parametern ComObject och anger ProgID för objektet som dess värde.

Exempel

Exempel 1: Skapa ett System.Version-objekt

I det här exemplet skapas ett System.Version-objekt med strängen "1.2.3.4" som konstruktor.

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

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

Exempel 2: Skapa ett INTERNET Explorer COM-objekt

Det här exemplet skapar två instanser av COM-objektet som representerar Internet Explorer-programmet. Den första instansen använder hashtabellen egenskapsparameter för att anropa metoden Navigate2 och ange objektets visible-egenskap för $True att göra programmet synligt. Den andra instansen får samma resultat med enskilda kommandon.

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

Exempel 3: Använd parametern Strict för att generera ett icke-avslutande fel

Det här exemplet visar att om du lägger till parametern Strikt genereras New-Object ett icke-avslutande fel när COM-objektet använder en interop-sammansättning.

$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

Exempel 4: Skapa ett COM-objekt för att hantera Windows-skrivbordet

Det här exemplet visar hur du skapar och använder ett COM-objekt för att hantera ditt Windows-skrivbord.

Det första kommandot använder parametern ComObject för cmdleten New-Object för att skapa ett COM-objekt med Shell.Application ProgID. Det lagrar det resulterande objektet i variabeln $ObjShell . Det andra kommandot dirigerar variabeln $ObjShell till cmdleten Get-Member , som visar egenskaperna och metoderna för COM-objektet. Bland metoderna finns metoden ToggleDesktop . Det tredje kommandot anropar metoden ToggleDesktop för objektet för att minimera de öppna fönstren på skrivbordet.

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

Exempel 5: Skicka flera argument till en konstruktor

Det här exemplet visar hur du skapar ett objekt med en konstruktor som tar flera parametrar. Parametrarna måste placeras i en matris när parametern ArgumentList används.

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

PowerShell binder varje medlem i matrisen till en parameter i konstruktorn.

Kommentar

I det här exemplet används parametersplattning för läsbarhet. Mer information finns i about_Splatting.

Exempel 6: Anropa en konstruktor som tar en matris som en enskild parameter

Det här exemplet visar hur du skapar ett objekt med en konstruktor som tar en parameter som är en matris eller samling. Matrisparametern måste infogas i en annan matris.

$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

Det första försöket att skapa objektet i det här exemplet misslyckas. PowerShell försökte binda de tre medlemmarna $array i till konstruktorns parametrar, men konstruktorn tar inte tre parametrar. Omslutning $array i en annan matris hindrar PowerShell från att försöka binda de tre medlemmarna $array i till konstruktorns parametrar.

Parametrar

-ArgumentList

Anger en matris med argument som ska skickas till konstruktorn för .NET Framework-klassen. Om konstruktorn tar en enskild parameter som är en matris måste du omsluta parametern i en annan matris. Till exempel:

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

Mer information om beteendet för ArgumentList finns i about_Splatting.

Aliaset för ArgumentList är Args.

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

-ComObject

Anger den programmatiska identifieraren (ProgID) för COM-objektet.

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

-Property

Anger egenskapsvärden och anropar metoder för det nya objektet.

Ange en hash-tabell där nycklarna är namnen på egenskaper eller metoder och värdena är egenskapsvärden eller metodargument. New-Object skapar objektet och anger varje egenskapsvärde och anropar varje metod i den ordning som de visas i hash-tabellen.

Om det nya objektet härleds från klassen PSObject och du anger en egenskap som inte finns i objektet lägger New-Object du till den angivna egenskapen i objektet som en NoteProperty. Om objektet inte är en PSObject genererar kommandot ett icke-avslutande fel.

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

-Strict

Anger att cmdleten genererar ett icke-avslutande fel när ett COM-objekt som du försöker skapa använder en interop-sammansättning. Den här funktionen skiljer faktiska COM-objekt från .NET Framework-objekt med COM-anropsbara omslutningar.

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

-TypeName

Anger det fullständigt kvalificerade namnet på .NET Framework-klassen. Du kan inte ange både parametern TypeName och parametern ComObject .

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

Indata

None

Du kan inte skicka objekt till den här cmdleten.

Utdata

Object

Den här cmdleten returnerar det objekt som skapas.

Kommentarer

  • New-Object innehåller de vanligaste funktionerna i funktionen VBScript CreateObject. En instruktion som Set objShell = CreateObject("Shell.Application") i VBScript kan översättas till $objShell = New-Object -COMObject "Shell.Application" i PowerShell.
  • New-Object utökar funktionerna i Windows Script Host-miljön genom att göra det enkelt att arbeta med .NET Framework-objekt från kommandoraden och i skript.