首页 > 解决方案 > 从 powershell 启动具有特定名称的应用程序

问题描述

我有以下名称的应用程序:"x64.Staging.1.0.0.99.ClientBootstrapper". 我需要每周安装这个应用程序。从powershell我使用这个命令

"./x64.Staging.1.0.0.99.ClientBootstrapper"

但是每周版本的版本号都会更改,我必须更改我的脚本。如何更新我的脚本,以便脚本自动检测应用程序的最新版本并运行它?我尝试使用以下内容:

$version=“x64.Staging.{0-9}.ClientBootstrapper.exe
./x64.Staging.$version.ClientBootstrapper.exe /qn

但这似乎不起作用。

标签: powershell

解决方案


您可能会执行以下操作:

$exe = Get-ChildItem -Path "x64.Staging.[0-9]*.ClientBootstrapper.exe" -File | Sort-Object {
    [version]($_.Name -replace 'x64\.Staging\.([0-9\.]+)\.ClientBootstrapper\.exe','$1' -replace '^\d+$','$0.0')
} -Descending |
        Select-Object -First 1 | Resolve-Path -Relative
& $exe '/qn'

解释:

策略是按文件名中间的版本字符串排序。-replace删除文件名中除版本之外的所有字符。([0-9\.]+)匹配一个或多个数字和点。$1是表示版本字符串的捕获组。由于版本对象至少需要一个主要和次要编号(3.2例如),.0因此将 a 附加到可能出现在版本字符串中的一个单独的数字上。

Resolve-Path只是返回相对路径。没有必要,因为您可以删除命令然后修改Select-Object -First 1 -Expand FullName


推荐阅读