Создание CSV с переменными ConvertToDateTme - PullRequest
0 голосов
/ 12 февраля 2019

Я могу создать CSV из следующего кода, однако он не дает подробных сведений о «времени работы системы» в течение нескольких дней.

Он отображает часы и минуты без проблем, но вместо предоставлениячисло перед днями, просто выводит слово days.

Server  Last Rebooted     System Up Time
Srv1    25/07/2018 20:49  Days 12 Hours 37 Minutes
PC1     04/02/2019 15:55  Days 17 Hours 31 Minutes

Я пытался заключить переменную $Uptime в круглые скобки, но безрезультатно.Я также пытался $_.Days получить информацию без удачи.

$Path = "C:\Temp\Manual_Servers"
$Tx = "\Servers.txt"
$CS = "\Res.csv"
$File = $Path + $tx
$Server = GC $File
$Np = "\Res.txt"
$Res = $Path + $Np
$Res2 = $Path + $CS

function Uptime2 {
    $Server | ForEach-Object {
        $SF = $_
        $os = Get-WmiObject Win32_OperatingSystem -ComputerName $_ -ErrorAction SilentlyContinue
        $uptime = (Get-Date) - $os.ConvertToDateTime($os.LastBootUpTime)
        $OS |
            Select-Object @{Name="Server";Expression={$SF}},
                @{Name="Last Rebooted";Expression={($_.ConvertToDateTime($os.LastBootUpTime)).DateTime}},
                @{Name="System Up Time";Expression={$_.$uptime.Days + "Days " + $uptime.Hours + " Hours " + $uptime.Minutes + " Minutes" }} |
           Export-Csv $Res2 -NoClobber -NoTypeInformation -Append
    }
}
Uptime2

Желаемый результат:

Server  Last Rebooted     System Up Time
Srv1    25/07/2018 20:49  200 Days 12 Hours 37 Minutes
PC1     04/02/2019 15:55  9 Days 17 Hours 31 Minutes

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Bizzarely вот решение;

$Boot| Select-Object @{Name="Server";Expression={$SF}}, 
@{Name="Last  Rebooted";Expression={$($boot)}}, 
@{Name="System Up Time";Expression= {$Boot.$uptime.Seconds +""+ $uptime.Days + "  Days " + $uptime.Hours + " Hours " +  $uptime.Minutes + " Minutes "}}

| Export-CSv $Res2 -NoClobber -NoTypeInformation -Append 

Я должен был добавить $ uptime.seconds, чтобы ничего не печатать, а затем добавить пробел "" для правильной печати.Смотрите результаты;

enter image description here

0 голосов
/ 12 февраля 2019

Попробуйте использовать этот код в качестве базового примера и переработать его под свои нужды:

    $servers = 'COREDC01','COREDC02'
    $currentDT = Get-Date

    foreach ($i in $servers) {
        $BootTime = (Get-CimInstance -ComputerName $i -ClassName Win32_OperatingSystem).LastBootupTime
        $uptime = $currentDT - $BootTime

        Write-Output `
            -InputObject "Uptime for Server $i -
            Days:$($uptime.Days),
            Hours:$($uptime.Hours),
            Minutes:$($uptime.Minutes),
            Seconds:$($uptime.Seconds)
        "
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...