如何使用powershell函数的结果影响此函数的行为?

时间:2014-05-05 15:41:32

标签: powershell

我有这种奇怪的观察,这对我来说没什么意义。

请检查以下简单的powershell脚本:

function f($x)
{
  Write-Host "Opening $x in the GUI" -ForegroundColor yellow
  cmd /c start devenv $x
  return $true
}
f "C:\Dayforce\SharpTop\DataSvc.sln"
f "C:\Dayforce\SharpTop\Main.sln"
echo "done"

运行它,立即触发两个devenv实例,脚本几乎立即退出。

现在我稍微修改一下:

function f($x)
{
  Write-Host "Opening $x in the GUI" -ForegroundColor yellow
  cmd /c start devenv $x
  return $true
}
$a = f "C:\Dayforce\SharpTop\DataSvc.sln"
$b = f "C:\Dayforce\SharpTop\Main.sln"
echo "done"

运行它会打开第一个devenv实例,但是,在关闭devenv实例之前,函数f永远不会存在。然后第二个devenv实例被触发,脚本永远不存在,直到我关闭第二个devenv实例。

行为完全不同。从异步中它变得完全同步。

发生了什么事?

1 个答案:

答案 0 :(得分:0)

当最后一个命令是外部命令并且结果没有被管道传输时,Powershell管道异步执行。

第一种情况会发生什么。

如果管道或使用结果作为变量赋值,则管道同步执行。

在第二种情况下会发生什么。