Я все еще зеленый в PowerShell - я хотел понять, предполагается ли следующее поведение, или ошибка, или параметр, который я включил по ошибке (происходит в PS 5.1 и 7):
- Создайте 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 - не конец света, но это расширение строки до массива нормальным поведением в этих условиях, или я что-то упускаю? Также, если есть более короткий синтаксис для объединения в строку, поделитесь.
Спасибо / извините за такой вопрос!