如何使用变量打印哈希表中的数据?
How to print data from hashTable with variable?
我想打印来自 table 的数据。当我使用 Read-Host 时,此代码不起作用。
我该怎么做?
(对不起我的英语)。
我的代码在这里:
$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
}
有人可以帮助我吗?
您的问题似乎是用作密钥的项目的类型。 Read-Host
returns a [string]
...所以你从中得到的数字是一个数字字符串,而不是 [int]
。将其强制为 [int]
并且查找有效。 [grin] 这是一个例子...
$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
$selected 不是整数
Read-Host
将始终是 return 个字符串。您使用 数字键 构建了哈希 table。因此,以最简单的形式,您需要从输入中强制转换为整数。
[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
中键入任何内容,因此您应该在尝试将数据用作整数之前进行一些数据验证。
更改哈希值table
您还可以通过在哈希 table 生成中使用字符串来降低这种复杂性
$hash.Add(("$i"),(@{
使用这种方法,您不必更改 Read-Host
提示输出
改进你的选择方法
您或许可以 ,具体取决于您的任务所需的复杂程度。
我想打印来自 table 的数据。当我使用 Read-Host 时,此代码不起作用。
我该怎么做? (对不起我的英语)。
我的代码在这里:
$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
}
有人可以帮助我吗?
您的问题似乎是用作密钥的项目的类型。 Read-Host
returns a [string]
...所以你从中得到的数字是一个数字字符串,而不是 [int]
。将其强制为 [int]
并且查找有效。 [grin] 这是一个例子...
$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
$selected 不是整数
Read-Host
将始终是 return 个字符串。您使用 数字键 构建了哈希 table。因此,以最简单的形式,您需要从输入中强制转换为整数。
[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
中键入任何内容,因此您应该在尝试将数据用作整数之前进行一些数据验证。
更改哈希值table
您还可以通过在哈希 table 生成中使用字符串来降低这种复杂性
$hash.Add(("$i"),(@{
使用这种方法,您不必更改 Read-Host
提示输出
改进你的选择方法
您或许可以