qshinoの日記

Powershell関係と徒然なこと

ロード済みアセンブリ取得方法

Powershellでクオータが不足しいています、と表示され犯人探し中。

 

Powershellでは、一度ロードしたアセンブリの解放はコンソールが終了する時らしいので、重複ロードされている可能性があり、その調査用。

 

まずはアセンブリの重複ロードを疑う。そのため、ロード済みアセンブリの取得方法を確認。

 

* ロード済みアセンブリ取得方法

[System.AppDomain]::CurrentDomain.GetAssemblies()

 

このままだと、表示が多いので名前だけ取得する。

[System.AppDomain]::CurrentDomain.GetAssemblies() | % { $_.GetName().name }

 

ある名前のアセンブリのロード済み確認なら、

 

Function check_asm ($asm){

  [System.AppDomain]::CurrentDomain.GetAssemblies() | ? { $_.Getname().name -eq $asm }

}

 

呼び出し例

 

$sagasu = "System.Security"

if ( check_asm($sagasu) ) {

  write-host "$sagasu が見つかった"

} else {

  write-host "$sagasu なかった"

}

 

* 複数を探したいなら

Function check_asms ($asms){
[System.AppDomain]::CurrentDomain.GetAssemblies() | % { if ($asms.contains( $_.Getname().name )){ $_ } } 
}

 

* 呼び出し例

見つかった物を$attaに格納してから表示。


$sagasu = "System.Security", "System.CSharp"


$atta = check_asms($sagasu)

if ( $atta ) {
  write-host "$atta が見つかった"
} else {
  write-host "$sagasu 一つも なかった"
}

 

既にロードされていたら、ロードする判断に使えば重複ロードが無くなる。