使用 select-object @name="Name"; 时出现问题表达式=$变量
Posted
技术标签:
【中文标题】使用 select-object @name="Name"; 时出现问题表达式=$变量【英文标题】: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
【参考方案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的回答一样
你不需要反引号。是的,花括号在选择中的位置错误。
我的意思是你可以只用逗号继续一行。你也可以去掉分号。以上是关于使用 select-object @name="Name"; 时出现问题表达式=$变量的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Select-object 在单个查询中获取进程和线程的详细信息?
powershell 概念证明:使用Select-Object计算属性的简化语法
PowerShell Select-Object Property和ExpandProperty的差别
PowerShell Select-Object 保留排序后一定数量的首尾行