powershell - 通过 ADUser 问题进行的 ADAccount 非活动帐户管道
问题描述
我做了一些 PowerShell 脚本来查找 AD 中 90 天前循环遍历所有 DC 以获取 LastLogon 属性的非活动用户。我还需要一些只有 ADUser 才能带出的额外属性。使用管道中的管道运行我的脚本时出现错误$users = Search-ADAccount
。
Import-Module ActiveDirectory
function Get-ADUsersLastLogon() {
$dcs = Get-ADDomainController -Filter {Name -like "*"}
$OUs = @()
$OU += "ou=Users-A,ou=Users,ou=Items,dc=mydc,dc=com"
$OU += "ou=Users-B,ou=Users,ou=Items,dc=mydc,dc=com"
$time = 0
$exportFilePath = "c:\tmp\lastLogon-test $(get-date -f dd-MM-yyyy).csv"
$columns = "name;username;whencreated;whenchanged;DNname;datetime"
#InactiveTest
$InactiveFilter = @{
UsersOnly = $true
AccountInactive = $true
TimeSpan = New-Timespan -Days 90
}
#EndInactiveTest
Out-File -FilePath $exportFilePath -Force -InputObject $columns
foreach ($OU in $OUs) {
$users = Search-ADAccount @InactiveFilter |
Get-ADUser -Filter * -SearchBase $OUs -Property displayName, whenCreated, whenChanged
foreach ($user in $users) {
foreach($dc in $dcs) {
$hostname = $dc.HostName
$currentUser = Get-ADUser $user.SamAccountName |
Get-ADObject -Server $hostname -Properties lastLogon
if ($currentUser.LastLogon -gt $time) {
$time = $currentUser.LastLogon
}
}
$dt = [DateTime]::FromFileTime($time)
$row = $user.displayName + ";" + $user.SamAccountName + ";" +
$user.whenCreated + ";" + $user.whenChanged + ";" +
$user.distinguishedName + ";" + $dt
Out-File -FilePath $exportFilePath -Append -NoClobber -InputObject $row
$time = 0
}
}
}
Get-ADUsersLastLogon
解决方案
@voilier 对不起,我不明白它对你有什么作用。粘贴您的代码,Get-ADUser cmdlet 需要筛选值。如果使用get-help get-aduser -full
,您将看到该searchbase
参数只能与Filter
或LDAPFilter
参数一起使用。不仅如此,它们都不接受管道输入。Identity
参数仅接受按值输入的管道。因此您需要使用 Search-ADAccount @InactiveFilter 中的 distinctname 属性,例如 distinctname 并将其传递给过滤器
$users = Search-ADAccount @InactiveFilter | %{Get-ADUser -filter {distinguishedname -eq $_.distinguishedname} -SearchBase $OU -Property displayName, whenCreated, whenChanged}
我用$users=...
上面的代码替换了你的部分,现在我没有看到任何错误并且 CSV 文件已成功创建。
用这个替换你的 foreach $ou in $ous 并检查 csv 文件。它适用于我的电脑
Foreach ($ou in $ous){
$users = (Search-ADAccount @InactiveFilter | %{Get-ADUser -filter {distinguishedname -eq $_.distinguishedname} -SearchBase $OU -Property displayName, whenCreated, whenChanged})
foreach ($user in $users) {
foreach($dc in $dcs) {
$hostname = $dc.Name
$last_logon_time=((Get-ADUser $user.SamAccountName | Get-ADObject -Server "$hostname" -Properties lastLogon) |?{$_.lastlogon -gt $time}) | select -ExpandProperty lastlogon
}
$dt = [DateTime]::FromFileTime("$last_logon_time")
$row = $user.displayName + ";" + $user.SamAccountName + ";" +
$user.whenCreated + ";" + $user.whenChanged + ";" +
$user.distinguishedName + ";" + $dt
Out-File -FilePath $exportFilePath -Append -NoClobber -InputObject $row
$last_logon_time = 0
}
}
希望对你有帮助
推荐阅读
- javascript - 有没有办法让相机在一个框架中正确使用threejs?
- java - 如何从队列(ArrayBlockingQueue)中获取多个项目?
- c# - 使用 google chrome 浏览器扩展打开带有参数的 .net 应用程序
- gem5 - 在 garnet (gem5) 中进行模拟时,在 stats.txt 文件中获取平均数据包延迟,flit 延迟范围为数千
- java - 如何从 RestController 调用 WebController 并在 Java 中的 String 响应中获取渲染模板
- angular - 使用传入的参数作为过滤器中的属性,角度
- apache-spark - java.lang.SecurityException:您的管理员已禁止在此集群上运行 Scala UDF
- javascript - 如何找到角度输入的类型?
- python-3.x - 将多个输入映射到python中数据类中的同一属性,同时保留签名
- ceph - 增加ceph恢复