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)
在这两种情况下,它们都会运行并立即给我值,而不是将其分配给变量。当我调用变量时,我没有得到任何数据。
我会接受 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 脚本方面如此糟糕?
如果您不想更改脚本(并假设脚本只$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)