-1

Я написал сценарий, который отключил старых пользователей ... и мне нужно сделать список исключений ... список исключений должен быть .csv, с 3 столбцами «Имя», «SamaccountName», «Reason» ... Я как бы застрял с фильтрацией списка исключений ... Я пытался сделать -notmatch и -notcontains и ничего не работал для меня ... i even попытаться сделать Еогеасп с, если, но то же самое ...Отключено ActiveDirectory Пользователей за определенную дату с перечнем исключений

Function Get-ADLockOldUsers { 
param() 
begin{ 
    [datetime]$myDate = '01/01/1601 02:00:00' 
    $colObj = @() 
    $AllUsers = (Get-ADUser -Filter * -Properties lastLogonTimestamp | ? {$_.Enabled} | Select-Object Name,SamAccountName,@{N="LastLogon";E={[datetime]::FromFileTime($_.lastLogonTimestamp)}}) 
    $AllUsers = $AllUsers | ? {(Get-Date).AddDays(-30) -gt $_.LastLogon -and -not ($_.LastLogon -eq $myDate)} 
} 
process { 
$AllUsers | % { 
     $obj = New-Object psobject 
     $obj | Add-Member noteproperty 'Name' $_.Name -Force 
     $obj | Add-Member noteproperty 'SamAccountName' $_.SamAccountName -Force 
     $obj | Add-Member noteproperty 'LastLogon' $_.LastLogon -Force 
     $obj | Add-Member noteproperty 'NeedDisabled' $true -Force 
     $colObj += $obj 
     } 
} 
end { return $colObj } 
} 

Function Set-ADLockUser { 
param() 
begin{ 
    if (Test-Path '.\excludeusers.csv') { 
     $excludeUsers = Import-Csv '.\excludeusers.csv' 
     $DUser = @() 
     $colUsers = Get-ADLockOldUsers 
     $colUsers | ? {$_.SamAccountName -notcontains $excludeUsers} | % {Set-ADUser -Identity $_.SamAccountName -Enabled $false -WhatIf } 
     } 
    else { Write-Output "Error! excludeusers.csv cannot be found, stop script"; break } 
    } 
process { 
    } 
end{} 
} 

Set-ADLockUser 

ответ

1

значение строки никогда не может содержать массив, так

$_.SamAccountName -notcontains $excludeUsers 

всегда будет оценивать $true. Вам нужно отменить проверку и сделать ссылку массивом строк (импорт CSV создает массив пользовательских объектов). Выбор только поле SamaccountName из импортированного CSV и коммутационные аргументы должны делать то, что вы хотите:

$excludeUsers = Import-Csv '.\excludeusers.csv' | % { $_.SamaccountName } 
... 
$colUsers | ? { $excludeUsers -notcontains $_.SamAccountName } | ... 

В качестве примечания, можно упростить код для поиска устаревших счетов, как это:

$myDate = Get-Date '01/01/1601 02:00:00' 
$limit = (Get-Date).AddDays(-30) 

$colObj = Get-ADUser -Filter * -Properties * ` 
    | ? { $_.Enabled } ` 
    | select Name,SamAccountName,@{n="NeedDisabled";e={$true}}, 
     @{n="LastLogon";e={[datetime]::FromFileTime($_.lastLogonTimestamp)}} ` 
    | ? { $limit -gt $_.LastLogon -and $_.LastLogon -ne $myDate } 
+0

Спасибо .. О -propertie s * i не нужно все свойства ... – OhadH

+0

Это должно было быть в безопасности, потому что некоторые свойства по умолчанию не включены. Оператор 'select' фильтрует свойства, которые вам действительно нужны, из всего набора. –

-1

Это окончательное решение ...

<# 
    .Synopsis 
    Get All Users in the Domain and check the last logon Date 
    .Example 
    Set-ADLockUser -ReportOnly:$true 
    Get all users that didn't logon for a 30 days and write a report to the current directory 
    .Example 
    Set-ADLockUser -ReportOnly:$false 
    Get all users that didn't logon for a 30 days and disabled them 
    .Description 
    Get All Users in the Domain and check the last logon Date, and exclude some users from a list .\excludeusers.csv 
    .Parameter ReportOnly 
    Specifies if the script is in reportmode or active mode if ReportOnly=$false all the relevant users will lock 
    .Outputs 
    PSObject[] 
    .Notes 
    Name: Set-ADLockUser 
    Author: Ohad Halali 
    Date: 14.07.2013 
    .Link 
    #> 
Function Get-ADLockOldUsers { 
param() 
begin{ 
    [datetime]$myDate = '01/01/1601 02:00:00' 
    $colObj = @() 
    $AllUsers = (Get-ADUser -Filter * -Properties lastLogonTimestamp | ? {$_.Enabled} | ` 
       Select Name,SamAccountName,@{N="LastLogon";E={[datetime]::FromFileTime($_.lastLogonTimestamp)}}) | ` 
       ? {(Get-Date).AddDays(-30) -gt $_.LastLogon -and -not ($_.LastLogon -eq $myDate)} 
} 
process { 
$AllUsers | % { 
     $obj = New-Object psobject 
     $obj | Add-Member noteproperty 'Name' $_.Name -Force 
     $obj | Add-Member noteproperty 'SamAccountName' $_.SamAccountName -Force 
     $obj | Add-Member noteproperty 'LastLogon' $_.LastLogon -Force 
     $obj | Add-Member noteproperty 'NeedDisabled' $true -Force 
     $colObj += $obj 
     } 
} 
end { return $colObj } 
} 

Function Set-ADLockUser { 
param([bool]$ReportOnly=$true) 
begin{ 
    if (Test-Path '.\excludeusers.csv') { 
     $excludeUsers = Import-Csv '.\excludeusers.csv' 
     $colUsers = Get-ADLockOldUsers | ? {$excludeUsers.SamAccountName -notcontains $_.SamAccountName} 
     if ($ReportOnly) { 
      $colUsers | Export-Csv '.\Report.csv' -NoClobber -NoTypeInformation -Encoding ASCII -Force 
      } 
     else { 
       $colUsers.SamAccountName | Set-ADUser -SamAccountName $_ -Enabled:$False -Replace @{info="Disabled after no login for 30 days (Script)"} -WhatIf 
      } 
     } 
    else { Write-Output "Error! excludeusers.csv cannot be found, stop script"; break } 
    } 
process {} 
end{} 
} 

Set-ADLockUser 
Смежные вопросы