2

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

有谁知道为什么?和/或有解决方法?

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

一旦传递到 start-job,所有脚本属性都会消失,而注释属性工作得很好。

下面在 start-job 之外执行

$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

查看我前段时间回答的自定义 PowerShell 主机和将 PSObject 转换回基本类型。这是同样的情况。

于 2011-07-14T05:07:43.400 回答