2014-01-28 117 views
0

我有一個問題要得到誰是即將在不到8天的時間到期特定用戶的廣告組到期,並列出他的團體。用戶帳戶約

我能夠找到用戶提供:

$users = Search-ADAccount -AccountExpiring -TimeSpan "7" | FT sAMAccountName -HideTableHeaders

但是當我嘗試的foreach:

foreach ($user in $users) { Get-ADUser -identity $user -Properties memberof | select -ExpandProperty memberof | %{ $_.Split(',')[0]; }

我得到:

GET-ADUser便有:無法綁定參數「身份」。不能轉換「Microsoft.PowerShell.Commands.Internal.Format.FormatEndData」類型「Microsoft.PowerShell.Commands.Internal.Format.FormatEndData」的 值輸入「Microsoft.ActiveDirectory.Management.ADUser」。 在C:\腳本\ GET expiry.ps1:13字符:23 + GET-ADUser便有-identity $用戶-Properties的memberOf |選擇-ExpandProperty成員... + ~~~~~ + CategoryInfo:InvalidArgument:(:) [獲取-ADUser便有],ParameterBindingException + FullyQualifiedErrorId:CannotConvertArgumentNoMessage,Microsoft.ActiveDirectory.Management.Commands.GetADUser

但對於一個用戶它的工作原理:

Get-ADUser -identity guest1 -Properties memberof | select -ExpandProperty memberof | %{ $_.Split(',')[0]; }

CN = MY_GROUP

我的問題是,如何FormatEndData轉換成ADUser便有? 或者有沒有更好的方式來獲得我所需要的?

答:

小的幫助,我能得到我想要的東西,此代碼如下

$datefrom = (Get-Date) $dateto = (Get-Date).AddDays(8) $users = Get-ADUser -filter {(AccountExpirationDate -gt $datefrom) -and (AccountExpirationDate -lt $dateto)} -Properties samaccountname,memberof

foreach ($user in $users) { $groups = $user | select -Property samaaccountname -ExpandProperty memberof | %{ $_.Split(',')[0]; } | %{ $_.Split('=')[1]; } foreach ($group in $groups){ if ($group -eq "MY_GROUP") { Write-Host $user.samaccountname echo $group }
} }

回答

0

考慮它是什麼,你實際上投入$用戶。 Format-Table從流水線中獲取對象並添加屏幕格式以爲您製作一張漂亮的表格。當你將它發送給變量時,這就是變量中的內容 - 一串字符串和格式控制字符 - 而不是你的PowerShell對象。

擺脫格式表,看看,如果它不工作得更好。