我遇到一个问题,即在不到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
}
}
}
答案 0 :(得分:0)
考虑一下你实际投入$ users的内容。 Format-Table从管道中获取对象并添加屏幕格式以便为您创建一个漂亮的表。当你把它发送到一个变量时,这就是varialble中的内容 - 一堆字符串和格式控制字符 - 而不是你的powershell对象。
摆脱格式表,看看它是否效果不佳。