如何将PowerShell提取配置项的3行代码改写为单条管道命令
你遇到的报错是因为PowerShell管道后仅允许输入命令,不能直接放处理表达式,针对管道传入对象的操作需要放在ForEach-Object的脚本块{}中执行。
符合要求的单管道实现
和你原有逻辑完全对齐的写法:
$smtp = $data | Select-String SMTP_SERVER | ForEach-Object { ($_ -split ' ')[2] }
如果追求代码简洁,可以用ForEach-Object的别名%简化:
$smtp = $data | Select-String SMTP_SERVER | % { ($_ -split ' ')[2] }
更稳妥的优化写法
原有按单个空格分割的逻辑,在配置行存在多个空格、制表符分隔时会出错,推荐按「等号+前后任意空白」作为分割符,兼容性更强:
$smtp = $data | Select-String SMTP_SERVER | % { ($_ -split '\s*=\s*')[1] }
也可以直接利用Select-String的正则匹配能力直接取值,无需手动分割:
$smtp = $data | Select-String 'SMTP_SERVER\s*=\s*(.*)' | % { $_.Matches.Groups[1].Value }
内容的提问来源于stack exchange,提问作者Shahar
相关产品推荐
相关产品推荐

