ForEach对象';powershell中的语法

ForEach对象';powershell中的语法,powershell,foreach,syntax,Powershell,Foreach,Syntax,我的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语句

我的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语句中创建一个包含
$\uUduration()
的变量,而不是重复它

我试过了

$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}'
,但我找不到正确的语法。

可以使用分号在同一行中输入多个命令:

$d = $_.Duration(); return (<expression>) }
这相当于你写的


您可以进一步缩短格式字符串(假设
$d
DateTime
对象):

甚至

$_.Duration() | Get-Date -UFormat %d:%H:%M:%S
'{0:dd}:{0:HH}:{0:mm}:{0:ss}' -f $d
$_.Duration() | Get-Date -UFormat %d:%H:%M:%S