当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 使用 PowerShell 提供版本控制工具

作者:精品下载站 日期:2024-12-14 08:14:12 浏览:12 分类:玩电脑

使用 PowerShell 提供版本控制工具


最流行的 PowerShell 用户界面 IDE 是 Sapien 的 PowerShell Studio,它允许轻松创建 WinForms 应用程序。将 PowerShell 代码打包到 .exe 文件中时,您可以指定版本号,并随着每个新版本的发布而增加版本号。如果您使用此方法创建基于 PowerShell 的可执行文件,则会出现应如何交付工具的问题。以下解决方案适用于这种情况或任何基于版本甚至文件文件夹传送文件的情况。

交付工具时,您需要确保使用最新版本,并且可能还需要从桌面启动该工具以避免文件锁定或缓慢的 WAN 链接。当我让用户从文件共享运行我的工具时,我出现了这个问题。该文件通常会被锁定,我无法更新它,而且远程位置的网络速度导致启动文件时出现长时间延迟。我能够通过以下解决方案解决这两个问题。

步骤#1:我们需要做的第一件事是设置一些变量。这不是必需的,但更容易在多个工具中应用。我们在这里设置的是该工具的源位置以及它将安装/复制到的位置。在本例中,我们将该工具保存在 C:\Users\YourUserName\AppData\Roaming\YourToolName 中。 AppData 是一个很好的位置,因为无需工作站管理员即可对其进行写入。

$appfolderpath = $env:appdata.ToString() + "\YourToolName"
$app = $appfolderpath + "\YourToolExecutable.exe"

步骤#2:我们现在将扩展变量以包括当前应用程序版本和文件路径。

$appfolderpath = $env:appdata.ToString() + "\YourToolName"
$app = $appfolderpath + "\YourToolExecutable.exe"
$currentversion = "1.0.1"
$sourceapppath = "\Server\Share\YourApplication\" + $currentversion + "\YourToolExecutable.exe"

步骤 #3:由于我更喜欢将 PowerShell 脚本保持静态,因此我使用以下方法从位于源应用程序路径中名为 currentversion.txt 的文本文件中检索当前版本。文本文件的内容只是版本号,在本例中为 1.0.1。

$appfolderpath = $env:appdata.ToString() + "\YourToolName"
$app = $appfolderpath + "\YourToolExecutable.exe"
$currentversion = Get-Content "\Server\Share\YourApplication\currentversion.txt"
$sourceapppath = "\Server\Share\YourApplication\" + $currentversion + "\YourToolExecutable.exe"

步骤#4:此时我们需要添加创建本地文件夹的逻辑,并复制该工具(如果不存在)。

$appfolderpath = $env:appdata.ToString() + "\YourToolName"
$app = $appfolderpath + "\YourToolExecutable.exe"
$currentversion = Get-Content "\Server\Share\YourApplication\currentversion.txt"
$sourceapppath = "\Server\Share\YourApplication\" + $currentversion + "\YourToolExecutable.exe"

if ((Test-Path -Path $appfolderpath) -eq $false) { New-Item -path $env:appdata.ToString() -Name "YourToolName" -Type directory }
if ((Test-Path -Path $app) -eq $false) { Copy-Item $sourceapppath -Destination $appfolderpath }

步骤#5:如果该工具本地已经存在,我们需要检查文件的版本,看是否需要更新。

$appfolderpath = $env:appdata.ToString() + "\YourToolName"
$app = $appfolderpath + "\YourToolExecutable.exe"
$currentversion = Get-Content "\Server\Share\YourApplication\currentversion.txt"
$sourceapppath = "\Server\Share\YourApplication\" + $currentversion + "\YourToolExecutable.exe"

if ((Test-Path -Path $appfolderpath) -eq $false) { New-Item -path $env:appdata.ToString() -Name "YourToolName" -Type directory }
if ((Test-Path -Path $app) -eq $false) { Copy-Item $sourceapppath -Destination $appfolderpath }
else { if ([System.Diagnostics.FileVersionInfo]::GetVersionInfo($app).FileVersion -ne $currentversion)	{ Copy-Item $sourceapppath -Destination $appfolderpath } }

步骤#6:PowerShell 的最后一部分是使用 Invoke-Item 执行应用程序。

$appfolderpath = $env:appdata.ToString() + "\YourToolName"
$app = $appfolderpath + "\YourToolExecutable.exe"
$currentversion = Get-Content "\Server\Share\YourApplication\currentversion.txt"
$sourceapppath = "\Server\Share\YourApplication\" + $currentversion + "\YourToolExecutable.exe"

if ((Test-Path -Path $appfolderpath) -eq $false) { New-Item -path $env:appdata.ToString() -Name "YourToolName" -Type directory }
if ((Test-Path -Path $app) -eq $false) { Copy-Item $sourceapppath -Destination $appfolderpath }
else { if ([System.Diagnostics.FileVersionInfo]::GetVersionInfo($app).FileVersion -ne $currentversion)	{ Copy-Item $sourceapppath -Destination $appfolderpath } }

Invoke-Item $app

步骤#7:现在我们已经创建了步骤#6 中所需的脚本,我们可以将文件保存在文件共享上,名称为 \\Server\Share\YourApplication\YourTool.ps1。让我们检查一下实现此解决方案所需的所有文件。

1) \\Server\Share\YourApplication\YourTool.ps1 - 步骤 #6 中的脚本
2) \\Server\Share\YourApplication\currentversion.txt - 包含当前版本号的文本文件
3) \\Server\Share\YourApplication\currentversion\YourToolExecutable.exe - 您当前的 .exe 位于共享文件共享中

例如,要将工具更新到新版本,您只需将 \\Server\Share\YourApplication\currentversion.txt 从 1.0.1 更新到 1.0.2,并将 1.0.2 版本的 YourToolExecutable.exe 放在 \\服务器\共享\YourApplication\1.0.2\。

步骤#8:现在我们只需要在用户工作站上实现一个快捷方式即可启动该工具。组策略、登录脚本、msi 包甚至 PowerShell 都可以实现此目的。以下示例将在用户的“开始”菜单中创建一个快捷方式,用于启动 PowerShell 文件。 PowerShell 脚本检查该工具是否存在,根据需要复制最新版本,然后在本地启动它。

$Shell = New-Object -ComObject ("WScript.Shell")
$ShortCut = $Shell.CreateShortcut($env:USERPROFILE + "\Start Menu\Programs\YourTool.lnk")
$ShortCut.TargetPath="powershell.exe"
$ShortCut.Arguments="-ExecutionPolicy Bypass -File \Server\Share\YourApplication\YourTool.ps1"
$ShortCut.Save()

这就是您所需要的一切,我希望这可以帮助社区中想要改善当前环境的其他人。创建快捷方式 (.lnk) 文件值得单独写一篇文章,我将在以后的文章中介绍这一点。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