所以我已成功检索到计算机上所有已安装程序的列表,并且能够使用以下代码将它们存储到数组中:
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
Format-Table –AutoSize
现在我要做的是输出我已经完成的程序名称列表,但是允许用户输入他们想要查看的程序名称的更多信息。并有一些命令通过,找到程序,并输出只有该程序的属性。有什么提示吗?
答案 0 :(得分:1)
你并不是特别想要的东西,但这会满足你所提供的一点点。向用户显示名称。继续提示,直到他们没有输入任何内容。对于每个匹配,我们向用户显示相关结果并继续提示。
# Gather information
$productDetails = Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate
# Display teaser information to the user
$productDetails | Select-Object DisplayName
do {
Write-Host "--McPrompter 5000--" -ForegroundColor Green
$response = Read-Host "Type a partial software title or <Enter> to quit"
# If there is text lets see if there is a match
If($response){
$results = $productDetails | Where-Object{$_.DisplayName -like "*$response*"}
If($results){
$results | Format-Table -AutoSize
} Else {
Write-Host "No match for $response. Please try again." -ForegroundColor Red
}
}
} until (!$response)
关于该密钥的说明
了解如果系统是x64,则需要检查syswow64密钥以获取完整列表。您应该可以在此处或在Google上找到有关该信息的更多信息。
答案 1 :(得分:0)
您基本上可以通过显示软件列表来尝试简单的事情,并在选择后使用您的逻辑。
$Softwares = Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate
$Choice = @{}
$Number = 1
foreach ($Software in $Softwares.DisplayName)
{
$Choice.add($Number,$Software)
$Number = $Number + 1
}
$Choice | Format-Table
[Int]$MenuChoice = read-host "Please enter your choice"
Switch($MenuChoice)
{
1{
Write-Host "Selected Software is" $Choice.get_item($MenuChoice);
#Your Logic here
}
2{
#Your Logic here
}
default{"please select a valid Software"}
}
希望这会有所帮助!!