ドメイン内の各コンピューターの最後のログオン時間を取得するスクリプトがあります。
私のスクリプト:
$dcs = Get-ADComputer -Filter { OperatingSystem -NotLike '*Server*' } -Properties OperatingSystem
foreach($dc in $dcs) {
Get-ADComputer $dc.Name -Properties lastlogontimestamp |
Select-Object @{n="Computer";e={$_.Name}}, @{Name="Lastlogon"; Expression={[DateTime]::FromFileTime($_.lastLogonTimestamp)}}
}
==================================
結果:
コンピューターの最終ログオン
-------- ---------
DC1 2013年6月6日16:38:24
DC2 2013年6月6日16:30:40
=============================================
また、誰またはどのアカウントがこのログオンを行ったかを取得したいと考えています。例えば:
コンピューターのLastlogonユーザー
-------- ------------------ ----
DC1 2013年6月6日16:38:24 user2
DC2 2013年6月6日16:30:40 user1
これは完璧ではないかもしれませんが、正しい軌道に乗ることができます。正確な最後のユーザーを取得するには、これを参照してください script 。正確な最後のユーザーをフィルタリングする方法についての詳細情報を提供します。以下の例では、select-object -First 1を使用しています。これは、最後にログオンしたユーザーのかなり良い指標になるはずです。最後にログオンしたユーザーを取得するには、使用する必要があります
Get-WmiObject -Class Win32_UserProfile
Get-ADComputerとGet-WMIObjectの情報を「結合」するために、ハッシュテーブルを使用しました。
これをドメイン管理者アカウントから実行している場合は、-credential $ credentialの部分を削除できます。それ以外の場合はそのままにして、RSATツールがインストールされている通常のワークステーションから実行して、Get-ADComputerを使用できるようにします。
以下のコード:
$computers = Get-ADComputer -Filter { OperatingSystem -NotLike '*Server*' } -Properties OperatingSystem
$credential = Get-Credential -Message "Please enter your administrator username and password"
foreach($computer in $computers) {
$pcinfo = Get-ADComputer $computer.Name -Properties lastlogontimestamp | `
Select-Object @{Name="Computer";Expression={$_.Name}}, `
@{Name="Lastlogon";Expression={[DateTime]::FromFileTime($_.lastLogonTimestamp)}}
$lastuserlogoninfo = Get-WmiObject -Class Win32_UserProfile -ComputerName $computer.name -Credential $credential | Select-Object -First 1
$SecIdentifier = New-Object System.Security.Principal.SecurityIdentifier($lastuserlogoninfo.SID)
$username = $SecIdentifier.Translate([System.Security.Principal.NTAccount])
# Create hashtable for properties
$properties = @{'Computer'=$pcinfo.Computer;
'LastLogon'=$pcinfo.Lastlogon;
'User'=$username.value
} #end $properties
write-output (New-Object -Typename PSObject -Property $properties)
}
使用時にフォーマットを確認してください。スクリプトウィンドウに合わせるために、エスケープ( `)文字を追加する必要がありました。
ありがとう、ティム。
これはTimのコードです。コンピュータのIPアドレスとオペレーティングシステムを表示し、データをエクスポートするために更新しました。
$computers = Get-ADComputer -Filter { OperatingSystem -NotLike '*Server*'} -Properties OperatingSystem
foreach($computer in $computers) {
$pcinfo = Get-ADComputer $computer.Name -Properties ipv4Address, OperatingSystem ,lastlogontimestamp |
Select-Object @{n="Computer";e={$_.Name}},
@{Name="Lastlogon";Expression={[DateTime]::FromFileTime($_.lastLogonTimestamp)}},ipv4Address,OperatingSystem
$lastuserlogoninfo = Get-WmiObject -Class Win32_UserProfile -ComputerName $computer.name -Credential $credential | Select-Object -First 1
$SecIdentifier = New-Object System.Security.Principal.SecurityIdentifier($lastuserlogoninfo.SID)
$username = $SecIdentifier.Translate([System.Security.Principal.NTAccount])
# Create hashtable for properties
$properties = @{'Computer'=$pcinfo.Computer;
'LastLogon'=$pcinfo.Lastlogon;
'ipv4Address'=$pcinfo.ipv4Address;
'OperatingSystem'=$pcinfo.OperatingSystem
'User'=$username.value
} #end $properties
write-output (New-Object -Typename PSObject -Property $properties) |
export-csv .\Computers.csv -append -notypeinformation -encoding "unicode"
}