Ошибка при выполнении кода PowerShell - PullRequest
0 голосов
/ 07 июня 2018

Мой код не печатает значение, сохраненное в массиве, он печатает System.Collections.Hashtable[$i].

$text = Read-Host
$id = @{}
for ($i=0; $i -le $text; $i++)
{
    $id[$i] = Read-Host
}
for ($i=0; $i -le $text; $i++)
{
    Write-Host $id[$i] 
}

Выход:

PS C:\Users\mifi>.\1.ps1
2
Keshav
kk
kk
System.Collections.Hashtable[0]
System.Collections.Hashtable[1]
System.Collections.Hashtable[2]

This is the Screenshots of the Ouput

Всякий раз, когда я выполнял этот код, вывод выводится в приведенной выше форме.

1 Ответ

0 голосов
/ 07 июня 2018

Пожалуйста, не публикуйте код, который вы изготовили или набрали из памяти.Вы получаете вывод как

System.Collections.Hashtable[0]
System.Collections.Hashtable[1]
System.Collections.Hashtable[2]

, потому что в вашем фактическом коде есть выражение

Write-Host "$id[$i]"

вместо строки

Write-Host $id[$i]

ваш пример кода претендует на то, чтобы иметь.

PowerShell выполняет только простое расширение переменных внутри строк в двойных кавычках.Он не расширяет более сложные выражения (например, индекс или доступ к свойствам), как можно было бы ожидать.Выражение "$id[$i]" расширяется до строкового представления переменной $id (которая в данном случае является именем класса объекта: "System.Collections.Hashtable"), за которым следует открывающая квадратная скобка, значениепеременная $i и закрывающая квадратная скобка.

...