请原谅我的术语,但我对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中的空白。
非常欢迎任何建议。
答案 0 :(得分:0)
使用dbid作为检索数据库名称的键看起来像这样。
@{n="DBName";e={$ht[$_.dbid]}}
假设dbid是查询结果中的一列。