2017-07-07 1193 views
0

我有一個來自以前回答的問題的腳本,但沒有足夠的評論聲望。我試圖運行該腳本並遇到以下錯誤消息:使用Powershell獲取所有AD用戶及其組羣成員(遞歸)

導出CSV:無法將CSV內容附加到以下文件:C:\ users.csv。附加對象沒有與以下列對應的屬性:User; Group。要繼續使用不匹配的屬性,請添加-Force參數,然後重試該命令。

如何調試此腳本來解決此問題?

Function Get-ADGroupsRecursive{ 
Param([String[]]$Groups) 
Begin{ 
    $Results = @() 
} 
Process{ 
    ForEach($Group in $Groups){ 
     $Results+=$Group 
     ForEach($Object in (Get-ADGroupMember $Group|?{$_.objectClass -eq "Group"})){ 
      $Results += Get-ADGroupsRecursive $Object 
     } 
    } 
} 
End{ 
    $Results | Select -Unique 
}} 

import-module activedirectory 

$users = get-aduser -Filter {Name -Like "*"} -Searchbase "OU=Sample Accounts,DC=domain,DC=com" -Properties MemberOf | Where-Object { $_.Enabled -eq 'True' } 

$targetFile = "C:\users.csv" 
rm $targetFile 
Add-Content $targetFile "User;Group" 


foreach ($user in $users) 
{ 
    $Groups = $User.MemberOf 
    $Groups += $Groups | %{Get-ADGroupsRecursive $_} 
$Groups | %{New-Object PSObject -Property @{User=$User;Group=$_}}|Export-CSV $targetfile -notype -append 
} 
+5

刪除此行:'添加內容$的TargetFile 「用戶,組」',並讓PowerShell的處理CSV頭。 –

+0

Export-csv嘗試將您手動添加到$ targetFile的行匹配什麼不作爲默認行爲--Delimiter是逗號,值是雙引號。所以它將這些內容解釋爲一個屬性'User; Group' – LotPings

+0

@MarkWragg腳本現在可以工作,但我最終得到了這個錯誤信息:'Get-AdGroupMember超出限制。有沒有解決這個限制的方法? –

回答

0

試試這個功能

function Get-InChainGroups 
{ 
    param (
     [parameter(mandatory = $true)] 
     $user, 
     $domain) 

    $user1 = (get-aduser -filter { name -eq $user } -server $domain).distinguishedname 
    Write-verbose "checking $user" 
    $ldap = "(&(objectcategory=group)(groupType:1.2.840.113556.1.4.803:=2147483648)(member:1.2.840.113556.1.4.1941:=$user1))" 

    try { Get-ADobject -LDAPFilter $ldap -server $domain | select @{ n = 'Identity'; e = { $user } }, Name, @{ n = 'DN'; e = { $_.distinguishedname } } | ft -a } 
    catch { "Exception occurred" } 


} 
+0

建議不要在函數中使用別名('select','ft')或格式化cmdlet('ft')。別名可以是非標準的,格式不是必需的(讓用戶決定)。 –

+0

肯定的事 - 它是從我的舊模塊複製我忘了刪除這個 – gsky

相關問題