2

Windows XP x64 (および win2k3 を想定) powershell 2.0 では、pscustomobjects の arraylist を start-job に引数リスト パラメータとして渡すと、オブジェクトが渡されますが、scriptproperties はオブジェクトから消えます (get-member で確認)。pscustomobject のプロパティは問題なく返されることに注意してください

理由を知っている人はいますか?および/または回避策がありますか?

$dbs は、さまざまな note プロパティと script プロパティを持つ pscustomobjects の配列リストです。

すべてのスクリプト プロパティは、start-job に渡されると消えますが、note プロパティは正常に機能します。

以下、開始ジョブ外で実行

$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
4

2 に答える 2

1

バックグラウンドジョブはリモーティングを使用します。リモーティングは、オブジェクトをシリアル化してから、ターゲットの実行スペースに送信し、そこで逆シリアル化されます。オブジェクトがシリアル化される場合、オブジェクトメソッドはシリアル化されたオブジェクトに含まれません。

于 2011-07-14T02:29:45.043 に答える
1

Custom PowerShell Host と Converting PSObject back to base typeを見てください。以前に回答しました。同じケースです。

于 2011-07-14T05:07:43.400 に答える