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: インターネット エクスプローラー COM オブジェクトを作成する

この例では、インターネット エクスプローラー アプリケーションを表す 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 パラメーターを使用して、終了しないエラーを生成する

この例では、COM オブジェクトが相互運用機能アセンブリを 使用するときに、Strict パラメーター 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 デスクトップを管理する方法を示します。

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

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 オブジェクトが相互運用機能アセンブリを使用する場合に、コマンドレットが終了しないエラーを生成することを示します。 この機能は、実際の 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

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

出力

Object

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

メモ

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