2016-09-30 12 views
2

関数のパラメータとしてPSSessionを正しくキャストする方法を理解できません。[PSSession]に関数のパラメータを宣言するためにキャストできないのはなぜですか?

アセンブリなどをロードする必要がありますか?私はPowershell v4を使用しています。

私は正しく使用するために私の関数のパラメータをキャストするのが好きです。

function Some-Remote-Task([PSSession] $Session, [String]$Target) { 
    # Do stuff... 
} 

しかし、私のパラメータをキャストしながら、私はこのエラーを取得する:私は何をしようとしていることである

Unable to find type [PSSession]. Make sure that the assembly that contains this type is loaded. 

また、有効なセッションに$mySession.GetType()を使用すると、次が得られます。

IsPublic IsSerial Name          BaseType                               
-------- -------- ----          --------                               
True  False PSSession        System.Object  

だから、それは正しいタイプの名前でなければならないようです...

すべてのヘルプはありがとうiated。

答えて

0

EDIT:

私が正しく[PSSession]を使用することができます。 biantistさんのコメントにリンクからの情報を組み合わせることにより

Type Accelerator

ここで別の答えでは:Simplify Your Script...

私はきちんと型アクセラレータを追加しました:

PS c:\> [PowerShell].Assembly.GetType("System.Management.Automation.TypeAccelerators")::add(“PSSession”,”System.Management.Automation.Runspaces.PSSession”) 

PS c:\> [PSSession] 

IsPublic IsSerial Name          BaseType 
-------- -------- ----          -------- 
True  False PSSession        System.Object 

でした。

最後にエイリアスを使用しました。きれいな外観を好む他の人のために掲示される。

New-Alias PSSession System.Management.Automation.Runspaces.PSSession 

-ErrorAction SilentlyContinueあなたは同じコードセグメントを再実行続ければ、テスト中に、それに追加するのに便利です。

+1

個人的に、私はこれを落胆させるでしょう。エイリアスはコマンド/関数/コマンドレットのため、コードでどのように機能しているかわかりません。あなたが探しているのは[タイプアクセラレータ](https://blogs.technet.microsoft.com/heyscriptingguy/2013/07/09/simplify-your-script-by-creating-powershell-type-accelerators/)です。 。 – briantist

+0

上記のコメントは編集前のものです。タイプアクセラレータが実装されました。 – Grallen

6

これを試してみてください:

function Some-Remote-Task([System.Management.Automation.Runspaces.PSSession]$Session, [String]$Target) { 
    # Do stuff... 
} 
+0

これは機能します。私はそれが最良の可能な答えかどうかわからないので、まだ受け入れていない。 – Grallen

+3

@Grallen 1)あなたはいつでもそれを受け入れて後で変更することができます。 2)これは正解です。私はあなたが '[PSSession]'だけをそのように使うことができることを知っている文脈はありません。 '$ mySession.GetType()。FullName'をチェックしてください。これは '$ mySession.GetType()。Namespace'と' $ mySession.GetType()。Name'の連結です。 – briantist

関連する問題