PowerShell中如何用变量替换.NET方法名部分内容调用方法
PowerShell动态调用日期加减方法的单行实现
你不需要写If分支判断,直接用PowerShell原生支持的字符串形式动态成员访问就能实现,单行即可生效:
- 适用于PowerShell 3.0及以上版本(绝大多数日常使用的PowerShell环境都满足)的最简写法:
# 给$Time赋值为Days/Hours/Minutes/Months/Years等对应Add方法后缀即可 $Time = "Days" (Get-Date)."Add$Time"(-30)
这个写法和硬编码写(Get-Date).AddDays(-30)的执行逻辑完全一致:当$Time = "Hours"时,命令就等价于(Get-Date).AddHours(-30),会直接返回对应时间偏移后的DateTime对象。
- 如果需要兼容PowerShell 2.0等极老版本,可以用方法调用的Invoke重载实现,同样是单行:
$Time = "Days" (Get-Date).("Add" + $Time).Invoke(-30)
你最初尝试的
(Get-Date).Add$Time(-30)无法生效,是因为PowerShell解析器默认会把Add$Time识别为固定名称的成员,不会自动对$Time做插值替换,只要把拼接后的完整方法名用引号包裹为字符串,就可以触发动态成员解析。
内容的提问来源于stack exchange,提问作者user2893271
相关产品推荐
相关产品推荐

