2015-05-21 2 views
0

Мне нужна печать на Powershell строка с переменной переменной, которую я назвал $ em_result, например, em_result = 20, Спасибо.Печать переменной на Powershell

$em_result = ´gc C:\Users\mtmachadost\Desktop\Test\logError.txt | ?{$_ -match 'cajica11'} | %{($_ -split "\s+")[3]} | Measure -Sum | Select -Exp Sum'´ 
Write-Host"$em_result" 
+0

f Вы просто запустите команду 'gc C: \ Users \ mtmachadost \ Desktop \ Test \ logError.txt | ? {$ _ -match 'cajica11'} | % {($ _ -split "\ s +") [3]} | Измерение -Sum | Выберите -Exp Sum'' делает что-нибудь? Если нет, то $ em_result ничего не будет иметь, и вам нужно изменить вопрос, чтобы отразить, что вам нужна помощь с командой –

+0

да, результатом является число, например 58, но мне нужно сохранить комманду строки, в varible и напечатать результат переменной через em_result em_result = 58 –

ответ

0

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

$em_result = [string]"gc C:\Users\mtmachadost\Desktop\Test\logError.txt | ?{`$_ -match 'cajica11'} | %{(`$_ -split `"\s+`")[3]} | Measure -Sum | Select -Exp Sum'" 
1

Хотя я не уверен, мотивации для того, что вы пытаетесь сделать это звучит, как вы пытаетесь сохранить команду $em_result, так что вы можете работать, когда вы хотите. Таким образом, вы не сохраняете результат во времени, но каждый раз, когда вы его называете, результат будет с этого момента.

Как Tony Hinkle ответил, что вам нужно сохранить команду в виде строки. Однако есть больше, чем просто кавычки. Переменная трубопровода $_ также вступила в игру. Поскольку это простое here-string, это сделает так, что вам не нужно беспокоиться о том, чтобы что-либо избежать.

$em_result = @' 
gc 'C:\Users\mtmachadost\Desktop\Test\logError.txt' | ?{$_ -match 'cajica11'} | %{($_ -split "\s+")[3]} | Measure -Sum | Select -Exp Sum 
'@ 

Теперь вы могли бы назвать эту строку и получить результаты

Write-Host "`$em_result = $(Invoke-Expression $em_result)" 

Я предполагаю, что вы пытаетесь использовать пару, как одиночную обратную кавычку и избежать котировок пары, которые заставили меня думать, что это то, что вы хотели. Backtick выйдет только из следующего символа. Invoke-Expression выполнит строку, которую мы передаем ей как код.

+0

Спасибо - я добавляю escape-коды в $ в свой ответ - просто не прошел через это достаточно близко. –

2

Если вы хотите сохранить командную строку в переменной, я бы рекомендовал, чтобы сохранить его как ScriptBlock, а также String:

$em_result = {gc C:\Users\mtmachadost\Desktop\Test\logError.txt | ?{$_ -match 'cajica11'} | %{($_ -split "\s+")[3]} | Measure -Sum | Select -Exp Sum'} 
Write-Host "`$em_result = $(&$em_result)" 

Таким образом, вы:

  1. не избежать вещи.
  2. может преобразовать его в строку.
  3. может вызывать его оператором вызова (& или .).
  4. имеют подсветку синтаксиса при редактировании в ISE.
  5. любые синтаксические ошибки попадают при анализе, а не при его выполнении.
  6. ScriptBlock связан с его файлом и строкой, поэтому вы можете установить в нем контрольные точки.
+0

Да. Это будет предпочтительнее использования строки. Забыл об этом. – Matt

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