New-Object
创建 Microsoft .NET Framework 或 COM 对象的实例。
语法
New-Object
[-TypeName] <String>
[[-ArgumentList] <Object[]>]
[-Property <IDictionary>]
[<CommonParameters>]
New-Object
[-ComObject] <String>
[-Strict]
[-Property <IDictionary>]
[<CommonParameters>]
说明
cmdlet New-Object
创建 .NET Framework 或 COM 对象的实例。
可以指定 .NET Framework 类的类型或 COM 对象的 ProgID。 默认情况下,键入 .NET Framework 类的完全限定名后,此 cmdlet 将返回对该类的实例的引用。 若要创建 COM 对象的实例,请使用 ComObject 参数,并将对象的 ProgID 指定为其值。
示例
示例 1:Create 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:Create Internet Explorer COM 对象
此示例创建表示 Internet Explorer 应用程序的 COM 对象的两个实例。 第一个实例使用 Property 参数哈希表调用 Navigate2 方法,并将 对象的 Visible 属性设置为 $True
以使应用程序可见。
第二个实例使用单个命令获取相同的结果。
$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 参数生成非终止错误
此示例演示在 COM 对象使用互操作程序集时,添加 Strict 参数会导致 New-Object
cmdlet 生成非终止错误。
$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:Create COM 对象来管理 Windows 桌面
此示例显示如何创建和使用 COM 对象来管理 Windows 桌面。
第一个命令使用 cmdlet 的 New-Object
ComObject 参数创建具有 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 将数组的每个成员绑定到构造函数的参数。
注意
此示例使用参数 splatting 提高可读性。 有关详细信息,请参阅 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 的别名是 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 函数最常用的功能。 VBScript 中的语句Set objShell = CreateObject("Shell.Application")
可以在 PowerShell 中转换为$objShell = New-Object -COMObject "Shell.Application"
。New-Object
扩展了 Windows 脚本主机环境中可用的功能,使从命令行和脚本中轻松处理.NET Framework对象。