برنامه نویسی

به روزرسانی ابزارهای VMware با PowerShell و N-Central ارتقا می یابد

به عنوان یک مهندس سیستم که از طیف گسترده ای از مشتری ها با انواع محیط های VMware پشتیبانی می کند – از vsphere گرفته تا میزبان های مستقل ESXi – من به همان چالش ادامه می دهم: نسخه های VMware Tools اغلب به روز بودند. به روزرسانی های دستی متناقض ، وقت گیر و مستعد فراموش شدن بودند.

ما قبلاً با استفاده از N-Central RMM یک فرآیند مدیریت پچ به خوبی تثبیت کردیم و فهمیدم: چرا از همان پنجره تعمیر و نگهداری برای به روزرسانی ابزارهای VMware استفاده نمی کنیم؟ این امر تلاش دستی را از بین می برد و اطمینان می دهد که هر دستگاه به طور خودکار به روز و پشتیبانی می شود.

این وبلاگ داستانی است که چگونه یک اسکریپت PowerShell ساده به ساده سازی این روند کمک کرده است – و چگونه می توانید از آن نیز استفاده کنید.

مشکل

ابزارهای VMware برای عملکرد خوب VM ، ادغام بهتر سیستم عامل مهمان و خاموش کردن VM تمیز ضروری است. اما در محیط هایی با ده ها یا صدها دستگاه مجازی ، نگه داشتن آن در نسخه های مختلف ESXI کثیف است.

N-Central ، ابزار نظارت و مدیریت از راه دور ما (RMM) ، به ما اجازه داد تا در حین ویندوزهای وصله کار برنامه ریزی کنیم. بنابراین من تصمیم گرفتم یک اسکریپت PowerShell بسازم که:

  • آخرین نسخه VMware Tools را بصورت آنلاین بررسی می کند
  • آن را با نسخه نصب شده محلی مقایسه می کند
  • در صورت لزوم ، به روز رسانی را بارگیری می کند و به روز می کند
  • در طول مسیر همه چیز را ثبت می کند

فیلمنامه PowerShell

در اینجا فیلمنامه کامل است. من در یک لحظه بخشی از آن را توضیح خواهم داد. شما می توانید آن را از GitHub من در اینجا بارگیری کنید

$URL = "https://packages.vmware.com/tools/esx/latest/windows/x64/"
$LogFilePath = "C:\temp\VMwareToolsUpdateScript.log"

(Get-Date).ToString() + " :  Script Initiated" >> $logfilepath

$PSversion = Get-Host | Select-Object Version
(Get-Date).ToString() + " : PowerShell version = " + $PSversion >> $logfilepath

$QueryVMWareToolsVersion = Invoke-WebRequest $URL -UseBasicParsing
$VMWareToolsSetupName = $QueryVMWareToolsVersion.Links.HREF | Select -Skip 1

[string]$VMWareToolsNewestVersion = $VMWareToolsSetupName -replace ".*VMware-tools-" -replace "-.*"
$VMWareToolsInstalledVersion = Get-WmiObject Win32_Product -Filter "Name like 'VMware Tools'" | Select-Object -ExpandProperty Version
[string]$VMWareToolsInstalledVersion = $VMWareToolsInstalledVersion.Substring(0,$VMWareToolsInstalledVersion.LastIndexOf('.'))

If ([version]$VMWareToolsInstalledVersion -lt [version]$VMWareToolsNewestVersion) {
    $DownloadURL = $URL + $VMWareToolsSetupName
    try {
        Invoke-WebRequest -Uri $DownloadURL -OutFile "C:\temp\$VMWareToolsSetupName"
        (Get-Date).ToString() + " : Download Finished!" >> $logfilepath
    } catch {
        (Get-Date).ToString() + " : Download Failed" >> $logfilepath
    }

    $ArgumentList = "/S /v " + '"/qn REBOOT=R ADDLOCAL=ALL"' + " /l C:\temp\VMwareToolsSetup.log"
    $FilePath = "C:\temp\" + $VMWareToolsSetupName

    try {
        Start-Process -FilePath $FilePath -ArgumentList $ArgumentList
        (Get-Date).ToString() + " : Installation Finished!" >> $logfilepath
    } catch {
        (Get-Date).ToString() + " : Installation Failed" >> $logfilepath
    }
} else {
    (Get-Date).ToString() + " : VMware latest version is already installed!" >> $logfilepath
}

(Get-Date).ToString() + " : Script executed successfully" >> $logfilepath

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

