New-Object
建立一個Microsoft .NET框架或 COM 物件的實例。
語法
Net (預設值)
New-Object
[-TypeName] <String>
[[-ArgumentList] <Object[]>]
[-Property <IDictionary>]
[<CommonParameters>]
Com
New-Object
[-ComObject] <String>
[-Strict]
[-Property <IDictionary>]
[<CommonParameters>]
Description
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 方法,並將物件的 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:使用嚴格參數產生非終止誤差
此範例說明,加入 嚴格 參數時,當 COM 物件使用互操作組裝時, New-Object 指令長會產生非終止錯誤。
$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 <<<< -ComObject Word.Application -Strict; $a.Visible=$true
範例 4:建立一個 COM 物件來管理 Windows 桌面
這個範例展示了如何建立並使用COM物件來管理你的Windows桌面。
第一個指令使用 cmdlet 的 New-Object 參數來建立一個帶有 Shell.Application ProgID 的 COM 物件。 它會將產生的物件儲存在變數中 $objShell 。
第二個指令將變數管道傳送 $objShell 到 Get-Member 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 將陣列中的每個成員綁定到建構子的參數。
Note
此範例使用參數 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 三個成員綁定到建構子的參數,但建構子並未接受 three 參數。 在另一個陣列中包裝 $array 可以防止 PowerShell 嘗試將 的 $array 三個成員綁定到建構子的參數上。
參數
-ArgumentList
指定一組參數,要傳遞給 .NET Framework 類別的建構子。 如果建構子只拿一個參數,那個參數是陣列,你就必須把該參數包覆在另一個陣列裡。 例如:
$params = @{
TypeName = 'System.Security.Cryptography.X509Certificates.X509Certificate'
ArgumentList = (,$bytes)
}
$cert = New-Object @params
如需 ArgumentList行為的詳細資訊,請參閱 about_Splatting。
ArgumentList 的別名 Args。
參數屬性
| 類型: | Object[] |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
| 別名: | 參數 |
參數集
Net
| Position: | 1 |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-ComObject
指定 COM 物件的程式識別碼(ProgID)。
參數屬性
| 類型: | String |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
Com
| Position: | 0 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Property
設定屬性值並呼叫新物件的方法。
進入一個雜湊表,鍵為屬性或方法的名稱,值為屬性值或方法參數。
New-Object 建立物件並設定每個屬性值,並依照方法在雜湊表中出現的順序呼叫每個方法。
如果新物件是從 PSObject 類別衍生而來,且你指定了該物件上不存在的屬性, New-Object 則會將該屬性以 NoteProperty 的形式加入該物件。 若物件非 PSObject,指令會產生非終止錯誤。
參數屬性
| 類型: | IDictionary |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
(All)
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-Strict
表示當你嘗試建立的 COM 物件使用互操作組件時,該指令檔會產生非終止錯誤。 此功能區分了實際的 COM 物件與具有 COM 呼叫封裝器的 .NET Framework 物件。
參數屬性
| 類型: | SwitchParameter |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
Com
| Position: | Named |
| 必要: | False |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
-TypeName
指定 .NET Framework 類別的完整限定名稱。 你不能同時指定 TypeName 參數和 ComObject 參數。
參數屬性
| 類型: | String |
| 預設值: | None |
| 支援萬用字元: | False |
| 不要顯示: | False |
參數集
Net
| Position: | 0 |
| 必要: | True |
| 來自管線的值: | False |
| 來自管線按屬性名稱的值: | False |
| 來自剩餘引數的值: | False |
CommonParameters
此 cmdlet 支援常見參數:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 如需詳細資訊,請參閱 about_CommonParameters。
輸入
None
您不能將物件透過管道傳送到此 Cmdlet。
輸出
Object
這個指令小子會回傳它所建立的物件。
備註
-
New-Object提供 VBScript CreateObject 函式中最常用的功能。 像Set objShell = CreateObject("Shell.Application")VBScript 中的陳述可以轉譯成$objShell = New-Object -ComObject "Shell.Application"PowerShell 中的陳述。 -
New-Object擴充了 Windows Script Host 環境中可用的功能,讓從命令列及腳本內輕鬆操作 .NET Framework 物件。