ค้นหาเว็บไซต์

การส่งมอบเครื่องมือควบคุมเวอร์ชันด้วย PowerShell


IDE อินเทอร์เฟซผู้ใช้ PowerShell ที่ได้รับความนิยมมากที่สุดคือ PowerShell Studio ของ Sapien ซึ่งช่วยให้สร้างแอปพลิเคชัน 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 คือการดำเนินการแอปพลิเคชันด้วย Invivo-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 และวาง YourToolExecutable.exe เวอร์ชัน 1.0.2 ลงใน \\ เซิร์ฟเวอร์\แชร์\YourApplication\1.0.2\

ขั้นตอนที่ # 8: ตอนนี้เราเพียงแค่ต้องใช้ทางลัดบนเวิร์กสเตชันของผู้ใช้เพื่อเปิดเครื่องมือ นโยบายกลุ่ม สคริปต์การเข้าสู่ระบบ แพ็คเกจ msi หรือแม้แต่ PowerShell ก็สามารถบรรลุสิ่งนี้ได้ ตัวอย่างต่อไปนี้จะสร้างทางลัดในเมนู Start ของผู้ใช้ซึ่งจะเปิดไฟล์ 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) สมควรได้รับการโพสต์ด้วยตัวเอง และฉันจะกล่าวถึงเรื่องนี้ในบทความต่อๆ ไป

บทความที่เกี่ยวข้อง