You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell脚本如何拼接已安装应用检测结果字符串

解决PowerShell检测应用结果换行问题

方法1:修改Write-Host添加-NoNewline参数

原脚本里的Write-Host默认会在输出后添加换行符,只需加上-NoNewline参数就能让结果连续输出,最后手动加个换行避免后续输出和当前结果连在一起。

修改后的代码:

clear
$appsToCheck = "WebEx","Adobe Acrobat"

function Check_Program_Installed {
    [CmdletBinding()]
    Param(
        [Parameter(Position = 0, Mandatory=$true, ValueFromPipeline = $true)]
        $Name
    )
    $app = Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*", "HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" | 
           Where-Object { $_.DisplayName -match $Name } | 
           Select-Object DisplayName, DisplayVersion, InstallDate, Version
    if ($app) {
        Write-Host "$($app.DisplayName) v$($app.DisplayVersion) | " -NoNewline
    }
}

foreach ($app in $appsToCheck) {
    Check_Program_Installed "$app"
}
# 最后添加换行,避免后续命令输出和当前结果粘连
Write-Host ""

方法2:用变量收集结果后统一输出

这种方式更灵活,方便后续对结果做其他处理(比如写入文件、过滤内容):

clear
$appsToCheck = "WebEx","Adobe Acrobat"
$result = @() # 初始化空数组存储检测结果

function Check_Program_Installed {
    [CmdletBinding()]
    Param(
        [Parameter(Position = 0, Mandatory=$true, ValueFromPipeline = $true)]
        $Name
    )
    $app = Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*", "HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" | 
           Where-Object { $_.DisplayName -match $Name } | 
           Select-Object DisplayName, DisplayVersion, InstallDate, Version
    if ($app) {
        return "$($app.DisplayName) v$($app.DisplayVersion) | "
    }
}

foreach ($app in $appsToCheck) {
    $output = Check_Program_Installed "$app"
    if ($output) { $result += $output }
}

# 将数组元素拼接成一行输出
Write-Host ($result -join "")

方法3:利用PowerShell管道和-join

更符合PowerShell管道式编程的写法,省略手动foreach循环:

clear
$appsToCheck = "WebEx","Adobe Acrobat"

function Check_Program_Installed {
    [CmdletBinding()]
    Param(
        [Parameter(Position = 0, Mandatory=$true, ValueFromPipeline = $true)]
        $Name
    )
    process { # 处理管道输入的每个元素
        $app = Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*", "HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" | 
               Where-Object { $_.DisplayName -match $Name } | 
               Select-Object DisplayName, DisplayVersion, InstallDate, Version
        if ($app) {
            "$($app.DisplayName) v$($app.DisplayVersion) | "
        }
    }
}

# 通过管道传递应用列表,拼接结果后输出
$appsToCheck | Check_Program_Installed | ForEach-Object { $_ } | -join "" | Write-Host

补充说明

  • 方法1是最直接的修改方式,适合快速调整现有脚本;
  • 方法2和3更符合PowerShell的最佳实践,函数返回数据而非直接输出,便于后续功能扩展;
  • 若目标应用未安装,脚本会自动跳过,不会输出空内容。

内容的提问来源于stack exchange,提问作者Darren

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 01:01:00