如何从带有变量的hashTable中打印数据?

时间:2019-01-04 14:51:56

标签: powershell hashtable

我想从表格中打印数据。当我使用读取主机时,此代码不起作用。

我该怎么做? (对不起,我的英语)。

我的代码在这里:

$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)

$SqlConnection.Close()
$cureentData = Get-Date -format "yyyy-M-d"

$table = $DataSet.Tables[0]

$i=0;
$hash = @{};     
foreach ($row in $table)
{

 $hash.Add(($i),(@{ 
'app_id' = ($row.app_id) 
 'app_guid' = ($row.app_guid) 
 'app_nazwa_pliku' = ($row.app_nazwa_pliku) 
})) 

Write-Host [$i] "Nr sprawy:" $row.sp_numer "Zakończono:" $row.ak_zakonczono"-" $row.app_guid ;
$i++;
}

 if($table.Rows.Count -gt 1)
  {
   $selected = Read-Host -Prompt 'Który z plików chcesz zmienić?';
   ($hash.$selected).app_guid; #working only if $selected is $selected=5 without Read-Host
   ($hash[$selected]).app_guid; #working only if $selected is $selected=5 without Read-Host
   ($hash.5).app_guid; #working, but i need use variable
}

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

$ selected不是整数

Read-Host将始终返回字符串。您使用数字键构建了哈希表。因此,以最简单的形式,您需要从输入中强制转换整数。

[int]$selected = Read-Host -Prompt 'Który z plików chcesz zmienić?';

$selected = (Read-Host -Prompt 'Który z plików chcesz zmienić?') -as [int];

请注意,由于可以在Read-Host中键入任何内容,因此在尝试将数据用作整数之前,应进行一些数据验证。

更改哈希表

您还可以通过在哈希表生成中使用字符串来降低这种复杂性

$hash.Add(("$i"),(@{   

使用这种方法,您不必更改Read-Host提示输出

改进您的选择方法

您可能可以improve your choice system,具体取决于任务所需的复杂性。

答案 1 :(得分:1)

您的问题似乎是用作钥匙的物品的类型。 Read-Host返回一个[string] ...,因此您从中得到的数字是数字字符串,而不是[int]。将其强制为[int]即可进行查找。 [咧嘴]这是一个例子...

$HashTable = @{}
foreach ($Index in 0..10)
    {
    $HashTable.Add($Index, 
        @{
        Pow2 = [math]::Pow($Index, 2)
        Pow3 = [math]::Pow($Index, 3)
        })
    }

$HTKey = [int](Read-Host 'Enter a number from 0 to 10 to see the cube of it ')

$HashTable[$HTKey].Pow3

输入的数字= 3
结果= 27