about_Using
簡単な説明
セッションで使用する名前空間を指定できます。
長い説明
using
ステートメントを使用すると、セッションで使用する名前空間を指定できます。
名前空間を追加すると、.NET クラスとメンバーの使用が簡略化され、スクリプト モジュールとアセンブリからクラスをインポートできます。
ステートメントは using
、スクリプトまたはモジュール内の他のステートメントの前に記述する必要があります。 パラメーターを含め、コメントされていないステートメントの前に記述することはできません。
ステートメントに using
変数を含めてはなりません。
ステートメントは using
、変数のスコープ修飾子と using:
同じではありません。 詳細については、「 about_Remote_Variables」を参照してください。
名前空間の構文
.NET 名前空間から型を解決するには:
using namespace <.NET-namespace>
名前空間を指定すると、短い名前で型を簡単に参照できます。
例 - 型名解決用の名前空間を追加する
次のスクリプトは、"Hello World" 文字列の暗号化ハッシュを取得します。
と の using namespace System.Text
および using namespace System.IO
への[UnicodeEncoding]
[Stream]
System.Text
[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)
$getFileHashSplat = @{
InputStream = $memoryStream
Algorithm = $algorithm
}
$hashFromStream = Get-FileHash @getFileHashSplat
$hashFromStream.Hash.ToString()
モジュール構文
PowerShell モジュールからクラスと列挙型を読み込むには、
using module <module-name>
の <module-name>
値には、モジュール名、完全なモジュール仕様、またはモジュール ファイルへのパスを指定できます。
がパスの場合 <module-name>
、パスは完全修飾または相対パスにすることができます。 相対パスは、 ステートメントを含むスクリプトに対する相対パスを using
解決します。
が名前またはモジュールの仕様である場合 <module-name>
、PowerShell は PSModulePath で指定されたモジュールを検索します。
モジュール仕様は、次のキーを持つハッシュテーブルです。
ModuleName
- 必須 モジュール名を指定します。GUID
- オプション モジュールの GUID を指定します。- また、以下の 3 つのキーのうち少なくとも 1 つを指定する 必要 もあります。
ModuleVersion
- モジュールの最小許容バージョンを指定します。MaximumVersion
- モジュールの許容される最大バージョンを指定します。RequiredVersion
- モジュールの正確で必要なバージョンを指定します。 これは、他のバージョン キーでは使用できません。
Import-Module
ステートメントは、 #requires
モジュールによって定義されているように、モジュール関数、エイリアス、および変数のみをインポートします。 クラスと列挙型はインポートされません。
ステートメントは using module
、スクリプト モジュールまたはバイナリ モジュールのルート モジュール (ModuleToProcess
) からクラスと列挙型をインポートします。 入れ子になったモジュールまたはルート モジュールにドットソース化されたスクリプトで定義されたクラスまたは列挙体は、一貫してインポートされません。 モジュールの外部のユーザーがルート モジュール内で直接使用できるようにするクラスと列挙型を定義します。
スクリプト モジュールの開発中は、コードを変更してから、Force パラメーターを使用して新しいバージョンのモジュールをImport-Module
読み込むのが一般的です。 これは、ルート モジュール内の関数に対する変更に対してのみ機能します。 Import-Module
では、入れ子になったモジュールは再読み込みされません。 また、更新されたクラスまたは列挙型を読み込む方法はありません。
最新バージョンを確実に実行するには、新しいセッションを開始する必要があります。
PowerShell で定義され、 ステートメントを使用して using
インポートされたクラスと列挙はアンロードできません。
例 - スクリプト モジュールからクラスを読み込む
この例では、 CardGames という名前の PowerShell スクリプト モジュールによって、次のクラスが定義されています。
- デッキ
- カード
Import-Module
ステートメントは、 #requires
モジュールによって定義されているように、モジュール関数、エイリアス、および変数のみをインポートします。 クラスはインポートされません。 コマンドは using module
モジュールをインポートし、クラス定義も読み込みます。
using module CardGames
[Deck]$deck = [Deck]::new()
$deck.Shuffle()
[Card[]]$hand1 = $deck.Deal(5)
[Card[]]$hand2 = $deck.Deal(5)
[Card[]]$hand3 = $deck.Deal(5)
アセンブリ構文
次の構文は、実行の開始時にアセンブリからスクリプトに .NET 型を読み込みます。 アセンブリ ファイルへの完全修飾パスを使用する必要があります。
using assembly <.NET-assembly-path>
ステートメントは using assembly
、 コマンドレットの使用に Add-Type
似ています。
ただし、コマンドレットは Add-Type
、スクリプトの Add-Type
実行の開始時ではなく、実行時に型を追加します。 詳細については、「 Add-Type」を参照してください。
例 - アセンブリから型を読み込む
この例では、データの処理時にそのクラスを使用できるようにアセンブリを読み込みます。 次のスクリプトは、データを YAML 形式に変換します。
using assembly './YamlDotNet.dll'
using namespace YamlDotNet
$yamlSerializer = [Serialization.Serializer]::new()
$info = [ordered]@{
Inventory = @(
@{ Name = 'Apples' ; Count = 1234 }
@{ Name = 'Bagels' ; Count = 5678 }
)
CheckedAt = [datetime]'2023-01-01T01:01:01'
}
$yamlSerializer.Serialize($info)
Inventory:
- Name: Apples
Count: 1234
- Name: Bagels
Count: 5678
CheckedAt: 2023-01-01T01:01:01.0000000