【问题标题】:PowerShell Check for .EXE in $env:PathPowerShell 检查 $env:Path 中的 .EXE
【发布时间】:2021-08-08 00:04:43
【问题描述】:

已解决
感谢 Mathias R. Jessen 的建议。

下午好, 我正在编写一个脚本来检查已安装的软件并在安装时提取它们的版本信息。它以仅提取信息的基本形式工作,但对于未安装的任何内容都会引发错误。我正在尝试将一些逻辑合并到其中,以便它只会抛出未安装特定软件而不是错误消息。下面是我尝试使用的代码。所有软件的路径都通过这个脚本添加到$env:Path中。

编辑代码
已通过将Test-Path 更改为Get-Command 并将-ErrorAction SilentlyContinue 添加到Get-Command 部分来解决。

$Env:Path += ";C:\Program Files (x86)\VMware\VMware Workstation\"
$Env:Path += ";C:\Program Files (x86)\VMware\VMware Remote Console\"
$Env:Path += ";C:\Program Files (x86)\VMware\esxcli\"
$Env:Path += ";C:\Program Files\VMware\VMware OVF Tool\"
$Env:Path += ";C:\Program Files (x86)\Microsoft\Edge\Application\"
$Env:Path += ";C:\Program Files\Mozilla Firefox\"

$apps = @("ovftool","vmrc","vmware","msedge","firefox")

ForEach ($app in $apps) {
    If(Get-Command $app -ErrorAction SilentlyContinue){
        (Get-Command $app -ErrorAction SilentlyContinue).FileVersionInfo|Select-Object ProductName, ProductVersion |Format-Table -AutoSize
    }else{
        Write-Output "$app is not installed"
    }
}

【问题讨论】:

  • 尝试用if(Get-Command $app)替换if(Test-Path $app)
  • 这行得通。我只需要添加-ErrorAction SilentlyContinue 以消除错误

标签: powershell environment-variables logic


【解决方案1】:

你可以试试GetExtenion

 if ([IO.Path]::GetExtension($app) -eq ".exe") 
    {
        # file has .exe extension
    }

【讨论】:

  • 当我尝试这样做时,它会输出没有安装任何东西
猜你喜欢
  • 1970-01-01
  • 2010-11-30
  • 2016-04-29
  • 1970-01-01
  • 1970-01-01
  • 2022-01-27
  • 1970-01-01
  • 2012-01-12
  • 2021-12-13
相关资源
最近更新 更多