web-dev-qa-db-ja.com

ユーザーが最後にログオンしたコンピューターを見つける最良の方法は?

Active Directoryのどこかに「[コンピューター]から最後にログオンしたもの」が書き込まれる/保存されることを期待していますか、それとも解析できるログがありますか?

最後にログオンしたPCを知りたいのは、ネットワークを介してリモートサポートを提供するためです。ユーザーがめったに移動することはありませんが、私が相談しているものはすべて、その朝(ログインしたとき)に更新されていたことを知りたいのです。 、おそらく)少なくとも。

また、ユーザー名とコンピューター名を参照可能な既知の場所に書き込むログインスクリプトを検討していますが、一部のユーザーは一度に15日間ログアウトしたくありません。

ログインスクリプトを使用するエレガントなソリューションがある場合は、そのことを明記してください。ただし、ステーションのロックを解除するだけで機能する場合は、さらに良いでしょう。

24
Garrett

ログオンスクリプトの一部として、ユーザーごとに1つのログファイルを使用して、サーバー上の非表示の共有にその情報(およびその他の情報)を記録しています。ログオフスクリプトは、ユーザーがログオフした時間を同じログファイルに追加します。セットアップは簡単で、費用はかかりません。情報は読みやすい形式で表示されます。

26
John Gardeniers

これは、ADのコンピューターオブジェクトの説明を更新するログオンスクリプトを使用して行います。

"Authenticated Users"がドメイン内のコンピューターオブジェクトの説明プロパティを書き込めるようにするには、コントロールのカスタム委任を実行する必要があります。

それが完了したら、必要なのは、必要な情報を生成して、プロパティをコンピューターオブジェクトに書き込むスクリプトだけです。このスクリプトは、ドメインにリンクされたグループポリシーオブジェクトを介してログインスクリプトとして割り当てられます。

タイムスタンプ、ユーザー名、IPを説明フィールドに入力します。タイムスタンプが最初に来るのは、説明フィールドで並べ替えることにより、「古い」コンピュータオブジェクトをすばやく簡単に確認できるためです。

これを開始点として使用したい場合のために私がこれのために書いたスクリプトは次のとおりです。

On Error Resume Next

Set objSysInfo = CreateObject("ADSystemInfo") 'Bind to AD
Set objNet = CreateObject("WScript.Network")

strCompDN = objSysInfo.ComputerName 'DN for computer, e.g. "CN=VISTAWORKSTATION,OU=Child OU Name,OU=Parent OU Name,DC=domain,DC=com"
Set objComp = GetObject("LDAP://" & strCompDN) 'IADsComputer object

strUserDN = objSysInfo.UserName 'DN for user, e.g. "CN=John Smith,OU=Child OU Name,OU=Parent OU Name,DC=domain,DC=com"
Set objUser = GetObject("LDAP://" & strUserDN) 'IADsUser object

strUsrLogin = LCase(objNet.UserName)

strNow = Now
strDateStamp = DatePart("yyyy",strNow) & _
    Right("0" & DatePart("m",strNow), 2) & _
    Right("0" & DatePart("d",strNow), 2) & _
    "@" & _
    Right("0" & DatePart("h",strNow), 2) & _
    Right("0" & DatePart("n",strNow), 2)

'RegExp object used to perform a simple match on IP address
Set objRE = New RegExp
objRE.IgnoreCase = True
'Note this regexp pattern isn't "correct" for matching an IPv4 address properly, but since WMI will return an
'array of IP addresses, this is sufficient to distinguish IPv4 vs IPv6
objRE.Pattern = "^\d+\.\d+\.\d+\.\d+$"

strIP = ""

'Connect to WMI and retreive all network adapters
Set objWMI = GetObject("winmgmts:")
Set colNICs = objWMI.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration")

'Get the IP(s) assigned to whichever network adapter has our default gateway
If colNICs.Count > 0 Then
    For Each objNIC in colNICs
        If IsArray(objNIC.DefaultIPGateway) Then
            arrIP = objNIC.IPAddress
            For i = 0 To UBound(arrip)
                If objRE.Test(arrIP(i)) Then strIP = strIP & " " & arrIP(i)
            Next
            strMAC = objNIC.MACAddress
        End If  
    Next
End If

strIP = Trim(strIP)

objComp.Description = strDateStamp & " " & strUsrLogin & " " & strIP
objComp.Put "extensionAttribute1", strUsrLogin
objComp.Put "extensionAttribute2", strIP
objComp.Put "extensionAttribute3", strMAC

objComp.SetInfo
10
ThatGraemeGuy

同様の理由で同じ結果を達成する必要がありました。どういうわけか、特定のユーザーがログインしたマシンを判別します。私は「事実の前に」知りたいと思っていたので、上記のようにユーザーのログインスクリプトを変更できませんでした。
セキュリティイベントログを解析するために、ユーザーが認証していたDC=)でPowerShellを使用しました。

get-eventlog "Security" | where {$_.Message -like "*Username*" -AND "Source Network Address"} | export-csv C:\Temp\test.csv

Excelまたはfavエディターで.csvをクラックして開き、同じイベント内のアカウント名(ユーザー名)とソースネットワークアドレスの両方を示す最新のエントリを探します。
これは100%信頼できるソリューションではないかもしれません(DHCPリース時間などによって異なります)が、私にとってはうまくいきました。

