我有一個奇怪的場景,我試圖使用 PowerShell 填充 .CSV 檔案,但它不是傳統的 .CSV 檔案。我想在一個單元格中有兩列具有多個值。
所需的 CSV 輸出:
Team Name Team Users Team Access
Team 1 User 1 App 1
User 2 App 2
User 3 App 3
Team 2 User 4 App 1
User 5 App 2
User 6 App 3
所以基本上,對于上述內容,我只想要兩行包含所有這些資訊。
當我嘗試使用匯出 CSV 并為用戶和應用程式定義變數時,我的 CSV 如下所示:
Team Name Team Users Team Access
Team 1 System.Object[] System.Object[]
Team 2 System.Object[] System.Object[]
所以我想知道如何將物件值作為文字值或使用諸如 Add-Content / Add-Member 之類的東西來添加基于 CSV 標頭的值?
這是我當前的代碼:
$RBAC_Groups = Get-ADGroup -Filter {Name -like "RBAC*"} -SearchBase "DC=example,DC=com"
ForEach ($Group in $RBAC_Groups) {
#Get AD Group Members
$Users = Get-ADGroupMember -Identity $Group.Name
#Get AD Group Member Of
$Membership = Get-ADPrincipalGroupMembership $Group.Name
$Final = New-Object psobject
$Final | Add-Member -MemberType NoteProperty -Name "RBAC Group" -Value $Group.Name
$Final | Add-Member -MemberType NoteProperty -Name "RBAC Users" -Value $Users.Name
$Final | Add-Member -MemberType NoteProperty -Name "RBAC Access" -Value $Membership.Name
$Final | Export-Csv -Path C:\Temp\RBAC_Weekly_Audit.csv -Append -NoTypeInformation
}
謝謝,
uj5u.com熱心網友回復:
你只需要轉換陣列屬性Team Users和Team Access成多行字串(即陣列也是為什么你看到System.Object[]當您匯出物件)。
如何將陣列轉換為多行字串?
$array -join [environment]::NewLine$array -join "`r`n"($array | Out-String).TrimEnd()
和別的...
$RBAC_Groups = Get-ADGroup -Filter "Name -like 'RBAC*'" -SearchBase "DC=example,DC=com"
$export = foreach($group in $RBAC_Groups)
{
$members = @(Get-ADGroupMember -Identity $Group.Name).Where({
$_.ObjectClass -eq 'user'
})
$principals = Get-ADPrincipalGroupMembership $Group.Name
[pscustomobject]@{
'RBAC Group' = $group.Name
'RBAC Users' = $members -join [System.Environment]::NewLine
'RBAC Access' = $principals -join [System.Environment]::NewLine
}
}
$export | Export-Csv -Path C:\Temp\RBAC_Weekly_Audit.csv -NoTypeInformation
- 不建議對 AD cmdlet 的引數使用腳本塊,這會帶來問題。
-Filter
我怎么知道我的財產是否是一個陣列?
在控制臺中顯示物件時,陣列屬性的值將顯示在括號之間{...}。.GetType()方法,Get-Member也可以用來識別它們:
PS /> $obj[0]
Team Name Team Users Team Access
--------- ---------- -----------
Team 1 {User 1, User 2, User 3} {App 1, App 2, App 3}
PS /> $obj[0].'Team Users'.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
PS /> $obj[0] | Get-Member -MemberType Properties
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
Team Access NoteProperty Object[] Team Access=System.Object[]
Team Name NoteProperty string Team Name=Team 1
Team Users NoteProperty Object[] Team Users=System.Object[]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/392518.html
上一篇:如何使用服務主體詳細資訊連接到AzureVM[Linux型別]以執行腳本(sh)檔案
下一篇:備份多個組及其成員
