-1

古いユーザーを無効にするスクリプトを書きました...それに除外リストを作成する必要があります...除外リストは.csvで、「名前」、「SamaccountName」、「理由」の3つの列があります...除外リストのフィルタリングに行き詰まっています... -notmatch と -notcontains を実行しようとしましたが、何もうまくいきませんでした... if で foreach を実行しようとしても同じです...

 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
4

2 に答える 2

1

文字列値に配列を含めることはできないため、

$_.SamAccountName -notcontains $excludeUsers

は常に に評価され$trueます。チェックを逆にして、参照を文字列の配列にする必要があります (CSV インポートにより、カスタム オブジェクトの配列が生成されます)。インポートされた CSV からフィールドのみを選択SamaccountNameし、引数を切り替えると、必要なことが行われます。

$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 }
于 2013-07-11T10:32:28.510 に答える