首页 > 解决方案 > Powershell 拆分和修剪以删除空格和逗号

问题描述

我有一个 az 命令的输出,它给了我大约 50 行,我想将每一行输入到一个 foreach 循环中以更改一些配置。问题是每一行都以逗号结尾,并且输出的开头和结尾都有一个 [ ] 字符。举个例子

[
  "/subscriptions/11c112-f823-4d5a-8615-8b96d08caf35/resourceGroups/resource-group-name/providers/Microsoft.Web/sites/website-name-1",
  "/subscriptions/11c112-f823-4d5a-8615-8v9f9s9a9c9a/resourceGroups/resource-group-name/providers/Microsoft.Web/sites/website-name-2",
  "/subscriptions/11c112-f823-4d5a-8615-8b96d08caf35/resourceGroups/resource-group-name/providers/Microsoft.Web/sites/website-name-3"
]

我需要完成一个列表,其中仅包含“”中的文本的新行,我尝试将其保存为变量并执行 $variable.split(",") 但这给了我没有逗号,之间的空白行每个,我仍然有 [] 字符。有人可以帮我指导吗?

标签: powershellvariablessplittrim

解决方案


由于您有一个 Json 输出,因此您可以做的最好的事情是使用ConvertFrom-JsonandConvertTo-Json函数将您的 json 字符串转换为 PSCustom 对象表示。

这些将允许您将 Json 字符串转换为对象,轻松进行所需的操作,而无需处理字符转义和直接使用字符串。

然后,当您结束时,如果您再次需要 Json,您可以轻松地将其转换回来。ConvertTo-Json将为您处理所有事情(字符转义、格式化等)。

这是一个例子。

$AzCommandOutput = 
@'
[
  "/subscriptions/11c112-f823-4d5a-8615-8b96d08caf35/resourceGroups/resource-group-name/providers/Microsoft.Web/sites/website-name-1",
  "/subscriptions/11c112-f823-4d5a-8615-8v9f9s9a9c9a/resourceGroups/resource-group-name/providers/Microsoft.Web/sites/website-name-2",
  "/subscriptions/11c112-f823-4d5a-8615-8b96d08caf35/resourceGroups/resource-group-name/providers/Microsoft.Web/sites/website-name-3"
]
'@  | ConvertFrom-Json

$MyArray = [System.Collections.Generic.List[PSObject]]$AzCommandOutput


for ($i = 0; $i -lt $MyArray.Count; $i++) {
    # Do needed manipulation
    $MyArray[$i] = $MyArray[$i] -replace 'resource-group-name','My-Resource-Group'
}

#If ever you need the oputput in json format again... 
$NewOutput = $MyArray | ConvertTo-Json

推荐阅读