回答:
これにより、過去365日間アクティビティがないすべてのコンピューターアカウントが得られます。
Search-ADAccount -AccountInactive -ComputersOnly -TimeSpan 365.00:00:00
これにより、lastlogondateで並べ替えられます。
Search-ADAccount -AccountInactive -ComputersOnly -TimeSpan 365.00:00:00 | Sort-Object lastlogondate | Ft name,lastlogondate -auto
これにより、コンピューターアカウントが無効になります。
Search-ADAccount -AccountDisabled -ComputersOnly
コンピューターは、デフォルトで30日ごとにアカウントのパスワードを変更します。コンピューターのパスワードが長期間変更されていない場合は、ネットワークに接続されていないことを意味します。
このPowerShellスクリプトは2つのテキストファイルを出力します。1つは無効なコンピューター用で、もう1つは孤立したコンピューターアカウントオブジェクト用です。Active Directory PowerShellモジュールがインストールされている必要があります。
この例では、「暗号化されたラップトップ」OUを除外します。これは、長時間切断されたモバイルラップトップであるためです。同様の設定がない場合は、そのセクションを削除できます
Import-Module ActiveDirectory
$Date = [DateTime]::Today
#Sets the deadline for when computers should have last changed their password by.
$Deadline = $Date.AddDays(-365)
#Makes the date string for file naming
$FileName = [string]$Date.month + [string]$Date.day + [string]$Date.year
#Generates a list of computer accounts that are enabled and aren't in the Encrypted Computers OU, but haven't set their password since $Deadline
$OldList = Get-ADComputer -Filter {(PasswordLastSet -le $Deadline) -and (Enabled -eq $TRUE)} -Properties PasswordLastSet -ResultSetSize $NULL |
Where {$_.DistinguishedName -notlike "*Encrypted Laptops*"} |
Sort-Object -property Name | FT Name,PasswordLastSet,Enabled -auto
#Generates a list of computer accounts that are disabled and sorts by name.
$DisabledList = Get-ADComputer -Filter {(Enabled -eq $FALSE)} -Properties PasswordLastSet -ResultSetSize $null |
Sort-Object -property Name | FT Name,PasswordLastSet,Enabled -auto
#Creates the two files, assuming they are not $NULL. If they are $NULL, the file will not be created.
if ($OldList -ne $NULL) {
Out-File "C:\users\marra\desktop\Old$Filename.txt" -InputObject $OldList
}
if ($DisabledList -ne $NULL) {
Out-File "C:\users\marra\desktop\Disabled$Filename.txt" -InputObject $DisabledList
}
万人ありがとう!これに微調整を加えたかったのです。無効になっているか無効になっておらず、運用環境にないサーバーのみを見つける必要がありました。これは私が思いついたものであり、うまくいったようです。
Import-Module ActiveDirectory
$Date = [DateTime]::Today
#Sets the deadline for when computers should have last changed their password by.
$Deadline = $Date.AddDays(-365)
#Makes the date string for file naming
$FileName = [string]$Date.month + [string]$Date.day + [string]$Date.year
#Generates a list of computer server accounts that are enabled, but haven't set their password since $Deadline
$OldList = Get-ADComputer -Filter {(PasswordLastSet -le $Deadline) -and (Enabled -eq $TRUE) -and (OperatingSystem -Like "Windows *Server*")} -Properties PasswordLastSet -ResultSetSize $NULL |
Sort-Object -property Name | FT Name,PasswordLastSet,Enabled -auto
#Generates a list of computer server accounts that are disabled and sorts by name.
$DisabledList = Get-ADComputer -Filter {(Enabled -eq $FALSE) -and (OperatingSystem -Like "Windows *Server*")} -Properties PasswordLastSet -ResultSetSize $null |
Sort-Object -property Name | FT Name,PasswordLastSet,Enabled -auto
#Creates the two files, assuming they are not $NULL. If they are $NULL, the file will not be created.
if ($OldList -ne $NULL) {
Out-File "C:\temp\Old$Filename.txt" -InputObject $OldList
}
if ($DisabledList -ne $NULL) {
Out-File "C:\temp\Disabled$Filename.txt" -InputObject $DisabledList
}
OPがPowerShellを明確に要求していることはわかっていますが、それが気に入らなくて、Microsoftの別の構文を学びたくない場合は、次のPythonスニペットで使用できる正しい形式の日付が表示されますLDAPクエリを使用します。
import datetime, time
def w32todatetime(w32):
return datetime.fromtimestamp((w32/10000000) - 11644473600)
def datetimetow32(dt):
return int((time.mktime(dt.timetuple()) + 11644473600) * 10000000)
90daysago = datetime.datetime.now() - datetime.timedelta(days=90)
print datetimetow32(90daysago)
これを次のように使用して、過去90日間にパスワードを変更していないすべてのWindowsコンピューターを見つけることができます。
(&(objectCategory=computer)(objectClass=computer)(operatingSystem=Windows*)(pwdLastSet<=130604356890000000))
Windowsマシンがパスワードを変更するデフォルトの期間は30日なので、おそらく30だけが必要ですが、ボブの机の下に座って電源が入らないPCを忘れた場合は、90の方が安全に思えます。
編集:ああ、私はこれでタイムゾーンのサポートを省略しましたが、これはおそらくこのユースケースでは重要ではありませんが、他のケースではそうかもしれません。