gpt4 book ai didi

powershell - 如何在 powershell 中测试系统上是否存在程序/可执行文件?

转载 作者:行者123 更新时间:2023-12-03 08:26:16 27 4
gpt4 key购买 nike

我有一个需要在系统上安装 openssl 的脚本。我想检查它是否已安装。我考虑过使用 test-path,但是因为这个脚本会在许多计算机上,所以无法知道用户安装 openssl 的位置或者它是否在系统路径中。

有没有办法做类似 test-command openssl 的事情(我知道不存在)并在 powershell 中返回错误级别或类似的东西?

非常感谢!

最佳答案

使用 Get-Command cmdlet显式测试可执行文件是否只能通过其名称调用(暗示它们位于 $env:PATH 中列出的目录之一中)和 < strong>一般用于命令发现:

$found = [bool] (Get-Command -ErrorAction Ignore -Type Application openssl)

Write-Verbose -vb "openssl.exe found? $found"

仅当 [bool] 返回输出时,转换为 $true 才会计算为 Get-Command,只有找到可执行文件时才会执行此操作。

-Type Application 确保只考虑外部程序;默认情况下,Get-Command 查找所有类型的命令,包括 *.ps1 脚本、cmdlet、函数和别名。

Get-Command 本身还允许您通过输出对象的 .Source 属性找出可执行文件的完整路径


或者,如果重要的是可执行文件是否可用,您可以简单地尝试来执行您的实际命令并处理错误表明可执行文件无法通过 try/catch 获得:

try {
openssl ... # your *actual* command, not a test
} catch [System.Management.Automation.CommandNotFoundException] {
# Handle the error, reflected in $_
Write-Warning $_
# ...
}

请注意,如果您确信唯一可能发生的错误是由于缺少可执行文件,那么您并不需要特别捕获 [System.Management.Automation.CommandNotFoundException],但请注意,您可能会从期间发生的错误中获得潜在的误报评估基于表达式的参数,例如尝试将 (1 / 0) 作为参数传递。

另请注意,通过在 try/catch 语句中不带参数调用可执行文件来测试可执行文件的可用性是可行的方法,因为可执行文件可能会进入交互式外壳(如 openssl 的情况)或产生不希望的副作用。

关于powershell - 如何在 powershell 中测试系统上是否存在程序/可执行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53841946/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com