2013-07-23 14 views
0

我有一個腳本,它將一些文件複製到備份存儲。我添加了一個計時器,看看它會用多少時間來做這件事。我用在powershell中獲取更好的定時器輸出

$script:start = get-date 
$start = (Get-Date) 
copy-item $var0, $var1, $var2 Folders -force -recurse -verbose -Exclude name 
$endFulltime = (Get-Date) 
"$(($endFulltime-$startFulltime).totalminutes)" 

的問題,這是輸出,它給了我像0,34255234561245分鐘,如果我把它在幾秒鐘內,它只是看起來一樣,用不同的號碼。所以問題不是它給我一個錯誤的輸出,它看起來有點混亂。

是否有可能得到像5分鐘和43秒的輸出?而不是這個真正的長數字。

+0

有你定義的任何原因「開始」變量兩次? – Peter

+0

我正在回答「如問」(如何以更好的格式獲得輸出)的問題,但彼得說得對,如果您想獲得運行cmdlet或腳本所需的時間,那麼您應該使用**測量命令** –

+0

@adi inbar感謝您的鼓勵。我相信你的作品也是。對於同樣的事情只有兩種不同的方法。 – Peter

回答

1
measure-command {copy-item $var0, $var1, $var2 Folders -force -recurse -verbose -Exclude name} | select @{n="time";e={$_.Minutes,"Minutes",$_.Seconds,"Seconds",$_.Milliseconds,"Milliseconds" -join " "}} 

用於測量命令執行時間的測量命令。使用帶「select-object」的散列表來自定義輸出。

輸出是在我的實驗室(我使用:獲得過程」的測試cmdlet的):

time 
---- 
0 Minutes 0 Seconds 16 Milliseconds 

有一個‘duartion’屬性過我會鑽研它,看看是否能。可以簡化的東西。

2

只需使用分鐘屬性,而不是TotalMinutesTotalSeconds托特al - 屬性是雙精度浮點數,給出了給定單位時間內的總時間範圍,而僅僅是單位名稱(天,小時,分鐘,秒)的屬性爲您提供該單位的組件的時間跨度爲整數。因此,爲了得到「X分鐘和Ÿ秒」的輸出,這樣做:

$elapsedTime = $endFulltime - $start 
"{0} minute(s) and {1} second(s)" -f $elapsedTime.Minutes, $elapsedTime.Seconds 

,或者如果你願意,使第二行:

"$($elapsedTime.Minutes) minute(s) and $($elapsedTime.Seconds) seconds" 
相關問題