2012-02-20 2 views
1
$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) 

По какой-то причине последний Write-host возвращает пустую строку. Я проверил с тестовым выходом непосредственно перед последним хостом, поэтому я знаю, что команда $ uninstallcommand подходит. Любые идеи были бы замечательными.Хэш-таблица Get_Item, возвращающая пустую строку - Powershell

ответ

2

Потому что ваши хэш-таблицы Имена типа 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

Andy, отлично. Работала отлично. Теперь, чтобы разбить этот скрипт, добавив больше материала. – Unfundednut

1

В качестве альтернативы, вы можете сделать ключ строку при создании записи хэш:

$uninstallcommandtable.Add("$x", $_.getvalue(“UninstallString”)) 
+0

mjolinor, спасибо, я добавлю это в качестве комментария, поэтому я помню все способы сделать это. – Unfundednut

Смежные вопросы