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つのキーのいずれかを指定する 必要 もあります。 これらのキーを一緒に使用することはできません。
    • ModuleVersion -モジュールの許容される最小バージョンを指定します。
    • RequiredVersion -モジュールの正確な必須バージョンを指定します。
    • MaximumVersion -モジュールの許容される最大バージョンを指定します。

ステートメントは、 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 - typename 解決用の名前空間を追加する

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

と が および using namespace System.Textusing 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 スクリプト モジュールがあります。

  • 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