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

ddj*_*min 3 variables powershell scripting

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

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

$active = (./MyScript.ps1 lb uid **** site)  
Run Code Online (Sandbox Code Playgroud)

我还尝试了以下似乎将变量分配给空字符串的方法

$active = (./MyScript.ps1 lb uid **** site | out-string)
Run Code Online (Sandbox Code Playgroud)

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

Kei*_*ill 6

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

new-object psobject -Property @{NumActiveNodes = 9; TotalNodes = 10}
Run Code Online (Sandbox Code Playgroud)

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

$obj = .\MyScript.ps1
$obj.NumActiveNodes
9
$obj.TotalNodes
10
Run Code Online (Sandbox Code Playgroud)

对于那些使用脚本输出的人来说,它会更好。事实上,输出在某种程度上是自我记录的,例如:

C:\PS> .\MyScript.ps1

NumActiveNodes        TotalNodes
--------------        ----------
             9        10
Run Code Online (Sandbox Code Playgroud)

PS StackOverflow 什么时候开始在格式化 PowerShell 脚本方面如此糟糕?


man*_*lds 5

如果您不想更改脚本(并假设脚本只$avail_count/$total_count编写了该行),您可以执行以下操作:

$var= powershell .\MyScript.ps1
Run Code Online (Sandbox Code Playgroud)

或者只是放下write-host并刚刚$avail_count/$total_count

然后做:

$var = .\MyScript.ps1
Run Code Online (Sandbox Code Playgroud)