باز کردن قدرت اتوماسیون VMware: یک اسکریپت پایتون برای کنترل همه آنها
اهداف آموزشی
در پایان این مقاله شما:
- ببینید چگونه یک اسکریپت پایتون می تواند موجودی، چرخه عمر، گزارش، بررسی سلامت و اعلان ها را در VMware هماهنگ کند.
- قدرت کدهای ماژولار و با نظرات خوب برای استفاده واقعی سازمانی را درک کنید.
- الگوهای اسکریپت نویسی جدید، مدیریت خطا، ثبت نام و بهترین شیوه های یکپارچه سازی را بیاموزید.
- گردش کار را تجسم کنید و آن را با نیازهای خود تطبیق دهید.
مخزن GitHub شخصی من
مخزن VMware در GitHub
پیش نیازها
- مقالات تکمیل شده ۱-۱۰ (مسلط به اصول اولیه برنامه نویسی PowerCLI، Python و VMware).
- پایتون ۳٫x، PowerCLI،
pandasوrequestsماژول های نصب شده - مجوزهای مدیریت ماشین مجازی، اجرای اسکریپت PowerShell و HTTP/S خروجی (برای اعلان ها).
۱٫ چرا VMware را با مگا اسکریپت پایتون باز کنید؟
در حالی که اسکریپت های فردی قدرتمند هستند، الف به خوبی ساختار یافته است یک اسکریپت پایتون می تواند بسیاری از وظایف را سازماندهی کند:
- گزارش موجودی، سلامت و پیکربندی
- عملیات چرخه عمر گروهی (روشن/خاموش، عکس های فوری، وصله)
- تجزیه و تحلیل داده ها (تشخیص ماشین های مجازی ناسازگار، استفاده از منابع)
- اعلان های خودکار، بلیط و ادغام
- مسیرهای ورود و حسابرسی – همه در یک گردش کار
۲٫ این اسکریپت چگونه کار می کند
این مثال تمام کارهای زیر را انجام می دهد:
- یک موجودی زنده از تمام ماشین های مجازی جمع آوری می کند
- بررسی ماشینهای مجازی با فضای خالی دیسک کم (چک سلامت)
- یک عکس فوری از تمام ماشین های مجازی متصل می گیرد
- خاموش کردن تمام ماشین های مجازی که به عنوان “بازنشسته” علامت گذاری شده اند
- یک گزارش CSV و خلاصه ایجاد می کند
- در صورت بروز هرگونه مشکل یا اقدامی، یک اعلان (وب هوک) ارسال می کند
اسکریپت ماژولار است – هر بلوک را می توان برای محیط شما تطبیق داد.
۳٫ بهترین مگا اسکریپت پایتون + PowerCLI
در زیر است اسکریپت کامل با نظرات و دستورالعمل های گسترده.
متغیرهای بالا را تصحیح کنید (مثلاً اعتبار vCenter، webhook).
import subprocess
import pandas as pd
import requests
import os
import datetime
# ====== CONFIGURATION ======
# PowerShell/PowerCLI script paths
PS_INVENTORY = r"C:\Automation\get_vm_inventory.ps1"
PS_HEALTH = r"C:\Automation\check_vm_health.ps1"
PS_SNAPSHOT = r"C:\Automation\create_snapshots.ps1"
PS_RETIRE = r"C:\Automation\poweroff_retired_vms.ps1"
# Output and log file paths
REPORT_CSV = r"C:\Automation\automation_report.csv"
LOGFILE = r"C:\Automation\automation_log.txt"
# Webhook for notifications (Slack, Teams, or other)
ALERT_WEBHOOK = "<your_webhook_url>"
# vCenter credentials (for demo only—use secure credential storage in production)
VCENTER = "<vcenter-address>"
VC_USER = "<username>"
VC_PASS = "<password>"
# ========== SCRIPT START ==========
def log_message(msg):
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
with open(LOGFILE, "a") as f:
f.write(f"now msg\n")
print(f"now msg")
def run_powershell(script_path, args=None):
cmd = [
"powershell.exe",
"-ExecutionPolicy", "Bypass",
"-File", script_path
]
if args:
cmd += args
result = subprocess.run(cmd, capture_output=True, text=True, timeout=180)
log_message(f"Ran script_path: returncode=result.returncode")
if result.stdout:
log_message(f"STDOUT: result.stdout.strip()")
if result.stderr:
log_message(f"STDERR: result.stderr.strip()")
return result
# ۱٫ Collect VM Inventory
log_message("=== Step 1: Collecting VM Inventory ===")
# Create PowerShell script for inventory on the fly (could also be a separate file)
with open(PS_INVENTORY, "w") as f:
f.write(f"""
Import-Module VMware.PowerCLI
Connect-VIServer -Server VCENTER -User VC_USER -Password VC_PASS -ErrorAction Stop
Get-VM | Select Name, PowerState, Guest.OSFullName, @
N="DiskFreeGB";
E=(Get-VMGuest $_
, @
N="Tags";
E= Select -ExpandProperty Tag).Name -join ','
| Export-Csv -Path "REPORT_CSV" -NoTypeInformation
Disconnect-VIServer -Server * -Confirm:$false
""")
run_powershell(PS_INVENTORY)
# ۲٫ Health Check: Find VMs with <10GB free disk
log_message("=== Step 2: Health Check for Low Disk Space ===")
df = pd.read_csv(REPORT_CSV)
low_disk_vms = df[df['DiskFreeGB'] < 10]
if not low_disk_vms.empty:
log_message(f"VMs with low disk space: len(low_disk_vms)")
else:
log_message("All VMs have sufficient free disk space.")
# ۳٫ Take Snapshots of All Powered-On VMs
log_message("=== Step 3: Taking Snapshots of Powered-On VMs ===")
with open(PS_SNAPSHOT, "w") as f:
f.write(f"""
Import-Module VMware.PowerCLI
Connect-VIServer -Server VCENTER -User VC_USER -Password VC_PASS
Get-VM | Where-Object $_.PowerState -eq "PoweredOn" | ForEach-Object
New-Snapshot -VM $_ -Name "PythonScriptSnap_$(Get-Date -Format 'yyyyMMdd_HHmmss')" -Description "Automated snapshot from Python mega-script"
Disconnect-VIServer -Server * -Confirm:$false
""")
run_powershell(PS_SNAPSHOT)
# ۴٫ Power Off Retired VMs (tagged as "retired")
log_message("=== Step 4: Powering Off Retired VMs ===")
retired_vms = df[df['Tags'].str.contains('retired', case=False, na=False)]
if not retired_vms.empty:
with open(PS_RETIRE, "w") as f:
f.write(f"""
Import-Module VMware.PowerCLI
Connect-VIServer -Server VCENTER -User VC_USER -Password VC_PASS
chr(10).join([
f'Stop-VM -VM "row["Name"]" -Confirm:$false'
for _, row in retired_vms.iterrows()
])
Disconnect-VIServer -Server * -Confirm:$false
""")
run_powershell(PS_RETIRE)
log_message(f"Powered off len(retired_vms) retired VMs.")
else:
log_message("No retired VMs found to power off.")
# ۵٫ Summary Reporting and Notification
summary = f"""
Automation complete.
Total VMs: len(df)
VMs with low disk space: len(low_disk_vms)
Retired VMs powered off: len(retired_vms)
"""
log_message(summary)
# Send webhook notification if actions or issues were found
if not low_disk_vms.empty or not retired_vms.empty:
try:
requests.post(ALERT_WEBHOOK, json="text": summary)
log_message("Notification sent via webhook.")
except Exception as e:
log_message(f"Failed to send notification: str(e)")
log_message("=== VMware automation mega-script finished ===")
۴٫ نمودار: ارکستراسیون مگا اسکریپت

