使用选择对象@ {name =“ Name”时出现问题;表达式= $变量}

时间:2019-12-27 09:31:43

标签: powershell office365 exchange-server

我尝试过类似的操作,但是它从未给出值,我的ifile.csv包含两列显示名称,即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列始终为空。

2 个答案:

答案 0 :(得分: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后面加上分号。

作为一般说明,我喜欢为管道对象分配特定的变量名称,以查看我实际使用的对象,尤其是在途中对其进行转换的情况下。另外,我喜欢用多行代码来更好地了解发生了什么事

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

答案 1 :(得分:0)

编辑 根据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"