Я думаю, что ошибка возникает из-за того, что в -FilterHashtable
не указаны правильные типы данных для $Startdate
и $Enddate
.
Вы проверяете, имеет ли пользовательский ввод допустимый формат DateTime, но сами переменные остаются строковыми.
-FilterHashtable
требует, чтобы эти параметры были DateTime
объектами, как показано в таблице ниже:
Key name Value data type
--------------- ---------------
LogName <String[]>
ProviderName <String[]>
Path <String[]>
Keywords <Long[]>
ID <Int32[]>
Level <Int32[]>
StartTime <DateTime>
EndTime <DateTime>
UserID <SID>
Data <String[]>
Попробуйте это:
$creds = Get-Credential -Message "Please enter creds"
# Create variable for parsed start date
[datetime]$Startdate = Get-Date
do {
$input = Read-Host -Prompt "Enter your start date. Use format 'mm/dd/yyyy hh:mm:ss am'"
# Check the user input
$success = ([DateTime]::TryParse($input,
[System.Globalization.CultureInfo]::GetCultureInfo("en-US"),
[System.Globalization.DateTimeStyles]::None,
[ref]$Startdate))
} while (!$success)
# Create variable for parsed end date
[datetime]$Enddate = Get-Date
do {
$input = Read-Host -Prompt "Enter your end date. Use format 'mm/dd/yyyy hh:mm:ss am'"
# Check the user input
$success = ([DateTime]::TryParse($input,
[System.Globalization.CultureInfo]::GetCultureInfo("en-US"),
[System.Globalization.DateTimeStyles]::None,
[ref]$Enddate))
} while (!$success)
$Logs = @()
while ($true) {
$logName = Read-Host -Prompt "Please enter in the name of a log"
if ([string]::IsNullOrEmpty($logName)) { break }
$Logs += $logName
}
$table = foreach ($Log in $Logs) {
# note that we use [DateTime] objects $Startdate and $Enddate
Get-WinEvent -FilterHashtable @{LogName=$Log;StartTime=$Startdate;EndTime=$Enddate} -Credential $creds
}
$table | Sort-Object TimeCreated | Format-Table TimeCreated, Logname, Source, Message -Wrap