Вопрос о поведении при импорте / расширении строки Powershell CSV - PullRequest
1 голос
/ 16 июня 2020

Я все еще зеленый в PowerShell - я хотел понять, предполагается ли следующее поведение, или ошибка, или параметр, который я включил по ошибке (происходит в PS 5.1 и 7):

  1. Создайте CSV с именем c: \ temp \ users.csv со следующими строками:
First,Last,Username
Bob,Smith,rsmith
Liz,Taylor,ltaylor
Запустите следующую Powershell:
$users = import-csv c:\temp\users.csv

## this line works as I'd expect, pulling a column value from CSV:
foreach ($user in $users) { write-host Username is: $user.Username }
## output:
# Username is: rsmith
# Username is: etaylor

## but it behaves differently if the value touches other text, it expands to the full row array:
foreach ($user in $users) { write-host User path is: \\server\users\$user.Username }
## output:
# User path is: \\server\users\@{FirstName=Bob; LastName=Smith; Username=rsmith}.Username
# User path is: \\server\users\@{FirstName=Liz; LastName=Taylor; Username=etaylor}.Username

## and I figured out a work around:
foreach ($user in $users) { write-host User path is: ("\\server\users\",$user.Username -join "") }
## output:
# User path is: \\server\users\rsmith
# User path is: \\server\users\etaylor

Я сделал здесь Write-Host только для демонстрации, но я мог бы использовать этот тип поведения для передачи вычисленного значения свойства функции et c. Я знаю, что делать -join - не конец света, но это расширение строки до массива нормальным поведением в этих условиях, или я что-то упускаю? Также, если есть более короткий синтаксис для объединения в строку, поделитесь.

Спасибо / извините за такой вопрос!

1 Ответ

1 голос
/ 16 июня 2020

Используйте оператор подвыражения $() внутри строки, иначе PowerShell может не знать, хотите ли вы распечатать всю переменную $ user и строку .Username или свойство Username объекта $ user. Кроме того, я предлагаю начать использовать Write-Information вместо Write-Host. В любом случае это должно работать: write-host "User path is: \\server\users\$($user.Username)"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...