2017-08-23 1 views
0

ここで間違っていますか?PowerShell v5ではクラスファイルと継承が個別にサポートされていませんか?PowerShellクラスインポートモジュールを使用して別ファイルからの継承

foo.ps1:

class foo 
{ 
    [STRING] $test = 'Hello World'; 

    [STRING] PrintTest() 
    { 
     return $this.test; 
    } 
} 

がbar.ps1:

Import-Module "$PSScriptRoot\foo.ps1" 

class bar : foo 
{ } 

CONSOLE

PS C:\Script> Import-Module ./bar.ps1; 

PS C:\Script> $myBar = New-Object bar; 

PS C:\Script> $myBar.PrintTest(); 

Method invocation failed because [bar] does not contain a method named 'PrintTest'. 

それが働く同じファイル内にfooとbarのクラスを置く場合良い。しかし、私が構築しているクラスはかなり大きく、それらを分けたいと思っています。

+0

エラーが発生しましたか?私はあなたがクリーンなPowerShellセッションからそれを行うなら、 'Import-Module。/ bar.ps1'上で' ParseError'を期待します。 – PetSerAl

+0

まあ、bar.ps1はエラーなしでロードされます。問題なくバーオブジェクトを作成します。 – Vidarious

+0

クラスはモジュールでエクスポートされません。下の私の答えを見てください。 –

答えて

2

まず、モジュールファイルの拡張子は.psm1で、変更する必要があります。このように名前を付けないと、私が下で参照したUsingの文はエラーを表示します。

bar.psm1には、modules do not import classesが含まれているため、モジュールへの参照が含まれている必要があります。

bar.psm1:

Using module ".\foo.psm1" 

class bar : foo 
{ } 
しかし

一度これを行うあなたがトップUsing module ".\bar.psm1"で述べた別のPS1のファイルを記述する必要がありますでしょうので、バークラスがエクスポートされていないこと、スクリプトファイル内のあなた[bar]クラスを呼び出すことができます。

+0

それはうまくいった!ありがとうございました。私は何かが簡単でないことを知っています。 – Vidarious

関連する問題