次の方法で共有


about_Using

簡単な説明

セッションで使用する名前空間を指定できます。

詳細な説明

using ステートメントを使用すると、セッションで使用する名前空間を指定できます。 名前空間を追加すると、.NET クラスとメンバーの使用が簡略化され、スクリプト モジュールやアセンブリからクラスをインポートできます。

usingステートメントは、スクリプトまたはモジュール内の他のステートメントの前に記述する必要があります。 パラメーターを含め、コメントされていないステートメントの前に記述することはできません。

using ステートメントには変数を含めてはなりません。

using ステートメントは、変数のusing:スコープ修飾子と同じではありません。 詳細については、「 about_Remote_Variables」を参照してください。

名前空間の構文

.NET 名前空間から型を解決するには:

using namespace <.NET-namespace>

名前空間を指定すると、短い名前で型を簡単に参照できます。

例 - 型名解決用の名前空間を追加する

次のスクリプトは、"Hello World" 文字列の暗号化ハッシュを取得します。

using namespace System.Textusing namespace System.IOによって、System.IOSystem.Text[Stream][MemoryStream][UnicodeEncoding]への参照がどのように簡略化されるかに注意してください。

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 つを指定Required です。
    • 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