Powershell 如何创建关联数组,最好是一行数组?

Powershell 如何创建关联数组,最好是一行数组?,powershell,Powershell,我有这个: $str = "name = username`nemail = user@example.com" 它是LF分隔字符串,作为INI文件的一部分。我想创建关联数组,例如$vars['name']将返回'username'。以下是我将其拆分为行的方式: $vars = ([regex]'\n').Split($str) | %{ $_.Trim() } 我应该对上面的一行做什么更改?这不是一行,但一种方法是: $hashtable = @{}; $key_value_pairs =

我有这个:

$str = "name = username`nemail = user@example.com"
它是
LF
分隔字符串,作为INI文件的一部分。我想创建关联数组,例如
$vars['name']
将返回
'username'
。以下是我将其拆分为行的方式:

$vars = ([regex]'\n').Split($str) | %{ $_.Trim() }

我应该对上面的一行做什么更改?

这不是一行,但一种方法是:

$hashtable = @{};
$key_value_pairs = $str.Split("`n");
foreach($key_value in $key_value_pairs)
{
    $key_value_pair = $key_value.Split('=');
    $hashtable.Add($key_value_pair[0].Trim(), $key_value_pair[1].Trim());
}

首先将输入字符串拆分为一个数组,每个项目在一行中包含一个键值对。对于每个键值对,我们将它们拆分为“=”上的“键”和“值”,再次拆分为常规数组。键和值都会被修剪并添加到哈希表中。完成此操作后,
$hashtable[“name”]
将返回“username”,而
$hashtable[“email”]
将返回user@example.com“

这不是一条直线,但一种方法是:

$hashtable = @{};
$key_value_pairs = $str.Split("`n");
foreach($key_value in $key_value_pairs)
{
    $key_value_pair = $key_value.Split('=');
    $hashtable.Add($key_value_pair[0].Trim(), $key_value_pair[1].Trim());
}
首先将输入字符串拆分为一个数组,每个项目在一行中包含一个键值对。对于每个键值对,我们将它们拆分为“=”上的“键”和“值”,再次拆分为常规数组。键和值都会被修剪并添加到哈希表中。完成此操作后,
$hashtable[“name”]
将返回“username”,而
$hashtable[“email”]
将返回user@example.com“

如果您是Powershell 4的幸运所有者,那么您可以使用
ConvertFrom StringData
cmdlet:

$str=“name=username`nemail=user@example.com"
$vars=convertfromStringData$str
结果:

PS C:\>$vars
名称值
----                           -----
名称用户名
电子邮件user@example.com
如果您是Powershell 4的幸运所有者,那么您可以使用
ConvertFrom StringData
cmdlet:

$str=“name=username`nemail=user@example.com"
$vars=convertfromStringData$str
结果:

PS C:\>$vars
名称值
----                           -----
名称用户名
电子邮件user@example.com
一个更时髦的版本是这样的:

$vars = @{}
$str.Trim() -split "\s*`n\s*" | % {
  $key, $value = $_ -split '\s*=\s*'
  $vars[$key] = $value
}
使用
$vars[$key]=$value
而不是
$vars。添加($key,$value)
可避免出现重复键时的错误

您还可以将字符串拆分为交替的键和值字段数组,然后:

通过用分号分隔语句,可以将每个示例拼成一行:

$vars = @{}; $str.Trim() -split "\s*`n\s*" | % { $key, $value = $_ -split '\s*=\s*'; $vars[$key] = $value }
更时髦的版本的答案如下所示:

$vars = @{}
$str.Trim() -split "\s*`n\s*" | % {
  $key, $value = $_ -split '\s*=\s*'
  $vars[$key] = $value
}
使用
$vars[$key]=$value
而不是
$vars。添加($key,$value)
可避免出现重复键时的错误

您还可以将字符串拆分为交替的键和值字段数组,然后:

通过用分号分隔语句,可以将每个示例拼成一行:

$vars = @{}; $str.Trim() -split "\s*`n\s*" | % { $key, $value = $_ -split '\s*=\s*'; $vars[$key] = $value }

回答得好!此外,根据伟大的答案,PowerShell 3.0应该提供ConvertFrom StringData!另外,ConvertFrom StringData应该可以从PowerShell 3.0获得,根据我猜我不能否认我来自普通程序员背景:)我猜我不能否认我来自普通程序员背景:)