哈希表Get_Item返回空行 - Powershell
问题描述:
$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
答
因为你的散列表名称是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)
答
或者,当你创建哈希条目可以使关键的字符串:
$uninstallcommandtable.Add("$x", $_.getvalue(“UninstallString”))
+0
mjolinor,谢谢我将添加这个作为评论,所以我记得所有的方式来做到这一点。 – Unfundednut 2012-02-20 02:24:37
安迪,优秀。完美工作。现在通过添加更多的东西来打破这个脚本。 – Unfundednut 2012-02-20 02:14:06