Powershell:从其他PS脚本中调用的Powershell脚本获取返回结果

时间:2011-08-08 20:59:50

标签: visual-studio-2010 powershell return-value

背景 我有一个powershell脚本:script1,其中包含sourceDirectory和两个目的地(称为dest1Directorydest2Directory)。

sourceDirectory的结构如下:

  

\源\ DEST1 \ STUFF1

  

\源\ dest2 \ STUFF2

script1调用另一个脚本:script2foreach STUFF(例如,script2可以运行10次),为script2提供必要的目的地参数,创建所有内容“STUFF”的备份替换dest1Directorydest2Directory,然后将所有STUFF复制到相应的目标。

Script1

foreach ($folder in $STUFF1)
{           
& $script2 -stuffParameter $folder -destDrive $dest1Directory -backUpDrive $BackUpDirectory
}

我遇到的问题是:

我正在从Visual Studio网站调用script1,并希望script2输出它创建的所有备份目录路径,以便稍后引用它们。我在script2内部尝试了这个:

$returnRollBackObj = New-Object Object
Add-Member -memberType NoteProperty -name "RollBackLocation" -value $folderobj -inputObject $returnRollBackObj
return $returnRollBackObj

但它似乎没有返回对象,因为它们是下标调用。我不知道如何从script1返回未定义数量的这些对象,所以我不知所措。有人可以帮助我吗?

2 个答案:

答案 0 :(得分:11)

Powershell中返回任何未捕获的输出。

类似

return $returnRollBackObj

相当于

$returnRollBackObj
return

因此,由于script2正在返回这些对象,只要这些对象没有在script1中捕获,它们也将由script1返回。所以你不必做任何关于“返回未定义数量的对象”的事情

首先尝试从控制台运行脚本,看看是否达到了预期的行为。

答案 1 :(得分:2)

您的IIS设置如何?

只是想一想,如果你进行了eimpersonation,那么由于双跃点问题,它可能无法访问第二个脚本的位置。

其他可能有用的功能是成绩单功能。在yu脚本/代码的顶部添加一个start-transcript,你将获得所有内容,命令和输出的转储(包括错误和警告)。

修改:

刚刚意识到你没有将脚本2中返回的值分配给script1中的aaything。

你可能需要这样的东西:

$ ret =& $ script2 ...

用$ ret做点什么......

或者把它放在一个数组中 $ ret = @()

For loop ...

$ temp =& $ script2 ... $ ret = $ ret + $ temp

然后在for循环后返回$ ret。

马特