我可以使用以下代码创建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
答案 0 :(得分:1)
尝试使用此代码作为基本示例,并根据需要对其进行重新设计:
$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)
"
}
答案 1 :(得分:0)
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以不打印任何内容,然后添加空白“”以使其正确打印出来。查看结果;