AD で不要になったコンピュータ アカウントを見つける方法

AD で不要になったコンピュータ アカウントを見つける方法

私はこの役職に就いたばかりですが、AD 構造を徹底的に整理する必要があると感じています。サーバーを考慮に入れなくても、従業員の 2 倍以上のコンピュータ アカウントがあります。どれがまだ有効で、どれが影響なく削除できるかを知りたいです。

Joeware のツール OldComp を見つけました。かなり便利そうですが、検索対象についてもう少し理解する必要があるようです...90 日以上経過したコンピュータを検索する場合、ネットワークに接続されてから 90 日経過しているという意味ですか? その理由は、バックアップとして棚に置かれている現場のオフィスのラップトップを、実際には接続されておらず現在使用されていないだけなのに「古い」コンピュータだと思い込んで、うっかり切断したくないからです。まれにそのようなことが起こるかもしれないので、心配する価値はないかもしれませんが...

とにかく、他の方法を知っている方や、これを達成するための最良の方法の良い例を持っている方がいたら、ぜひ教えてください。最終的には、使用されなくなったコンピューター アカウントを削除できるようにしたいだけです。よろしくお願いします。

答え1

Oldcmpは、その機能についてはよく知られており、初回および定期的なクリーンアップには問題なく機能します。
時間が経つにつれて自動化プロセスが必要になった場合は、Powershell (強く推奨) を使用して自動化プロセスを作成できます。たとえば、現在のスクリプトは次のことを行います。

  • lastLogonTimeStamp使用状況に基づいて古いアカウントを検索get-ADcomputer
  • 60日後に無効になります
  • 90日後に削除します
  • 行うすべてのことを記録します

さらに、アカウントを削除したくない場合は、アカウントに対して ProtectFromAccidentialDeletion フラグを使用します。

答え2

すでになくなってしまったマシンと、使用されず棚に置かれているマシンを区別できる方法はないので、OldComp を使用してクリーンアップを行い、一回限りのマシンが発生した場合に対処します。

答え3

PowerShell ではないのはなぜですか?

    $Computers =  ([ADSISearcher]"(&(objectCategory=computer)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))").FindAll()
    $Computers = $Computers | ForEach { $_.Path }
    $Age = $(Get-Date).AddDays(-90)

    $StaleComputerAccounts = @()
    $NeverUsedComputerAccounts = @()


    ForEach ($Computer in $Computers) {

        $ComputerObj = [ADSI]$Computer


        if ($ComputerObj.lastLogon) {

            $LastLogon = [DateTime]::FromFileTime($ComputerObj.ConvertLargeIntegerToInt64($ComputerObj.lastlogon[0]))
            if ( $LastLogon -lt $Age ) {

                $StaleComputerAccounts += $Computer

            }

        }
        else {

            $NeverUsedComputerAccounts += $Computer

        } 

}


最終的には のリストが作成され$StaleComputerAccounts$NeverUsedComputerAccountsさらに PowerShell で操作できるようになります。私は次のようにするのが好きです:

$TargetOU = "OU=Computers,OU=Disabled,OU=,DC=CONTOSO,DC=com"
$OUObj = [ADSI]"LDAP://$TargetOU"


ForEach ($Computer in $StaleComputerAccounts) {

    $ComputerObj = [ADSI]$Computer
    $ComputerObj.PSBase.MoveTo($OUObj)
    $ComputerObj.InvokeSet("accountDisabled", $True)
    $ComputerObj.SetInfo()

}



不適切に廃止されたコンピュータ (オフライン時に Active Directory から削除されなかったコンピュータ) と、役員のデスクに置かれたラップトップをプログラムで区別する魔法のような方法はありません。慎重に移行したい場合は、アカウントを無効にして、私が行っているように、特定の OU に送信するだけで済みます。

関連情報