我有一个需要在系统上安装 openssl 的脚本。我想检查一下它是否已安装。我已经考虑过使用,test-path但是因为这个脚本将在许多计算机上,所以无法知道用户安装 openssl 的位置或者它是否在系统路径中。
有没有办法做类似的事情test-command openssl(我知道那不存在)并获得错误级别或类似的信息以在 powershell 中返回?
非常感谢!
使用Get-Command小命令,以明确的测试,如果可执行文件只能由他们的名字(这意味着他们在列出的目录中的一个被称为$env:PATH),并在总指挥部的发现:
$found = [bool] (Get-Command -ErrorAction Ignore -Type Application openssl)
Write-Verbose -vb "openssl.exe found? $found"
Run Code Online (Sandbox Code Playgroud)
仅当返回输出时,强制转换为[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 $_
# ...
}
Run Code Online (Sandbox Code Playgroud)
请注意[System.Management.Automation.CommandNotFoundException],如果您确信可能发生的唯一错误是由于缺少可执行文件,则您并不严格需要专门捕获,但请注意,您可能会从表达式评估期间发生的错误中获得潜在的误报 -基于参数,例如尝试(1 / 0)作为参数传递。
另请注意,尝试通过在/语句中不带参数地调用可执行文件来测试其可用性不是一种可行的方法,因为该可执行文件可能会进入交互式 shell(与 的情况一样)或产生不希望的副作用。trycatchopenssl
| 归档时间: |
|
| 查看次数: |
248 次 |
| 最近记录: |