首页 > 解决方案 > Powershell解析字符串中的命令

问题描述

在 powershell 脚本中,我有一个字符串形式的命令。我想知道是否有一种简单的方法可以以哈希图的形式提取参数。

输入 :

$str = "SampleCommandName -Arg1 Value1 -Arg2 Value2"
$command, $parameters = Some-Function $str
Write-Host $parameters[Arg1]

输出:值1

我尝试使用 ConvertFrom-StringData,但我的 PowerShell 版本不支持 Delimiter 参数。

标签: powershell

解决方案


您可以手动将其转换为哈希:

$str = "SampleCommandName -Arg1 Value1 -Arg2 Value2"

$hash = [ordered]@{}
$str.Split("-").Trim() | Where-Object { $_.Contains(" ") } | ForEach-Object { 
    $name, $value = $_ -split '\s+', 2
    $hash[$name] = $value
}

$hash

或者您可以使用ConvertFrom-StringData和正则表达式替换将名称和值之间的空格更改为=字符。您需要确保它只替换第一次出现,以免干扰值中的任何空格。

$str = "SampleCommandName -Arg1 Value1 -Arg2 Value2"
($str.Split("-").Trim() | Where-Object { $_.Contains(" ") }) -replace '([^\s]+)\s(.*)', '$1=$2' -join "`r`n" | ConvertFrom-StringData

没有正则表达式的替代方案:

$str = "SampleCommandName -Arg1 Value1 -Arg2 Value2"
($str.Split("-").Trim() | Where-Object { $_.Contains(" ") } | ForEach-Object { $_.Split(' ', 2) -join '=' }) -join "`r`n" | ConvertFrom-StringData

输出:

名称 值                                                                                                                                     
---- -----                                                                                                                                     
参数 1 值 1                                                                                                                                    
参数 2 值 2  

推荐阅读