背景
我有一个powershell脚本:script1
,其中包含sourceDirectory
和两个目的地(称为dest1Directory
和dest2Directory
)。
sourceDirectory的结构如下:
\源\ DEST1 \ STUFF1
和
\源\ dest2 \ STUFF2
script1
调用另一个脚本:script2
,foreach
STUFF(例如,script2
可以运行10次),为script2
提供必要的目的地参数,创建所有内容“STUFF”的备份替换dest1Directory
和dest2Directory
,然后将所有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
返回未定义数量的这些对象,所以我不知所措。有人可以帮助我吗?
答案 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。
马特