PowerShell присваивает вывод сценария PS1 переменной - PullRequest
2 голосов
/ 24 октября 2011

Позвольте мне начать с того, что я новичок в powershell и программировании в этом отношении.У меня есть сценарий powershell, который принимает некоторые аргументы и выводит значение.Результатом сценария будет что-то вроде 9/10, где 9 будет числом, активным из общего количества узлов.Я хочу назначить вывод переменной, чтобы затем вызвать другой скрипт на основе значения.

Это то, что я пробовал, но это не работает:

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

Я также попробовал следующее, которое, кажется, присваивает переменной пустую строку

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

В обоих случаях они запускаются и сразу дают мне значение, а не присваивают его переменной.Когда я вызываю переменную, я не получаю данных.

Ответы [ 3 ]

4 голосов
/ 25 октября 2011

Я бы принял объектно-ориентированную природу PowerShell и вместо вывода строки, подобной «9/10», создал бы объект со свойствами, такими как NumActiveNodes и TotalNodes, например, в выводе вашего скрипта, например:

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

Конечно, подставьте в динамические значения num активных и итоговых узлов.Обратите внимание, что незафиксированные объекты автоматически появятся на выходе вашего скрипта.Затем, если это только вывод ваших скриптов, вы можете сделать это:

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

Это сделает его более приятным для тех, кто потребляет вывод вашего скрипта.На самом деле вывод несколько самодокументируется, например:

C:\PS> .\MyScript.ps1

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

PS Когда StackOverflow начал так плохо сосать при форматировании сценария PowerShell?

3 голосов
/ 24 октября 2011

Если вы не хотите изменять сценарий (и при условии, что сценарий написал только $avail_count/$total_count строку), вы можете сделать:

$var= powershell .\MyScript.ps1

Или просто бросьте write-host и получите только $avail_count/$total_count

и затем сделайте:

$var = .\MyScript.ps1
0 голосов
/ 29 апреля 2015

вы могли бы просто сделать $global:foobar в вашем скрипте, и оно сохранится после закрытия скрипта

...