【问题标题】:How to remove leading and trailing spaces in Powershell?如何删除 Powershell 中的前导和尾随空格?
【发布时间】:2021-09-13 12:29:18
【问题描述】:

我在哪里运行以下命令:

Write-Host '"os":"'(Get-CimInstance -ClassName CIM_OperatingSystem).Caption'",'

我得到以下输出:

"os":" Microsoft Windows 10 Pro ",

如何去除输出中的前导和尾随空格??

【问题讨论】:

  • 不,.replace(" ","") 正在删除单词之间的空格,而不是从开头和结尾
  • 顺便说一句:Write-Host is typically the wrong tool to use,除非意图是仅写入显示器,绕过成功输出流,并能够将输出发送到其他命令,将其捕获在变量中,或将其重定向到文件。要输出一个值,请单独使用它;例如,$value 而不是 Write-Host $value(或使用 Write-Output $value,尽管这很少需要);见this answer
  • 是的,之前我使用 write-output 将输出存储在文件中,但由于某种原因,我只需要在提示屏幕上获取值。所以这就是我使用 write-host 的原因。

标签: powershell


【解决方案1】:

这是因为您将 3 个不同的字符串参数传递给 Write-Host,然后 cmdlet 用空格分隔它们:

Write-Host '"os":"'(Get-CimInstance -ClassName CIM_OperatingSystem).Caption'",'
           \______/\______________________________________________________/\__/

改成

Write-Host """os"":""$((Get-CimInstance -ClassName CIM_OperatingSystem).Caption)"","

在这里,我们使用正确转义的引号创建 1(一个!)字符串,Write-Host 不会尝试添加任何空格。


如果目标是生成 JSON,我建议构建一个新对象并让 ConvertTo-Json 处理其余部分:

$data = [pscustomobject]@{
  os = (Get-CimInstance -ClassName CIM_OperatingSystem).Caption
}

$data |ConvertTo-Json

其输出将类似于:

{
    "os":  "Microsoft Windows 10 Enterprise"
}

【讨论】:

  • 谢谢兄弟:)
  • 干得好;还值得一提的是Write-Host永远不应该用于输出数据
猜你喜欢
  • 2012-02-28
  • 2018-10-04
  • 1970-01-01
  • 2012-03-06
  • 2021-08-10
  • 1970-01-01
  • 2020-08-20
  • 2019-07-03
  • 2015-03-11
相关资源
最近更新 更多