2011-07-14 2 views
1

Windows XP x64(と私はwin2k3と仮定します)powershell 2.0では、pscustomobjectsのarraylistをstart-jobにargumentlistパラメータとして渡すとオブジェクトが渡されますが、scriptpropertiesはオブジェクトから消えます(get-memberによって確認されます)。 pscustomobjectのプロパティは正常に戻ります。pscustomobjectを開始ジョブスクリプトブロックに渡すときにスクリプトプロパティが失われるのはなぜですか?

誰にも分かりますか?および/または回避策のための解決策がありますか?

$ dbsは、さまざまなnotepropertiesとscriptpropertiesを持つpscustomobjectsのarraylistです。

すべてのスクリプトプロパティは開始ジョブに渡されると消えますが、ノートプロパティは正常に機能します。立ち仕事の外で実行

$dbs | get-member 

戻り

ConnectionString NoteProperty System.String ConnectionString=server=... 
DbType   NoteProperty System.String DbType=Staging                     
CreateBackup  ScriptMethod System.Object CreateBackup();                     
GetBackup  ScriptMethod System.Object GetBackup();                      

以下

...

start-job -name $server -argumentlist $dbs,$server -scriptblock { 
    param($dbs, $server) 
$dbs | get-member 
} 
ながら、

戻り

bool Equals(System.Object obj) 
int GetHashCode() 
type GetType() 
string ToString() 
System.String ConnectionString=server=... 
System.String DbType=Staging 

答えて

1

を見てくださいCustom PowerShell Host and Converting PSObject back to base type私はしばらく前に答えました。それは同じ場合です。

+0

ありがとう、私はそれがシンプルにPSリモーティングを使用していて、シリアライゼーションの表示として平坦化されたプロパティの存在を確認していたはずです。そのオブジェクト上のユーティリティメソッドが与えられたときには、それを使用するためにスクリプトブロックに複製する必要があります。ありがとう! – JorgeSandoval

1

バックグラウンドジョブがRemotingを使用しています。 Remotingはオブジェクトをシリアライズし、ターゲットラン空間に送ります。ターゲットラン空間では、デシリアライズされます。オブジェクトがシリアライズされるとき、オブジェクトメソッドはシリアライズされたオブジェクトに含まれません。

関連する問題