2011-10-24 2 views
2

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

Это то, что я пытался, но он не работает:

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

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

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

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

+1

Показать код сценария, помните, что Powershell trows объекты в любом заявлении, за исключением назначений и приращений, так, чтобы быть в состоянии помочь вам мы (сообщество) должны видеть, что вы забрасываете – mjsr

+1

Я предполагаю, что вы используете Write-Host в скрипте. – EBGreen

+0

Я наткнулся на другой пост, который, кажется, джайвит с комментарием voodoomsr. Я возьму сценарий и опубликую его. EBGreen Вы также верны, что результат сгенерирован этой строкой в ​​скрипте Write-Host «$ avail_count/$ total_count» – ddjammin

ответ

3

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

$var= powershell .\MyScript.ps1 

Или просто перенесите write-host и имеют только $avail_count/$total_count

, а затем сделать:

$var = .\MyScript.ps1 
3

Я обнимал объектно-ориентированный характер 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 

P.S. Когда StackOverflow начал настолько сосать при форматировании скрипта PowerShell?

+0

Это действительно хорошая мысль. Это не мой сценарий. Он был написан продавцом в неофициальном качестве. Сейчас я делаю небольшие корректировки в соответствии с моими потребностями. Скорее всего, эти изменения будут меняться, когда я лучше познакомлюсь с powershell. – ddjammin

0

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

Смежные вопросы