【问题标题】:Variables in command when calling hashtable调用哈希表时命令中的变量
【发布时间】:2019-06-17 07:44:35
【问题描述】:

我正在尝试从如下所示的哈希表中获取一个值。

$Hashtable1AuthTestID = @{ 
    "BID_XPI" = "(id 2)";
    "MBID_XPI" = "(id 3)";
    "T_XPI" = "(id 4)";
    "ST_XPI" = "(id 5)";
    "SI_XPI" = "(id 6)";
    "T_SAML" = "(id 7)";
    "ST_SAML" = "(id 8)";
    "SI_SAML" = "(id 9)";
    "BID_SAML" = "(id 10)";
    "MBID_SAML" = "(id 11)";
}

如果我使用$Hashtable1AuthTestID.BID_XPI,它会正常工作,但由于这将是用于几种不同类型的数据(和环境)的通用脚本,我想在调用哈希表时包含几个变量,如下面的那个。

# Without variables (Example): $Hashtable1AuthTestID.BID_XPI 
# With variables (Example): $<Hashtable><Type><Environment>.<Method>

$hashtable = "Hashtable1"
$type = "Auth"
$environment = "Test"
$method = "BID_XPI"
# ID is the example is a string.

$'$hashtable1'$environment"ID".$method
$$hashtable1$environment+"ID".$method

我已经测试了几种不同的方法,但无法正常工作。我确实得到了正确的语法(如果我从变量中打印值),例如$Hashtable1AuthTestID.BID_XPI,但我没有从哈希表((id 2))中得到实际值。

【问题讨论】:

  • 您在示例哈希表中重复了 S_XPI 键,可能需要更正。
  • $environment = "Test" 缺少 ID。如果你用这些变量构建字符串,你会得到 $Hashtable1AuthTest.BID_XPI 而不是 $Hashtable1AuthTestID.BID_XPI

标签: powershell hashtable


【解决方案1】:

通过使用来自另一个变量的名称来引用单独命名的变量(尽管可能)是一种错误的方法。不要这样做。处理此类情况的规范方法是使用数组,如果您想通过索引访问数据结构或对象:

$hashtables = @()
$hashtables += @{
    "BID_XPI"  = "(id 2)"
    "MBID_XPI" = "(id 3)"
    ...
}

$hashtables[0].MBID_XPI

或哈希表,如果你想通过名称访问数据结构或对象:

$hashtables = @{}
$hashtables['Hashtable1AuthTestID'] = @{
    "BID_XPI"  = "(id 2)"
    "MBID_XPI" = "(id 3)"
    ...
}

$hashtable   = 'Hashtable1'
$type        = 'Auth'
$environment = 'Test'
$method      = 'BID_XPI'

$name = "${hashtable}${type}${environment}ID"

$hashtables.$name.$method

为了完整起见,以下是使用另一个变量的名称获取变量的方法,但同样不推荐。

$Hashtable1AuthTestID = @{
    "BID_XPI"  = "(id 2)"
    "MBID_XPI" = "(id 3)"
    ...
}

$hashtable   = 'Hashtable1'
$type        = 'Auth'
$environment = 'Test'
$method      = 'BID_XPI'

$name = "${hashtable}${type}${environment}ID"

(Get-Variable -Name $name -ValueOnly).$method

【讨论】:

    【解决方案2】:

    你可以使用Get-Variable:

    $hashtable = "Hashtable1"
    $type = "Auth"
    $environment = "Test"
    $method = "BID_XPI"
    
    (Get-Variable -Name "$($hashtable)$($type)$($environment)ID".).Value.$method
    

    【讨论】:

      【解决方案3】:

      如果你能够打印它,你可以调用它:

      $string = '${0}{1}{2}ID.{3}' -f $hashtable,$type,$environment,$method
      Invoke-Expression -Command $string
      

      【讨论】:

      猜你喜欢
      • 2019-05-25
      • 2011-08-24
      • 2013-03-21
      • 2013-09-27
      • 2015-03-26
      • 2013-05-18
      • 1970-01-01
      • 2013-08-29
      • 2014-09-08
      相关资源
      最近更新 更多