Форматируйте каждую строку вывода команды в powershell

#powershell

#powershell

Вопрос:

Как я могу отформатировать каждую строку вывода Get-ChildItem? Например, я хотел бы окружить ее своими собственными строками, чтобы получить следующий вывод (обычный — без таблиц или чего-либо еще) :

 My string: C:File.txt my string2
My string: C:Program Files my string2
My string: C:Windows my string2
  

Следующее не работает:

 Get-ChildItem | Write-Host "My string "   $_   " my string2"
  

Ответ №1:

Вам нужно ForEach-Object здесь:

 Get-ChildItem | ForEach-Object { Write-Host My string $_.FullName my string2 }
  

в противном случае нет $_ . Как правило, $_ существует только в блоках сценариев, а не непосредственно в конвейере. Также Write-Host работает с несколькими аргументами, и вы не можете объединять строки в командном режиме, поэтому вам нужно либо добавить круглые скобки, чтобы получить один аргумент в режиме выражения, либо опустить кавычки и (как я сделал здесь).

Короче:

 gci | % { "My string $($_.FullName) my string2" }
  

(используя псевдонимы, интерполяцию строковых переменных и тот факт, что строки просто выпадают из конвейера на хост)