我正在编写一个简单的脚本,但是我为什么某个东西不起作用而傻眼了。我的脚本计算计算机已打开的时间并将其打印到屏幕上。如果我只打印一次然后退出,格式化就可以了。但是,如果我将它放在一个循环中以便不断更新,则格式化将关闭,即使我有线程休眠。这是代码:
打印并退出
Clear-Host
$Booted = (Get-WmiObject Win32_OperatingSystem).LastBootUpTime
$Booted = [Management.ManagementDateTimeConverter]::ToDateTime($Booted)
echo " ____________"
echo " Hours Worked"
echo " ____________"
$now = [datetime]::now
New-TimeSpan -Start $Booted -End $now | Select-Object -Wait Hours, Minutes
及其输出:
____________
Hours Worked
____________
Hours Minutes
----- -------
2 22
循环
Clear-Host
$Booted = (Get-WmiObject Win32_OperatingSystem).LastBootUpTime
$Booted = [Management.ManagementDateTimeConverter]::ToDateTime($Booted)
do {
Clear-Host
echo " ____________"
echo " Hours Worked"
echo " ____________"
$now = [datetime]::now
New-TimeSpan -Start $Booted -End $now | Select-Object -Wait Hours, Minutes
Start-Sleep -m 1000
} while (1)
及其刷新输出
____________
Hours Worked
____________
2 30
我知道这不是什么大问题,但我认为理解这个问题将有助于我更好地理解Powershell脚本。
提前感谢您的帮助。
答案 0 :(得分:2)
我认为这可能就是你要做的事情:
$lastBoot = [Management.ManagementDateTimeConverter]::
ToDateTime((Get-WmiObject Win32_OperatingSystem).LastBootUpTime)
while ( $true ) {
$timeWorked = (Get-Date) - $lastBoot
Clear-Host
[PSCustomObject] @{
"Hours" = $timeWorked.Hours
"Minutes" = $timeWorked.Minutes
} | Out-String
Start-Sleep 1
}