Powershell 无法输出到CSV文件。我知道输出是一个花括号的“集合”,但我被难住了

Powershell 无法输出到CSV文件。我知道输出是一个花括号的“集合”,但我被难住了,powershell,collections,powerbi,Powershell,Collections,Powerbi,我有一个输出两列的小PowerShell脚本: 标记为Name和Name的字符串 以大括号标记的用户的集合 我需要将其输出到CSV文件,但集合只输出为error gobbledygook 我知道我需要将其转换为字符串、迭代或其他形式,但我很难弄清楚这一点 $ActiveSharedCapacityWorkspace=Get PowerBIWorkspace-Scope Organization-All |其中{$\.IsIndicatedCapacity-eq$false-和$\.State-e

我有一个输出两列的小PowerShell脚本:

标记为Name和Name的字符串 以大括号标记的用户的集合 我需要将其输出到CSV文件,但集合只输出为error gobbledygook

我知道我需要将其转换为字符串、迭代或其他形式,但我很难弄清楚这一点

$ActiveSharedCapacityWorkspace=Get PowerBIWorkspace-Scope Organization-All |其中{$\.IsIndicatedCapacity-eq$false-和$\.State-eq Active-和$\.Type-ne PersonalGroup} $ActiveSharedCapacityWorkspaceUsers=$ActiveSharedCapacityWorkspaces |选择名称,用户|获取唯一-关联字符串 $ExportFile=C:\Users\xxx\Desktop\ActiveSharedCapacityWorkspaceUsers.csv $ActiveSharedCapacityWorkspace用户|导出Csv$ExportFile 预期结果:

Name:WorkspaceName            Users:Joe Schmoe, Billy Bob
实际结果:

Name:WorkspaceName               Users:System.Linq.Enumerable+WhereSelectListIterator`2[Microsoft.PowerBI.Api.V2.Models.GroupUserAccessRight,Microsoft.PowerBI.Common.Api.Workspaces.WorkspaceUser]
返回一个IEnumerable,在您的例子中,您正在这个IEnumerable上存储一个Linq表达式

正如@LotPings所述,您必须调用Where-Linq表达式。这是通过枚举操作完成的,比如-join,因为join操作符必须枚举集合,这会导致解析/调用Linq查询。正如@LotOfPings和@AdminOfThings所建议的,将您的代码更改为:

$ActiveSharedCapacityWorkspaces = Get-PowerBIWorkspace -Scope Organization -All | Where {($_.IsOnDedicatedCapacity -eq $false) -and ($_.State -eq "Active") -and ($_.Type -ne "PersonalGroup")}

$ActiveSharedCapacityWorkspaceUsers = $ActiveSharedCapacityWorkspaces | Select-Object Name,@{n="Users';e={$_.Users.UserPrincipalName -join ', '}}

$ExportFile = "C:\Users\xxx\Desktop\ActiveSharedCapacityWorkspaceUsers.csv"

$ActiveSharedCapacityWorkspaceUsers | Export-Csv $ExportFile -NoTypeInformation

取消显示生成的CSV文件第0行中的类型信息。如果您是PowerShell 6,则默认情况下会禁用类型信息生成。

您应该在导出Csv命令中添加-NoTypeInformation标志。请提供带有大括号的数据示例。除了@AdminOfThings提示,使用计算属性联接用户$ActiveSharedCapacityWorkspaceUsers=$ActiveSharedCapacityWorkspaces |选择对象名称,@{n=users';e={$\uU4.users-join','}}具有大括号的数据示例:{JoeBlow@xxx.onmicrosoft.com, BillyBob@xxx.onmicrosoft.com, ZekeCornelius@xxx.onmicrosoft.com, JoeSchmoe@xxx.onmicrosoft.com}谢谢你的帮助,每个人顺便说一句,我正在使用PowerShell 5.1。现在,我在CSV单元格中没有得到相同的错误,但我仍然没有得到工作区用户名。使用上面的代码,我得到的输出如下:Microsoft.PowerBI.Common.Api.Workspaces.WorkspaceUser,Microsoft.PowerBI.Common.Api.Workspaces.WorkspaceUser,Microsoft.PowerBI.Common.Api.Workspaces.WorkspaceUser,用于用户字段。@WillHoward您能重新测试上面的代码吗。我认为您必须选择UserPrincipalName.$\uName。用户已更改为$\.Users.UserPrincipalName。原因是它没有ToString实现。