powershell将ps1脚本的输出分配给变量

时间:2011-10-24 19:01:56

标签: variables scripting powershell

让我先说一下,我对powershell和编程很新。我有一个powershell脚本,它接受一些参数并输出一个值。 脚本的结果将类似于9/10,其中9将是节点总数中的活动数。我想将输出分配给变量,以便我可以根据值调用另一个脚本。

这是我尝试过的,但它不起作用:

$active = (./MyScript.ps1 lb uid **** site)  

我也试过以下似乎将变量赋给空字符串

$active = (./MyScript.ps1 lb uid **** site | out-string)

在这两种情况下,他们都会立即运行并给我值,而不是将其分配给变量。当我调用变量时,我没有数据。

3 个答案:

答案 0 :(得分:4)

我会接受PowerShell的面向对象的本质,而不是输出像“9/10”这样的字符串,创建一个具有NumActiveNodes和TotalNodes等属性的对象,例如在您的脚本输出中如下:

new-object psobject -Property @{NumActiveNodes = 9; TotalNodes = 10}

当然,在num active和total节点的动态值中替换。请注意,未捕获的对象将自动出现在脚本的输出中。然后,如果这只是您的脚本输出,您可以这样做:

$obj = .\MyScript.ps1
$obj.NumActiveNodes
9
$obj.TotalNodes
10

对于那些使用脚本输出的人来说,它会更好。事实上,输出有点自我记录,例如:

C:\PS> .\MyScript.ps1

NumActiveNodes        TotalNodes
--------------        ----------
             9        10

P.S。什么时候StackOverflow在格式化PowerShell脚本时开始如此糟糕?

答案 1 :(得分:3)

如果您不想更改脚本(假设脚本只写了$avail_count/$total_count行),您可以这样做:

$var= powershell .\MyScript.ps1

或者只是删除write-host并且只有$avail_count/$total_count

然后执行:

$var = .\MyScript.ps1

答案 2 :(得分:0)

我知道,这个问题有点老了,但它可能会帮助某人找到正确的答案。

在用另一个PS脚本执行PS脚本并将输出保存到变量中时,我遇到了类似的问题,这是2个非常好的答案:

  1. Mathias
  2. mklement0

希望有帮助!

如果可以的话,请对其进行投票,因为它们确实很棒!