Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell ForEach对象循环中的嵌套IF语句_Powershell_Active Directory - Fatal编程技术网

Powershell ForEach对象循环中的嵌套IF语句

Powershell ForEach对象循环中的嵌套IF语句,powershell,active-directory,Powershell,Active Directory,我目前正试图找出某个特定组的哪些成员在过去30天内没有登录到广告。我已设法返回组的所有用户,但在将其传送到Foreach对象循环时遇到问题 导入模块activedirectory $DaysInactive=30 $time=(获取日期).Adddays(-$DaysInactive)) 获取adgroupmember-标识“远程用户”| foreach对象{ 如果($\最后登录日期-lt$时间){ 写入主机$\u.SamAccountName } } 我认为问题在于我在调用LastLogon

我目前正试图找出某个特定组的哪些成员在过去30天内没有登录到广告。我已设法返回组的所有用户,但在将其传送到Foreach对象循环时遇到问题

导入模块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循环就是这样一种方法。通过这种方式,您可以非常清楚地了解正在处理的对象。