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 コマンドレットは、.NET Framework または COM オブジェクトのインスタンスを作成します。

.NET Framework クラスの型または COM オブジェクトの ProgID のどちらかを指定できます。 既定では、.NET Framework クラスの完全修飾名を入力すると、そのクラスのインスタンスへの参照が返されます。 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 オブジェクトの 2 つのインスタンスを作成します。 最初のインスタンスでは、 Property パラメーター ハッシュ テーブルを使用して Navigate2 メソッドを呼び出し、オブジェクトの Visible プロパティを $True に設定して、アプリケーションを表示します。 2 番目のインスタンスは、個々のコマンドで同じ結果を取得します。

$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 パラメーターを追加すると、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  <<<< -COM Word.Application -Strict; $a.visible=$true

例 4: Windows デスクトップを管理する COM オブジェクトを作成する

この例では、COM オブジェクトを作成および使用して Windows デスクトップを管理する方法を示します。

最初のコマンドでは、New-Object コマンドレットの ComObject パラメーターを使用して、Shell.Application ProgID を使用して COM オブジェクトを作成します。 結果のオブジェクトが $ObjShell 変数に格納されます。 2 番目のコマンドは、 $ObjShell 変数を Get-Member コマンドレットにパイプ処理し、COM オブジェクトのプロパティとメソッドを表示します。 メソッドの中には、 ToggleDesktop メソッドがあります。 3 番目のコマンドは、デスクトップで開いているウィンドウを最小化するために、オブジェクトの 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

この例では、読みやすくするためにパラメータースプラッティングを使用します。 詳細については、「 about_Splatting」を参照してください。

例 6: 配列を 1 つのパラメーターとして受け取るコンストラクターを呼び出す

この例では、配列またはコレクションであるパラメーターを受け取るコンストラクターを使用してオブジェクトを作成する方法を示します。 配列パラメーターは、別の配列内にラップして配置する必要があります。

$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 の 3 つのメンバーをコンストラクターのパラメーターにバインドしようとしましたが、コンストラクターは 3 つのパラメーターを受け取りません。 $arrayを別の配列にラップすると、PowerShell は $array の 3 つのメンバーをコンストラクターのパラメーターにバインドすることを試みなくなります。

パラメーター

-ArgumentList

.NET Framework クラスのコンストラクターに渡す引数の配列を指定します。 コンストラクターが配列である単一のパラメーターを受け取る場合は、そのパラメーターを別の配列内でラップする必要があります。 次に例を示します。

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

ArgumentList の動作の詳細については、about_Splattingを参照してください。

ArgumentList のエイリアスは Args です。

型:Object[]
Aliases:Args
配置:1
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-ComObject

COM オブジェクトのプログラム識別子 (ProgID) を指定します。

型:String
配置:0
規定値:None
必須:True
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Property

プロパティ値を設定し、新しいオブジェクトのメソッドを呼び出します。

プロパティまたはメソッドの名前をキー、プロパティの値またはメソッドの引数を値とするハッシュ テーブルを入力します。 New-Object はオブジェクトを作成し、各プロパティ値を設定し、ハッシュ テーブルに表示される順序で各メソッドを呼び出します。

新しいオブジェクトが PSObject クラスから派生し、オブジェクトに存在しないプロパティを指定した場合は、指定したプロパティを NoteProperty としてオブジェクトに追加 New-Object 。 オブジェクトが PSObject でない場合、コマンドは終了しないエラーを生成します。

型:IDictionary
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Strict

作成しようとする COM オブジェクトが相互運用機能アセンブリを使用する場合に、コマンドレットが終了しないエラーを生成することを示します。 この機能は、実際の COM オブジェクトと、COM 呼び出し可能ラッパーを含む .NET Framework オブジェクトとを識別します。

型:SwitchParameter
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-TypeName

.NET Framework クラスの完全修飾名を指定します。 TypeName パラメーターと ComObject パラメーターの両方を指定することはできません。

型:String
配置:0
規定値:None
必須:True
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

入力

None

このコマンドレットにオブジェクトをパイプすることはできません。

出力

Object

このコマンドレットは、作成したオブジェクトを返します。

メモ

  • New-Object には、VBScript CreateObject 関数の最も一般的に使用される機能が用意されています。 VBScript の Set objShell = CreateObject("Shell.Application") などのステートメントは、PowerShell で $objShell = New-Object -COMObject "Shell.Application" に変換できます。
  • New-Object は、コマンド ラインとスクリプト内から .NET Framework オブジェクトを簡単に操作できるようにすることで、Windows スクリプト ホスト環境で使用できる機能を拡張します。