Цитата:
Цитата DJ Mogarych
Я вот тут реализовал подобное »
|
Несколько раз смотрел код и не понял ничего, но спасибо!
За то пришла идея своего решения: я просто каждый цикл добавляю значения в хеш таблицу, далее в pscustomobject, экспорт в таблицу. Получается нужный результат, на локальном ПК, но мне нужно делать эти вычисления на удаленных машинах, а получать только результат.
Далее я завернул это в invoke сессию и хотел получать от сессии только хеш таблицу и даже получил, но с одним минусом. Минус в том, что порядок столбцов поменялся, хотя я указывал [ordered] и это работало для локального использования, но когда получаю таблицу из сессии то порядок меняется, как будь-то свойство [ordered] теряет силу.
Позже подумал, да и ладно, могу же получить сразу pscustomobject и сделал это, но и тут косяк, но совсем небольшой. В таблицу добавляются данные, которые мне не нужны, три столбца в конце.
То есть у меня всегда какие-то проблемы с получением данных из invoke сессии в нужном виде. Меня уже устраивает результат, но я и в будущем в других задачах хочу получать данные из сессий, поэтому надо бы разобраться.
скрипт
Код:
$outfile = "D:\PowerShell\uptime\test.csv"
$comp = "r48-ser"
$s = New-PSSession $comp
Invoke-Command -Session $s {
$dates = @(0..7)
$hashtable = [ordered]@{computername = $env:COMPUTERNAME}
foreach ($date in $dates){
$0 = (Get-Date).AddDays(-$date).ToShortDateString()
$CurrentTime = [System.DateTime]::Parse(((Get-Date).AddDays(-$date)).ToString("yyyy.MM.dd"))
$Time = [System.Timespan]::Parse("00:00:01")
$adddate = $CurrentTime.Add($Time)
$CurrentTime2 = [System.DateTime]::Parse(((Get-Date).AddDays(-$date)).ToString("yyyy.MM.dd"))
$Time2 = [System.Timespan]::Parse("23:59:59")
$adddate2 = $CurrentTime2.Add($Time2)
$add = Get-Eventlog -logname System | Where-Object {$_.TimeGenerated.ToShortDateString() -eq $0}
$add1 = @([pscustomobject]@{Index='00000';EntryType='00000';InstanceId='00000';Message='00000';Category='00000';CategoryNumber='00000';ReplacementStrings='00000';Source='00000';TimeGenerated=$adddate;TimeWritten='00000';UserName='00000';})
$add2 = @([pscustomobject]@{Index='00000';EntryType='00000';InstanceId='00000';Message='00000';Category='00000';CategoryNumber='00000';ReplacementStrings='00000';Source='00000';TimeGenerated=$adddate2;TimeWritten='00000';UserName='00000';})
$1 = $add + $add1 + $add2 | Sort-Object {Get-Date $_.TimeGenerated} -Descending
Clear-Variable -Name allsec, summ -Force -ErrorAction SilentlyContinue
$allsec = @(for ($index = 0; $index -lt $1.Count; $index++)
{if ($1.TimeGenerated[$index + 1] -ne $null -and $1.TimeGenerated[$index] -ne $1.TimeGenerated[$index + 1] ){
$2 = $1.TimeGenerated[$index] - $1.TimeGenerated[$index + 1]
if ($2.TotalSeconds -gt 5400){$2.TotalSeconds}}})
$allsec| foreach {$summ += $_}
$3 = ((86400 - $summ) - 2)
$ts = [timespan]::fromseconds($3)
$4 = "{0:HH:mm:ss}" -f ([datetime]$ts.Ticks)
Write-Host $0 uptime $4
$hashtable.Add($0,$4)
$ps_object = [pscustomobject]$hashtable
}}
$table = Invoke-Command -Session $s {$ps_object}
$table |export-csv $outfile -notype -enc utf8 -d ';' -append
пример результата
Код:
computername 07.10.2021 06.10.2021 05.10.2021 PSComputerName RunspaceId PSShowComputerName
r48-ser 18:30:06 23:59:58 23:59:58 r48-ser 7bde3992-2ff9-4499-a9e2-60b244e9c6b7 True
Как получать данные из сесии в хеш таблицах, но чтобы порядок столбцов не сбивался?!
Или как не получать в pscustomobject не нужные данные, которые так же появились именно при запросе из сессии?!
МБ вообще есть еще решения, которые будут полезны?!