Powershell ForEach对象循环中的嵌套IF语句
我目前正试图找出某个特定组的哪些成员在过去30天内没有登录到广告。我已设法返回组的所有用户,但在将其传送到Foreach对象循环时遇到问题Powershell ForEach对象循环中的嵌套IF语句,powershell,active-directory,Powershell,Active Directory,我目前正试图找出某个特定组的哪些成员在过去30天内没有登录到广告。我已设法返回组的所有用户,但在将其传送到Foreach对象循环时遇到问题 导入模块activedirectory $DaysInactive=30 $time=(获取日期).Adddays(-$DaysInactive)) 获取adgroupmember-标识“远程用户”| foreach对象{ 如果($\最后登录日期-lt$时间){ 写入主机$\u.SamAccountName } } 我认为问题在于我在调用LastLogon
导入模块activedirectory
$DaysInactive=30
$time=(获取日期).Adddays(-$DaysInactive))
获取adgroupmember-标识“远程用户”| foreach对象{
如果($\最后登录日期-lt$时间){
写入主机$\u.SamAccountName
}
}
我认为问题在于我在调用LastLogonDate时使用了一个广告用户属性,结果我收到一个错误,说它无法识别。
我想象在循环中我需要一个get-aduser
cmdlet,但我不确定将什么作为-filter
的值发送
当PowerShell从get-adgroupmember
检索所有成员时,是否将结果集放入数组中?如果是,如何检索上次登录日期的值 像这样的
Get-ADGroupMember -recursive -identity "Remote Desktop" |
Where { $_.objectClass -eq "user" } |
Get-ADUser -properties SamAccountName, LastLogonDate |
Where { $_.LastLogonDate -lt $time } |
select SamAccountName
- 筛选出组
- 我猜您想要所有嵌套成员
- 加载LastLogonData
import-module activedirectory
$DaysInactive = 30
$time = (Get-Date).Adddays(-($DaysInactive))
$users = get-adgroupmember -identity "Remote Users"
foreach($user in $users){
$lastLogin = (Get-ADUser $user -Property LastLogonDate).LastLogonDate
if($lastLogin -lt $time){
Write-Host $user.SamAccountName
}
}
应该是:
如果($\u.LastLogonDate-lt$time)
默认情况下也不会检索.LastLogonDate属性。您需要获取从Get-ADGroupMember返回的每个项目,并使用Get-ADUser显式获取.LastLogonDate属性。@EBGreen您是正确的。由于应用了arco444的建议,它现在返回所有成员,而不需要对条件语句求值。当我需要指定筛选器时,我应该使用Get ADUser指定什么?请使用当前代码编辑您的问题。因为您已经有了管道,我将使用。|?{$\ LastLogonDate-lt$time}选择-展开SamAccountName
,而不是使用嵌套的if
语句展开ForEach对象
循环。将复杂的管道命令转换为更结构化的ForEach循环就是这样一种方法。通过这种方式,您可以非常清楚地了解正在处理的对象。