我正在嘗試撰寫一個用于監視作業的 PowerShell 5.1 腳本。我在撰寫正確的 Get-Job 表時遇到問題,以下是我所擁有的。
Get-Job | Format-Table -AutoSize -Property name, state, @{name = 'Runtime'; Expression = {$((get-date)-($_.psbegintime)).ToString('HH:mm')}}
此代碼回傳的是一個命名作業和狀態的表,但確實填充了運行時列。如果我從代碼中洗掉它,但它會以HH:mm:ss:fffffff的格式使用Hour:Minute:Second:Millisecond.ToString('HH:mm')填充運行時列。如何洗掉秒和毫秒部分?
uj5u.com熱心網友回復:
.ToString(HH:mm)不起作用的原因是因為:
Get-Date - $_.PSBeginTime
不是datetime物件,是timespan物件。呼叫物件會.ToString(HH:mm)引發timespan以下例外:
MethodInvocationException:使用“1”引數呼叫“ToString”的例外:“輸入字串的格式不正確。”
根據TimeSpan.ToString MS Docs格式是可能的,但格式是.ToString('hh\:mm\:ss').
在這里,您有一個如何實作您正在尋找的示例:
$testJobs = 5
$jobs = 1..$testJobs | ForEach-Object {
Start-Job {
'Hello from Job {0}' -f $using:_
Start-Sleep ([random]::new().Next(5,10))
}
}
while($jobs.State -contains 'Running')
{
Clear-Host
Get-Job | Format-Table -AutoSize -Property Name, State, @{
Name = 'Runtime'
Expression = {
([datetime]::Now - $_.PSBeginTime).ToString('hh\:mm\:ss')
# .ToString('hh\:mm') for Hours and Minutes only.
}
}
Start-Sleep 1
}
$jobs | Receive-Job -Wait -AutoRemoveJob
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/412548.html
標籤:
