powershell - Powershell 中 ForEach-Object 的语法
问题描述
我有一个如下所示的有效 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
语句的一个衬里,但我想创建一个包含$_.Duration()
在我的 else 语句中的变量,而不是重复它。
我试过了,
$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}
}
这显然不是有效的语法(表达式或语句中的意外标记“返回”)。
显然我的目标是具有与上述相同的行为并返回格式化的字符串'{0}:{1}:{2:D2}:{3:D2}'
,但我找不到正确的语法。
解决方案
您可以使用分号在同一行输入多个命令:
$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
推荐阅读
- google-sheets - 将动态行数组与数据集匹配
- antlr4 - Xcode 警告:_startToken(startToken) 将在 _deleteConfigs(deleteConfigs) 之后初始化
- javascript - 如何在 gatsby 项目中包含自定义 javascript 文件?
- java - 是否可以使用 ByteBuddy 更改注释的值?
- javascript - 使用 babel-polyfill 后,classList.replace() 不是 IE11 中的方法或属性
- vba - 如何使用硬编码的月份和当前年份进行查询
- json - 使用 .values() 序列化模型,但也包括 ManyToMany 相关字段
- php - 无法使用 ContainerAware 命令功能调试 Symfony
- java - RecyclerView Adapter 不会膨胀正确的布局
- sql - 在 SQL Server 中运行过程的 IF 条件