скрипт powershell - TimeGenerated Последние 24 часа - PullRequest
1 голос
/ 25 февраля 2020

У меня есть функциональный сценарий PowerShell, который я использую для регистрации пользовательских входов и выходов из системы на одной локальной машине. Сценарий работает нормально, но мне трудно вытащить последние 24 часа из текущей даты / времени. У меня есть $Date = [DateTime]::Now.AddDays(-1) в верхней части моего сценария, но, похоже, его игнорируют.

Может кто-нибудь сказать мне, что мне не хватает?

powershell
$Date = [DateTime]::Now.AddDays(-1)
$Date.tostring("MM-dd-yyyy_HH,mm,ss")
$UserProperty = @{n="user";e={(New-Object System.Security.Principal.SecurityIdentifier $_.ReplacementStrings[1]).Translate([System.Security.Principal.NTAccount])}}
$TypeProperty = @{n="Action";e={if($_.EventID -eq 7001) {"Logon"} else {"Logoff"}}}
$TimeProperty = @{n="Time";e={TimeGenerated}}
Get-EventLog System -Source Microsoft-Windows-Winlogon | select $UserProperty,$TypeProperty,$TimeProperty | export-csv -path C:\Temp\TrackLogin.csv -NoTypeInformation

1 Ответ

1 голос
/ 25 февраля 2020

Ваш текущий код очень ограничен, поскольку он вообще не взаимодействует с датой. Вот немного кода, который я использую в функции. Должно работать, если запускать от имени администратора.

$Days = 1
$Computer = $env:COMPUTERNAME

$events = @()
$events += Get-WinEvent -ComputerName $Computer -FilterHashtable @{ 
    LogName='Security'
    Id=@(4800,4801)
    StartTime=(Get-Date).AddDays(-$Days) 
}

$events += Get-WinEvent -ComputerName $Computer -FilterHashtable @{ 
    LogName='System'
    Id=@(7001,7002)
    StartTime=(Get-Date).AddDays(-$Days) 
}

$type_lu = @{
    7001 = 'Logon'
    7002 = 'Logoff'
    4800 = 'Lock'
    4801 = 'Unlock'
}

$ns = @{'ns'='http://schemas.microsoft.com/win/2004/08/events/event'}
$target_xpath = "//ns:Data[@Name='TargetUserName']"
$usersid_xpath = "//ns:Data[@Name='UserSid']"

If($events) {
    $results = ForEach($event in $events) {
        $xml = $event.ToXml()
        Switch -Regex ($event.Id) {
            '4...' {
                $user = (Select-Xml -Content $xml -Namespace $ns -XPath $target_xpath).Node.'#text'
                Break            
            }
            '7...' {
                $sid = (Select-Xml -Content $xml -Namespace $ns -XPath $usersid_xpath).Node.'#text'
                $user = (New-Object -TypeName 'System.Security.Principal.SecurityIdentifier' -ArgumentList $sid).Translate([System.Security.Principal.NTAccount]).Value
                Break
            }
        }
        New-Object -TypeName PSObject -Property @{
            Time = $event.TimeCreated
            Id = $event.Id
            Type = $type_lu[$event.Id]
            User = $user
        }
    }
    If($results) {
        $results | sort Time -Descending
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...