Как использовать строковое значение в foreach? - PullRequest
1 голос
/ 04 марта 2011

Как использовать строковое значение в foreach?

Следующие работы.

$printString='$_.name+","+$_.name'
Get-ChildItem|foreach {$_.name+','+$_.name}

Но следующее не работает

Get-ChildItem|foreach {$printString}

Но мне нужно, чтобы это работало: поскольку у меня есть задача распечатать каждый столбец в таблице, я могу использовать словарь таблицы, чтобы получить все столбцы, поэтому все являются динамическими, а затем, когда я пытаюсь распечатать результат, я также используйте строку как выше, чтобы напечатать результат. Любое решение

Ответы [ 4 ]

5 голосов
/ 04 марта 2011

Есть несколько решений. Вот некоторые из них, которые попали мне в середину:

$printString='$($_.name),$($_.name)'
Get-ChildItem | % { $ExecutionContext.InvokeCommand.ExpandString($printString) }

$formatString='{0},{0}'
Get-ChildItem | % { $formatString -f $_.Name }

$s = {param($file) $file.Name + "," + $file.Name }
Get-ChildItem | % { & $s $_ }

Первый расширяет строку, и это, вероятно, то, что вы хотели. Обратите внимание, что составные переменные должны быть заключены в $(..). Второй просто форматирует некоторый ввод. Третий использует скрипт-блок, там вы можете создать любую строку, какую захотите (самая мощная)

2 голосов
/ 04 марта 2011

Другое возможное решение:

$printString='$_.name+","+$_.name'
Get-ChildItem|foreach { Invoke-Expression $printString }
2 голосов
/ 04 марта 2011

Одно из возможных решений:

 $printString={$_.name+","+$_.name}
 Get-ChildItem |foreach {.$printString}
0 голосов
/ 05 марта 2011

Интересная возможность:

dir | select @{Name='Name'; Expression={$_.Name, $_.Name}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...