چگونه کار می کند

بیایید این مرحله به مرحله را بشکنیم:

1. ورود به سیستم و تشخیص نسخه PowerShell

(Get-Date).ToString() + " : Script Initiated" >> $logfilepath
$PSversion = Get-Host | Select-Object Version

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

ما با ورود به سیستم به موقع شروع می کنیم و یادداشت می کنیم که نسخه PowerShell در حال اجرا است. این امر به عیب یابی کمک می کند اگر اسکریپت به دلیل ناسازگاری نسخه شکست بخورد (برخی از نسخه های قدیمی تر دارای عجیب و غریب هستند Invoke-WebRequest).

2. آخرین نسخه ابزارهای VMware را بررسی کنید

$QueryVMWareToolsVersion = Invoke-WebRequest $URL -UseBasicParsing
$VMWareToolsSetupName = $QueryVMWareToolsVersion.Links.HREF | Select -Skip 1
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

ما به مخزن ابزارهای رسمی VMware ضربه زدیم و به لینک دوم در صفحه نگاه می کنیم (معمولاً اول است ../). این باید باشد .exe پرونده برای آخرین نسخه.

[string]$VMWareToolsNewestVersion = $VMWareToolsSetupName -replace ".*VMware-tools-" -replace "-.*"
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

با استفاده از یک جادوی Regex کوچک ، رشته نسخه را از نام پرونده استخراج می کنیم.

3. نسخه موجود در حال حاضر را تشخیص دهید

$VMWareToolsInstalledVersion = Get-WmiObject Win32_Product -Filter "Name like 'VMware Tools'"
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

ما از WMI برای دریافت نسخه نصب شده در حال حاضر از ابزارهای VMware استفاده می کنیم. از آنجا که نسخه VMware می تواند شامل شماره های ساخت شود (به عنوان مثال 12.2.5.45654) ، ما آخرین بخش را برای مقایسه نسخه تمیز تر می کنیم.

4. مقایسه نسخه و ارتقاء مشروط

If ([version]$VMWareToolsInstalledVersion -lt [version]$VMWareToolsNewestVersion)
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اگر نسخه نصب شده قدیمی تر باشد ، ما URL بارگیری را می سازیم و نصب را می کشیم.

5. نصب و ورود به سیستم خاموش

$ArgumentList = "/S /v " + '"/qn REBOOT=R ADDLOCAL=ALL"' + " /l C:\temp\VMwareToolsSetup.log"
Start-Process -FilePath $FilePath -ArgumentList $ArgumentList
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

نصب کننده سکوت راه اندازی می شود (/qn) با استفاده از راه اندازی مجدد (REBOOT=R) و نصب کامل ویژگی (ADDLOCAL=ALL). پرونده ورود به سیستم به تشخیص مشکلات نصب کمک می کند.

چرا این رویکرد کار کرد

  • بدون اعتماد به API های vCenter یا ESXi – فقط HTTP و PowerShell ساده
  • سازگار با هر سیستم عامل مهمان که پشتیبانی می کند ابزارهای VMware در ویندوز
  • هیچ ارتقا غیر ضروری – فقط در صورت وجود نسخه جدیدتر نصب می شود
  • ورود به سیستم حسابرسی و عیب یابی را آسان می کند

ما برنامه را برنامه ریزی کردیم که در طول پنجره تعمیر و نگهداری معمولی پچ اجرا شود ، بنابراین هر دستگاه بدون مداخله دستی به روز شد. این یک چیز کوچک است ، اما ساعت ها از تلاش های نگهداری ماهانه ما تراشیده و سازگاری بهتری را در محیط های مشتری تضمین می کند.

فیلمنامه را بارگیری کنید

– اسکریپت کامل را در GitHub بارگیری کنید

افکار نهایی

اتوماسیون همیشه نیازی به فانتزی ندارد. بعضی اوقات ، این فقط در مورد استفاده از ابزاری است که قبلاً به روش هوشمندانه تری دارید. اگر محیط های VMware را اجرا می کنید و می خواهید کارها را ساده نگه دارید ، این رویکرد را امتحان کنید – و به من اطلاع دهید که چگونه برای شما کار می کند!

احساس راحتی کنید که در فیلمنامه چنگال ، بهبود یا پیشنهاد را پیشنهاد دهید. من دوست دارم بشنوم که دیگران چگونه در حال ارتقاء ابزارهای VMware در محیط های پیچیده هستند.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا