about_Using

簡単な説明

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

長い説明

この 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 つのキーのうち少なくとも 1 つを指定する 必要 もあります。
    • ModuleVersion - モジュールの最小許容バージョンを指定します。
    • MaximumVersion - モジュールの許容される最大バージョンを指定します。
    • RequiredVersion - モジュールの正確で必要なバージョンを指定します。 これは、他のバージョン キーでは使用できません。

このステートメントは using module 、スクリプト モジュールまたはバイナリ モジュールのルート モジュール (ModuleToProcess) からクラスをインポートします。 入れ子になったモジュールで定義されたクラスや、ドット ソースのスクリプトで定義されているクラスは、モジュールに一貫してインポートされません。 モジュールの外部のユーザーが使用できるようにするクラスは、ルート モジュールで定義する必要があります。

スクリプト モジュールの開発中は、コードに変更を加え、Force パラメーターを使用して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" 文字列の暗号化ハッシュを取得します。

in および using namespace System.IO in への参照[Stream]System.Text[UnicodeEncoding]を簡略化する方法using namespace 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)
$hashfromstream = Get-FileHash -InputStream $memorystream `
  -Algorithm $algorithm
$hashfromstream.Hash.ToString()

例 2 - スクリプト モジュールからクラスを読み込む

この例では、次のクラスを定義する CardGames という名前の PowerShell スクリプト モジュールがあります。

  • CardGames.Deck
  • CardGames.Card

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