【问题标题】:Problem using select-object @{name="Name"; expression=$variable}使用 select-object @{name="Name"; 时出现问题表达式=$变量}
【发布时间】:2020-04-17 07:10:46
【问题描述】:

我尝试过这样的事情,但它从来没有给出值,我的 ifile.csv 包含两列 displayname,grpmail

Import-Csv "E:\ifile.csv" | foreach {get-distributionGroupMember -Identity $_.displayname | select-Object @{Name= GroupName; Expression = {$_.grpmail}}, Recipienttype, Primarysmtpaddress} | Export-csv -no typeinformation "E:\Ofile.csv"

谁能告诉我我做错了什么 我期待 ofile.csv 包含 3 列作为 GroupName、Recipienttype、Primarysmtpaddress

我获取 Recipienttype、Primarysmtpaddress 列的值,但 GroupName 列始终为空。

【问题讨论】:

  • 您的代码中有很多令人讨厌的地方。仅通过 Powershell ISE 中的代码突出显示,您应该能够识别一些问题。我也不相信您的代码正在运行而不会引发任何错误。不过,您的基本方法是正确的。
  • csv的分隔符是,还是别的什么?
  • 请测试一下:Import-Csv "E:\ifile.csv" | foreach { $_.displayname ; $_.grpmail } | fl

标签: powershell office365 exchange-server


【解决方案1】:

这是因为您在管道中的 $_ 已更改为您的 get-distributiongroupmember 的结果,并且不再是您的 CSV 文件输入。

试试这个:

Import-Csv "E:\ifile.csv" | foreach {
$gname = $_.grpmail
Get-distributionGroupMember -Identity $_.displayname | Select @{Name= GroupName; Expression = {$gname}}, Recipienttype, Primarysmtpaddress} | Export-csv -no typeinformation "E:\Ofile.csv"

我刚刚拆分了第 2 行和第 3 行以使其更易于阅读 - 如果您愿意,您可以在 $gname = $_.grpmail 之后添加一个分号。

作为一般说明,我喜欢为管道对象分配特定的变量名称,以查看我实际使用的内容,尤其是在它们正在被转换的过程中。另外,我喜欢使用多行来更好地了解正在发生的事情

foreach ($g in (Import-Csv "E:\ifile.csv")) {
    Get-distributionGroupMember -Identity $g.displayname | 
    Select @{Name= GroupName; Expression = {$g.grpmail}},Recipienttype,Primarysmtpaddress
} | Export-csv -notypeinformation "E:\Ofile.csv"

【讨论】:

    【解决方案2】:

    编辑 按照 T-Me 的建议,试试这个:

    Import-Csv "E:\ifile.csv" | ForEach-Object {
        $grpmail = $_.grpmail
        get-distributionGroupMember -Identity $_.displayname | Select-Object @{ Name = 'GroupName'; `
                                                                                Expression = "$grpmail" }, `
                                                                                Recipienttype, Primarysmtpaddress
    } | Export-csv -no typeinformation "E:\Ofile.csv"
    

    【讨论】:

    • 这不会解决问题,但在每行的GroupName 字段中写入字符串grpmail...
    • 就像,Import-Csv "E:\ifile.csv" | ForEach-Object { $grpmail = $_.grpmail get-distributionGroupMember -Identity $_.displayname |选择对象@{ Name = 'GroupName';表达式 = "$grpmail" },收件人类型,Primarysmtpaddress } | export-csv -no typeinformation "E:\Ofile.csv"
    • 是的,现在它是正确的并且可以工作。但是现在和@trix的回答一样
    • 你不需要反引号。是的,花括号在选择中的位置错误。
    • 我的意思是你可以只用逗号继续一行。你也可以去掉分号。
    猜你喜欢
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多