Как распечатать данные из hashTable с переменной? - PullRequest
0 голосов
/ 04 января 2019

Я хотел бы распечатать данные из таблицы. Когда я использую 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
}

Кто-нибудь может мне помочь?

Ответы [ 2 ]

0 голосов
/ 04 января 2019

$ выбрано не целое число

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

Усовершенствуйте свой метод выбора

Возможно, вы сможете улучшить выбранную вами систему в зависимости от необходимой сложности вашей задачи.

0 голосов
/ 04 января 2019

Ваша проблема - это тип элемента, используемого в качестве ключа. 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...