我想从表格中打印数据。当我使用读取主机时,此代码不起作用。
我该怎么做? (对不起,我的英语)。
我的代码在这里:
$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
}
有人可以帮助我吗?
答案 0 :(得分:2)
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