将哈希表查找引入管道的困难

时间:2018-01-18 10:29:29

标签: powershell

请原谅我的术语,但我对Powershell很新。 我正在尝试编写从invoke-sqlcmd获取输出的代码,然后使用哈希表(从数据库ID到数据库名称)转换对象。我的代码如下: -

$ht=@{}
invoke-sqlcmd -serverinstance $dsname -query "select id=database_id,name=name from sys.databases" |
  Select-Object id,name |
  Foreach-Object {$ht.Add($_.id,$_.name)}

$DBCCShrinkOutput += Invoke-Sqlcmd -ServerInstance $dsname -Database master -inputfile $DBCCFile |
  Select-Object @{n="Instance";e={$dsname}},
    **@{n="DBName";e={$ht.$($_.dbid)}},** 
    FileID, 
    CurrentSize,
    MinimumSize, 
    UsedPages, 
    EstimatedPages |
  Sort-Object

问题在于,无论@和$的任何组合在DBName转换中尝试,它都不会从$ ht哈希表中获取任何值,尽管该表已正确填充,并且弹出了管道DBName中的空白。

非常欢迎任何建议。

1 个答案:

答案 0 :(得分:0)

使用dbid作为检索数据库名称的键看起来像这样。

@{n="DBName";e={$ht[$_.dbid]}}

假设dbid是查询结果中的一列。