2012-02-20 88 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) 

由于某种原因,最后一个写主机返回空行。我在最后一个读主机之前用一个测试输出进行了验证,所以我知道$ uninstallcommandtable是正确的。任何想法都会很棒。哈希表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

安迪,优秀。完美工作。现在通过添加更多的东西来打破这个脚本。 – Unfundednut 2012-02-20 02:14:06

1

或者,当你创建哈希条目可以使关键的字符串:

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

mjolinor,谢谢我将添加这个作为评论,所以我记得所有的方式来做到这一点。 – Unfundednut 2012-02-20 02:24:37