2012-02-20 3 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가 빈 줄을 반환하고 있습니다. 마지막 읽기 호스트 바로 전에 테스트 결과를 확인 했으므로 $ 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

1

또는, 키 문자열을 만들 수 있습니다

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

mjolinor, 감사합니다. 나는 이것을 주석으로 추가 할 것이므로 모든 방법을 기억합니다. – Unfundednut