我有一个有效的Powershell语句,如下所示,
$Uptime = $Uptime | ForEach-Object {
if($_ -eq "N/A"){return $_}else{'{0}:{1}:{2:D2}:{3:D2}' -f ($_.Duration()).Days,($_.Duration()).Hours,($_.Duration()).Minutes,($_.Duration()).Seconds}
}
其中$Uptime
是DateTime
对象的数组。
我喜欢我的else
语句的一个衬里,但是我想在else语句中创建一个包含$_.Duration()
的变量,而不是重复它。
我尝试过
$Uptime = $Uptime | ForEach-Object {
if($_ -eq "N/A"){return $_}else{ $d = $_.Duration() return '{0}:{1}:{2:D2}:{3:D2}' -f ($d).Days,($d).Hours,($d).Minutes,($d).Seconds}
}
显然是无效的语法(表达式或语句中的意外标记'return')。
很明显,我的目标是具有与上述相同的行为并返回格式化的字符串'{0}:{1}:{2:D2}:{3:D2}'
,但是我找不到正确的语法。
答案 0 :(得分:3)
您可以使用分号在同一行上输入多个命令:
$d = $_.Duration(); return (<expression>) }
您不需要return
,因为表达式返回的所有内容都将发送到输出流,该输出流已分配给变量$Uptime
。
$Uptime = $Uptime |
ForEach-Object {
if ($_ -eq "N/A") {
$_
} else {
$d = $_.Duration()
'{0}:{1}:{2:D2}:{3:D2}' -f $d.Days,$d.Hours,$d.Minutes,$d.Seconds
}
}
这等同于您写的内容。
您可以进一步缩短格式字符串(假设$d
是DateTime
对象):
'{0:dd}:{0:HH}:{0:mm}:{0:ss}' -f $d
甚至
$_.Duration() | Get-Date -UFormat %d:%H:%M:%S