6
marcusjv

アカウントログオンイベントに対して 監査を有効にする を実行できます。これらの イベント (ワークステーションのロック解除を含む)は、DCのセキュリティログに保存されます。

True Last Logon など、これを簡単に行えるサードパーティツールもあります。

6
Adam Brand

ログオンスクリプトを使用して、ユーザー名(および日付、時刻、一部のプログラムバージョンなどの他の情報)をコンピューターの説明に書き込むだけです。そうすれば、ADのユーザーとコンピューターからすべての情報をすばやく簡単に取得できます。また、ボーナスとして、まだAD内にあるどのPCがしばらく使用されていないかを特定するための良い方法があります。

4
Maximus Minimus

ThatGraemeGuy、すばらしいスクリプトに感謝します! PowerShellで書き直す必要がありましたが、それでも機能します。

$CompDN = "(&(objectCategory=computer)(objectClass=computer)(cn=$env:COMPUTERNAME))"
$strCompDN = [string]([adsisearcher]$CompDN).FindOne().Properties.distinguishedname
$objComp = [ADSI]("LDAP://"+$strCompDN)

# quit if computer is a server or DC
if (($strCompDN -like '*Controller*') -or ($strCompDN -like '*SERVER*')) { exit }

$strUsrLogin = $env:username
$strDateStamp = Get-Date -f 'yyyy-MM-dd@HH:mm'
$IPPattern = "^\d+\.\d+\.\d+\.\d+$"

$colNICs = gwmi Win32_NetworkAdapterConfiguration
if ($colNICs.Count -gt 0) {
foreach ($objNIC in $colNICs){
        if ($objNIC.DefaultIPGateway) {
            $arrIP = $objNIC.IPAddress
            for ($i=0; $i -lt $colNICs.Count; $i++) { 
            if ($arrIP[$i] -match $IPPattern) { $strIP = $arrIP[$i]; $strMAC = $objNIC.MACAddress }
            }
        }
    }
}

$objComp.Description = $strDateStamp + " - " + $strUsrLogin + " - " + $strIP
$objComp.extensionAttribute1 = $strUsrLogin
$objComp.extensionAttribute2 = $strIP
$objComp.extensionAttribute3 = $strMAC
$objComp.SetInfo()
3

Adamからの提案以外に、ユーザーが最後にログインした場所を特定するための秘訣は、ログの集計です。複数のドメインコントローラーがある場合は、それらすべてを確認するか、ログを集中管理してから単一のログを確認する必要があります。

一部の、場合によってはほとんどのサードパーティツールも、すべてのドメインコントローラーにクエリを実行できるほどスマートです。しかし、スクリプトを書いて自分で解析することを考えているのであれば、ログを集中化するのに十分なほど強力な議論はできません。

2
Laura Thomas

理想的には、CSIRTチームが招待状を支援するために以下をキャプチャします。

ワークステーション名でログインするユーザーID MACアドレスIPアドレス日付/タイムスタンプログインタイプ(rdp、interfactiveなど)

次に、それをsqlコマンドでデータベースにダンプし、クエリできるようにします。ビットとピースはあらゆる場所で記録されますが、これを記録すると、DHCP/WINSサーバーなどからデータを取得する時間を節約できます。

1
Scott

これを上記のmarcusjvの回答へのコメントとして追加するつもりでしたが、評判がないため、別の回答で行う必要があります。

その式では-AND "Source Network Address"は常にTRUEと評価されます

私はあなたが必要とするものだと思います:get-eventlog "Security" |ここで、{$ 。Message -like "* username *" -AND $。Message.contains( "Source Network Address")}

1
SS64

aDにログイン

多くの場合、特定のログインが広告ユーザーグループの一部であるかどうかを知る必要があります。または、ADグループを知り、すべてのログインがそのグループに属しているユーザーを知りたい場合もあります。

これを実現するには、さまざまな方法があります。

この手順に従って、ログインを簡単に見つけることができるショートカットをデスクトップに作成します。次の手順に従ってください。

START-> RUN-> rundll32 dsquery、OpenQueryWindow

これを使用して、自分が属しているすべてのADを見つけることができます。

スタート->設定->コントロールパネル->管理者ツール-> Active Directoryユーザーとコンピュータログインを検索するドメインを選択し、そのドメインを右クリックして[検索]オプションを選択します。

0
Lepide

最新の情報を入手する唯一の方法は、ログを探すことです。 Microsoft Operations Managerなどのツールまたはsnareなどの無料ツールを使用して、サーバーから中央の場所(通常のテキストファイルまたはSQLデータベース)に興味深いイベントログを集約し、次にlogparserまたはSQLクエリなどのツールを使用して、必要なレポートを生成します。

さまざまなイベントのさまざまなイベントIDを見つけるには、次の手順を実行します イベントログエンサイクロペディア

この方法を使用したい場合は、ログパーサー用の適切なクエリの作成をお手伝いします。

0
KAPes

履歴参照を探している場合は、Motivate Systemsの Logon Central などのサードパーティツールを試すことができます。すべてのActive Directoryユーザーログオンを記録し、データマイニング用のWebインターフェイスを提供します。また、ログオン統計を使用率に変換するかなり優れたグラフも含まれています。

0
Scott