Хеш-таблица Get_Item возвращает пустую строку - Powershell - PullRequest
1 голос
/ 20 февраля 2012
$searchterm = read-host “Enter search term for uninstallers”
$uninstallers = get-childitem HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
$founditems = $uninstallers | ? {(Get-ItemProperty -path (“HKLM:\”+$_.name) -name Displayname -erroraction silentlycontinue) -match $searchterm}
write-host “Searched registry for uninstall information on $searchterm”
write-host “——————————————”
$x = 0
$uninstallcommandtable = @{}
$uninstalldisplaytable = @{}
if ($founditems -eq $null) {“None found”} else {
    write-host “Found “($founditems | measure-object).count” item(s):`n”
    $founditems | % {
        $x = $x + 1
        Write-host "Item: $x"
        Write-host “Displayname: “$_.getvalue(“Displayname”)
        Write-host “Displayversion: “$_.getvalue(“Displayversion”)
        Write-host “InstallDate: “$_.getvalue(“InstallDate”)
        Write-host “InstallSource: “$_.getvalue(“InstallSource”)
        Write-host “UninstallString: “$_.getvalue(“UninstallString”)
    $uninstallcommandtable.Add($x, $_.getvalue(“UninstallString”))
    $uninstalldisplaytable.Add($x, $_.getvalue(“Displayname”))
        Write-host “`n”
    }
}

Write-host ($uninstalldisplaytable | Out-String)
$whichprogram = read-host "Which program do you want to uninstall?"
Write-host ($uninstallcommandtable.Get_Item($whichprogram) | Out-String)

По какой-то причине последний узел записи возвращает пустую строку. Я проверил результаты тестов непосредственно перед последним хостом чтения, так что я знаю, что $ uninstallcommandtable корректен. Любые идеи были бы великолепны.

Ответы [ 2 ]

2 голосов
/ 20 февраля 2012

Поскольку ваши имена хеш-таблиц имеют тип System.Int32. Это покажет вам, что:

$uninstallcommandtable.Keys | % {$_.GetType().FullName}

Read-Host устанавливает переменную типа System.String. Таким образом, вам нужно будет преобразовать строку в System.Int32 следующим образом:

Write-host $uninstallcommandtable.Get_Item([Int32] $whichprogram)

Вы также можете использовать:

Write-host $uninstallcommandtable.Item([Int32] $whichprogram)
1 голос
/ 20 февраля 2012

Кроме того, вы можете сделать ключ строкой при создании хеш-записи:

$uninstallcommandtable.Add("$x", $_.getvalue(“UninstallString”))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...