Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables powershell将ps1脚本的输出分配给变量_Variables_Scripting_Powershell - Fatal编程技术网

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

Variables powershell将ps1脚本的输出分配给变量,variables,scripting,powershell,Variables,Scripting,Powershell,首先,我对powershell和编程非常陌生。我有一个powershell脚本,它接受一些参数并输出一个值。 脚本的结果将类似于9/10,其中9将是节点总数中的活动数量。我想将输出分配给一个变量,这样我就可以根据该值调用另一个脚本 这是我尝试过的,但不起作用: $active = (./MyScript.ps1 lb uid **** site) 我还尝试了以下方法,它似乎为变量分配了一个空字符串 $active = (./MyScript.ps1 lb uid **** site | o

首先,我对powershell和编程非常陌生。我有一个powershell脚本,它接受一些参数并输出一个值。 脚本的结果将类似于9/10,其中9将是节点总数中的活动数量。我想将输出分配给一个变量,这样我就可以根据该值调用另一个脚本

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

$active = (./MyScript.ps1 lb uid **** site)  
我还尝试了以下方法,它似乎为变量分配了一个空字符串

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

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

如果您不想更改脚本(并且假设脚本只写了
$avail\u count/$total\u count
行),可以执行以下操作:

$var= powershell .\MyScript.ps1
或者只需放下
写入主机
,只需
$avail\u count/$total\u count

然后做:

$var = .\MyScript.ps1

我将采用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

另外,StackOverflow什么时候开始在格式化PowerShell脚本时表现得如此糟糕?

您可以在脚本中执行一个
$global:foobar
,它将在脚本关闭后继续存在

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

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

  • 希望有帮助


    如果是,请投票给他们,因为他们真的很好

    显示脚本代码,请记住,Powershell会在任何语句中拖动对象(赋值和增量除外),因此为了能够帮助您,我们(社区)需要查看您正在拖动的内容。我猜您在脚本中使用的是Write Host。我偶然发现另一篇文章似乎与巫术师的评论有冲突。我会抓起脚本并发布它。EBGreen您也正确。输出是由脚本写入主机“$avail\u count/$total\u count”中的这一行生成的。我根据您的两条注释找到了解决方案。脚本正在使用写主机。在做了一些搜索之后,我找到了这个链接。本质上,如果您使用Write Host,它只会将其写入控制台,您将无法对其进行操作。如果您需要能够对它返回的数据执行任何操作,您应该使用Write-Output。谢谢你的帮助这真是个好主意。实际上这不是我的剧本。它是由供应商以非官方身份编写的。我现在一直在做一些小的调整以适应我的需要。随着我对powershell的进一步了解,我可能会做出这些更改。