有没有办法将powershell字符串转换为哈希表?

时间:2014-04-07 23:51:15

标签: powershell

有没有办法告诉powershell从一个字符串构造一个哈希表,该字符串是使用正常语法格式化创建哈希表内联的?

例如,有没有办法做类似的事情:

$fooHashString = "@{key='value'}
$fooHash = TellPowershellToEvaluateSpecialStringExpressions($fooHashString)
$fooHash

Name                           Value
----                           -----
key                            value

4 个答案:

答案 0 :(得分:3)

嗯,发布后不久,我偶然发现了答案。我只需要使用" Invoke-Expression"对字符串的命令。

$fooHashString = "@{key='value'}
$fooHash = Invoke-Expression $fooHashString
$fooHash

Name                           Value
----                           -----
key                            value

答案 1 :(得分:1)

使用Invoke-Expression被认为是代码气味的原因有很多。有关此

的详细信息,请参阅以下博文

如果您使用的是PowerShell 3.0或更高版本,则另一种方法是使用ConvertFrom-StringData。您可以在MSDN页面ConvertFrom-StringData

上找到有关如何使用此功能的详细信息

在您的情况下,您可以使用以下内容来创建HashTable

public class MainActivity extends AppCompatActivity 
    implements TopListCursorAdapter.TopListClickListener // see here

    // private ... topAdapter, bottomAdapter;

    @Override
    public void onTopListClick(int position) {
        // Make sure parameters match the interface ^^^


        // TODO: Get data from topAdapter
        // TODO: database update or arraylist.add to change bottomAdapter
        bottomAdapter.notifyDataSetChanged(); // Update the UI
    }

    // Other code can remain the same

或者,您可以在此处使用此字符串生成内容

$HashString = "key1=value1 `n key2=value2"
ConvertFrom-StringData -StringData $HashString

不幸的是,如果在字符串中包含$HashString = @' key1 = value1 key2 = value2 '@ ConvertFrom-StringData -StringData $HashString ,这将无效,因为\ CmdLet将其视为转义字符。

答案 2 :(得分:0)

我认为这里是一个更好的答案:

https://www.reddit.com/r/PowerShell/comments/2vqxpu/hashtable_string_to_hashtable_object/cokcfmq/

您想使用ScriptBlock

答案 3 :(得分:0)

$fooHashString = "@{key='value'}" 
$fooHashString -replace '@{' -replace '}' -replace ';',"`n" -replace "'" |
  ConvertFrom-StringData

Name                           Value
----                           -----
key                            value