将pscustomobject传递给start-job脚本块时,为什么脚本属性会丢失?

时间:2011-07-14 02:13:19

标签: powershell start-job pscustomobject

在Windows XP x64(我假设win2k3)powershell 2.0上,将pscustomobjects的arraylist传递给start-job作为argumentlist参数传递对象,但是scriptproperties只是从对象中消失(由get-member确认)。注意pscustomobject的属性确实返回正常

任何人都知道为什么?和/或有解决方案来解决问题?

$ dbs是具有各种noteproperties和scriptproperties的pscustomobjects的arraylist。

所有脚本属性一旦传入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();                                                                                     

...
while

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

2 个答案:

答案 0 :(得分:1)

后台作业使用远程处理。远程处理将对象序列化,然后将它们发送到目标运行空间,在那里对它们进行反序列化。对象序列化时,对象方法不包含在序列化对象中。

答案 1 :(得分:1)

看看Custom PowerShell Host and Converting PSObject back to base type我前一段时间的回答。情况也是如此。