New-Object

创建 Microsoft .NET Framework 或 COM 对象的实例。

语法

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

说明

New-Object cmdlet 创建.NET Framework或 COM 对象的实例。

可以指定 .NET Framework 类的类型或 COM 对象的 ProgID。 默认情况下,键入 .NET Framework 类的完全限定名后,此 cmdlet 将返回对该类的实例的引用。 若要创建 COM 对象的实例,请使用 ComObject 参数,并将对象的 ProgID 指定为其值。

示例

示例 1:创建 System.Version 对象

此示例使用“1.2.3.4”字符串作为构造函数创建 System.Version 对象。

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

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

示例 2:创建 Internet Explorer COM 对象

此示例创建表示 Internet Explorer 应用程序的 COM 对象的两个实例。 第一个实例使用 Property 参数哈希表调用 Navigate2 方法,并将对象的 $TrueVisible 属性设置为使应用程序可见。 第二个实例使用单个命令获取相同的结果。

$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 cmdlet 在 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 桌面。

第一个命令使用 cmdlet 的 New-ObjectComObject 参数创建具有 Shell.Application ProgID 的 COM 对象。 它将生成的对象存储在变量中 $ObjShell 。 第二个命令通过管道将 $ObjShell 变量传递给 Get-Member cmdlet,该 cmdlet 显示 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

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

-ComObject

指定 COM 对象的编程标识符 (ProgID)。

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

-Property

设置新对象的属性值并调用其方法。

输入哈希表,其中键为属性或方法的名称,值为属性值或方法参数。 New-Object 创建对象并设置每个属性值,并按它们在哈希表中显示的顺序调用每个方法。

如果新对象派生自 PSObject 类,并且指定对象上不存在的属性, New-Object 请将指定的属性作为 NoteProperty 添加到该对象。 如果该对象不是 PSObject,该命令将生成非终止错误。

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

-Strict

指示当尝试创建的 COM 对象使用互操作程序集时,该 cmdlet 将生成非终止错误。 此功能可将实际的 COM 对象与具有 COM 可调用包装器的 .NET Framework 对象区分开来。

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

-TypeName

指定 .NET Framework 类的完全限定名称。 不能同时指定 TypeName 参数和 ComObject 参数。

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

输入

None

不能通过管道将输入传递给此 cmdlet。

输出

Object

New-Object 返回所创建的对象。

备注

  • New-Object 提供 VBScript CreateObject 函数最常用的功能。 可以在 PowerShell 中将类似于 Set objShell = CreateObject("Shell.Application") VBScript 的语句转换为 $objShell = New-Object -COMObject "Shell.Application" 语句。
  • New-Object通过在命令行和脚本中轻松处理.NET Framework对象,扩展 Windows 脚本主机环境中可用的功能。