Невозможно использовать переменную даты - PullRequest
0 голосов
/ 20 сентября 2019

Я все еще новичок в PowerShell, и что я делаю сейчас, если у меня есть какие-то требования, я буду искать в Интернете и изменять код так, как мне нужно.

Прямо сейчас я пытаюсьдля извлечения пользовательских логинов RDP с наших серверов.Мне удалось получить некоторые коды, обновить его, чтобы я мог запустить его удаленно через команду invoke.Тем не менее, у меня возникла проблема с одной из переменных, при которой, если я поставлю значение даты, например, 1 сентября 2019 года или 01.09.2009, сценарий будет работать.Но если я использую (Get-Date) .AddDays (-7), это не сработает.Вчера я тестировал этот сценарий весь день, и до сих пор не могу заставить его работать: (

) У этой части кода возникают проблемы:

#$StartDate = (Get-Date).AddDays(-7).ToString("dd-MMM-yyyy") #--> does not work
#$StartDate = (Get-Date).AddDays(-7)   #--> does not work
#$StartDate = "1-Sep-2019"  #--> Works
$StartDate = "9/1/2019"  #--> Works

И вот полный сценарий, который я тестирую. Спасибо, если кто-то может дать подсказку о том, как сделать эту работу без использования статической даты. Заранее спасибо за помощь!

Start-Transcript -path "D:\temp\Get-User-Logins_$(Get-Date -f yyyyMMddHHmm).log"

$Computers = Get-Content "D:\temp\Server list.txt"

Write-Output "Processing the computers"

$LogEntries = Invoke-Command -Computername $Computers -Authentication NegotiateWithImplicitCredential -ThrottleLimit 10 -ErrorAction "SilentlyContinue" -Scriptblock {
    # Get the date 7 days ago as start date
    #$StartDate = (Get-Date).AddDays(-7).ToString("dd-MMM-yyyy") #--> does not work
    #$StartDate = (Get-Date).AddDays(-7)   #--> does not work
    #$StartDate = "1-Sep-2019"  #--> Works
    $StartDate = "9/1/2019"  #--> Works

    $LogOutput = @()

    $LogFilter = @{
        LogName = 'Microsoft-Windows-TerminalServices-LocalSessionManager/Operational'
        ID = 22 
        StartTime = $StartDate
    }

    $LogOutput = Get-WinEvent -FilterHashtable $LogFilter

    $LogOutput | Foreach { 
        $entry = [xml]$_.ToXml()
        [array]$EVOutput += New-Object PSObject -Property @{
            TimeCreated = $_.TimeCreated
            User = $entry.Event.UserData.EventXML.User
            IPAddress = $entry.Event.UserData.EventXML.Address
            EventID = $entry.Event.System.EventID
            EventRecordID = $entry.Event.System.EventRecordID
            ServerName = $env:COMPUTERNAME
        }        
    } 

    $EVOutput
}

Write-Output "Writing the output to the file"

$FilteredOutput += $LogEntries | Select ServerName, TimeCreated, User, IPAddress, EventRecordID, @{Name='Action';Expression={
            if ($_.EventID -eq '22'){"Shell start"}
    }
}


    $FilePath = "D:\temp\$(Get-Date -f yyyyMMddHHmm)_RDP_Report.csv"
    $FilteredOutput | Sort -Property ServerName, TimeCreated | Export-Csv $FilePath -NoTypeInformation

Write-Output "Writing File: $FilePath"
Write-Output "Done!"

Stop-Transcript

1 Ответ

0 голосов
/ 20 сентября 2019

До сих пор не уверен, почему использование переменной $ StartDate не работает для хеш-таблицы, но мне удалось наконец-то найти решение для моего требования.В случае, если кто-то заинтересовался, я больше не использовал отдельную переменную хеш-таблицы ($ LogFilter в моем скрипте) и вместо этого использовал следующие строки:

$StartDate = (Get-Date).AddDays(-7).ToString("dd-MMM-yyyy")
$LogOutput = Get-Winevent -logname Microsoft-Windows-TerminalServices-LocalSessionManager/Operational | where {$_.TimeCreated -gt $StartDate -and $_.Id -eq "22"}

Мне удалось получить требуемый результат с помощью этого, таким образом закрывая этот пост.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...