簡単な説明
セッションで使用される名前空間を指定できます。
長い説明
using ステートメントを使用すると、セッションで使用する名前空間を指定できます。 名前空間を追加すると、.NET クラスとメンバーの使用が簡素化され、スクリプト モジュールとアセンブリからクラスをインポートできます。
using ステートメントは、スクリプトまたはモジュール内の他のステートメントの前に記述する必要があります。 パラメーターを含め、コメントされていないステートメントの前に記述することはできません。
using ステートメントには変数を含めてはなりません。
using ステートメントを、変数の using: スコープ修飾子と混同しないでください。 詳細については、about_Remote_Variablesを参照してください。
名前空間の構文
型を解決する .NET 名前空間を指定するには、次のようにします。
using namespace <.NET-namespace>
名前空間を指定すると、短い名前で型を簡単に参照できます。
モジュールの構文
PowerShell モジュールからクラスを読み込むには:
using module <module-name>
<module-name> の値には、モジュール名、完全なモジュール仕様、またはモジュール ファイルへのパスを指定できます。
<module-name> がパスの場合、パスは完全修飾または相対パスにすることができます。 相対パスは、using ステートメントを含むスクリプトを基準にして解決されます。
<module-name> が名前またはモジュールの指定である場合、PowerShell は指定されたモジュールの PSModulePath を検索します。
モジュール仕様は、次のキーを持つハッシュ テーブルです。
-
ModuleName- 必須 モジュール名を指定します。 -
GUID- 省略可能 モジュールの GUID を指定します。 -
また、以下の 3 つのキーのいずれかを指定する必要があります。 これらのキーを一緒に使用することはできません。
-
ModuleVersion- モジュールの最小許容バージョンを指定します。 -
RequiredVersion- モジュールの正確で必要なバージョンを指定します。 -
MaximumVersion- モジュールの許容される最大バージョンを指定します。
-
using module ステートメントは、スクリプトモジュールまたはバイナリモジュールのルートモジュール (ModuleToProcess) からクラスをインポートします。 ネストされたモジュールで定義されたクラスや、モジュールにドットソース化されたスクリプトで定義されたクラスを一貫してインポートするわけではありません。 モジュールの外部のユーザーが使用できるようにするクラスは、ルート モジュールで定義する必要があります。
スクリプト モジュールの開発中は、コードに変更を加え、Import-Module パラメーターを指定した を使用して新しいバージョンのモジュールを読み込むのが一般的です。 これは、ルート モジュール内の関数に対する変更に対してのみ機能します。
Import-Module ネストされたモジュールは再読み込みされません。 また、更新されたクラスをロードする方法はありません。
最新バージョンを実行していることを確認するには、 Remove-Module コマンドレットを使用してモジュールをアンロードする必要があります。
Remove-Module ルート・モジュール、ネストされたすべてのモジュール、およびモジュールで定義されているすべてのクラスを削除します。 その後、 Import-Module と using module ステートメントを使用して、モジュールとクラスを再読み込みできます。
アセンブリ構文
.NET アセンブリから型をプリロードするには:
using assembly <.NET-assembly-path>
アセンブリを読み込むと、解析時にそのアセンブリの .NET 型がスクリプトに事前に読み込まれます。 これにより、事前に読み込まれたアセンブリの型を使用する新しい PowerShell クラスを作成できます。
新しい PowerShell クラスを作成しない場合は、代わりに Add-Type コマンドレットを使用します。 詳細については、「Add-Type」を参照してください。
例示
例 1 - 型名解決のための名前空間を追加する
次のスクリプトは、"Hello World" 文字列の暗号化ハッシュを取得します。
using namespace System.Text と using namespace System.IO によって、[UnicodeEncoding] と System.Text の [Stream] への参照と [MemoryStream] の System.IO への参照がどのように簡略化されているかに注目してください。
using namespace System.Text
using namespace System.IO
[string]$string = "Hello World"
## Valid values are "SHA1", "SHA256", "SHA384", "SHA512", "MD5"
[string]$algorithm = "SHA256"
[byte[]]$stringbytes = [UnicodeEncoding]::Unicode.GetBytes($string)
[Stream]$memorystream = [MemoryStream]::new($stringbytes)
$hashfromstream = Get-FileHash -InputStream $memorystream `
-Algorithm $algorithm
$hashfromstream.Hash.ToString()
例 2 - スクリプトモジュールからのクラスの読み込み
この例では、次のクラスを定義する CardGames という名前の PowerShell スクリプト モジュールがあります。
- カードゲーム.デッキ
- カードゲーム.カード
Import-Module および #requires ステートメントは、モジュールで定義されているモジュール関数、エイリアス、変数のみをインポートします。 クラスはインポートされません。
using module コマンドはモジュールをインポートし、クラス定義も読み込みます。
using module CardGames
using namespace CardGames
[Deck]$deck = [Deck]::new()
$deck.Shuffle()
[Card[]]$hand1 = $deck.Deal(5)
[Card[]]$hand2 = $deck.Deal(5)
[Card[]]$hand3 = $deck.Deal(5)
例 3 - アセンブリからのクラスの読み込み
この例では、アセンブリを読み込み、そのクラスを使用して新しい PowerShell クラスを作成できるようにします。 次のスクリプトは、 DirectoryContext クラスから派生した新しい PowerShell クラスを作成します。
using assembly 'C:\Program Files\PowerShell\7\System.DirectoryServices.dll'
using namespace System.DirectoryServices.ActiveDirectory
class myDirectoryClass : System.DirectoryServices.ActiveDirectory.DirectoryContext
{
[DirectoryContext]$domain
myDirectoryClass([DirectoryContextType]$ctx) : base($ctx)
{
$this.domain = [DirectoryContext]::new([DirectoryContextType]$ctx)
}
}
$myDomain = [myDirectoryClass]::new([DirectoryContextType]::Domain)
$myDomain
domain Name UserName ContextType
------ ---- -------- -----------
System.DirectoryServices.ActiveDirectory.DirectoryContext Domain