۵٫ تکنیک های کلیدی و آنچه که قفل آن را باز می کنید
- اتوماسیون چند وظیفه ای: موجودی، اقدامات و بررسی های سلامت را از یک فیلمنامه تنظیم کنید.
- تجزیه و تحلیل داده های زنده: مشکلات را در زمان واقعی پیدا کنید، بر اساس آنها عمل کنید و نتایج را مستند کنید.
- خود مستندسازی فایلهای گزارش و فایلهای CSV: همه مراحل ثبت شده و مشمول تایید می شوند.
- ادغام یکپارچه: با یکی چت، بلیط یا مشاهده کنید
requests.post(). - کد ماژول: توسعه آسان برای بررسی انطباق، اصلاح یا گزارش انبوه.
۶٫ مطالعه بیشتر
۷٫ نتیجه گیری
شما قدرت واقعی ترکیب Python با PowerCLI برای اتوماسیون VMware در دنیای واقعی را دیده اید.
یک اسکریپت پایتون میتواند تقریباً تمام بخشهای چرخه عمر ماشین مجازی، از سلامت و موجودی گرفته تا مدیریت چرخه حیات و اعلانها را خودکار کند – کارایی و دید را در مقیاس باز میکند.
این اسکریپت را برای محیط شخصی خود تطبیق دهید، برنامه ریزی کنید و آن را با تکامل VMware خود گسترش دهید.
