Powershell CSV导入/行扩展行为问题

Powershell CSV导入/行扩展行为问题,powershell,Powershell,我在PowerShell上仍然是新手-我想了解以下行为是故意的,还是错误的,或者是我错误打开的设置(发生在PS 5.1和7中): 创建一个名为c:\temp\users.CSV的CSV,包含以下行: 运行以下Powershell: 我在这里编写主机只是为了展示,但我可能会使用这种类型的行为将计算出的属性值传递给函数等。我知道进行-连接不是世界末日,但在这些条件下,将行扩展到数组是正常行为,还是我遗漏了什么?此外,如果有一个较短的语法组合内联,请分享 谢谢/抱歉提出这样的问题 在字符串中使用子表达

我在PowerShell上仍然是新手-我想了解以下行为是故意的,还是错误的,或者是我错误打开的设置(发生在PS 5.1和7中):

  • 创建一个名为c:\temp\users.CSV的CSV,包含以下行:
  • 运行以下Powershell:
  • 我在这里编写主机只是为了展示,但我可能会使用这种类型的行为将计算出的属性值传递给函数等。我知道进行-连接不是世界末日,但在这些条件下,将行扩展到数组是正常行为,还是我遗漏了什么?此外,如果有一个较短的语法组合内联,请分享


    谢谢/抱歉提出这样的问题

    在字符串中使用子表达式运算符
    $()
    ,否则powershell可能不知道是否要打印整个$user变量和.Username字符串或$user对象的Username属性。 另外,我建议开始使用写信息而不是写主机。 无论如何,这应该是可行的:
    write host“用户路径为:\\server\users\$($User.Username)”

    First,Last,Username
    Bob,Smith,rsmith
    Liz,Taylor,ltaylor
    
    $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