用户帐户即将过期并列出他的组

时间:2014-01-28 12:42:22

标签: powershell active-directory

我遇到一个问题,即在不到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:无法绑定参数'Identity'。无法转换“Microsoft.PowerShell.Commands.Internal.Format.FormatEndData” 键入“Microsoft.PowerShell.Commands.Internal.Format.FormatEndData”以键入“Microsoft.ActiveDirectory.Management.ADUser”。 在C:\ scripts \ get expiry.ps1:13 char:23 + Get-ADUser -identity $ user -Properties memberof | select -ExpandProperty成员... + ~~~~~     + CategoryInfo:InvalidArgument:(:) [Get-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 }
} }

1 个答案:

答案 0 :(得分:0)

考虑一下你实际投入$ users的内容。 Format-Table从管道中获取对象并添加屏幕格式以便为您创建一个漂亮的表。当你把它发送到一个变量时,这就是varialble中的内容 - 一堆字符串和格式控制字符 - 而不是你的powershell对象。

摆脱格式表,看看它是否效果不佳。