Как массово отключить хранилища от хостов VMware ESXI через скрипт

При замене СХД понадобилось отключить датасторы (хранилища) от хостов в VMware. Хостов 8, хранилищ 30. Делать это руками не хотелось. Пришлось изучать PowerCLI.
Решил я все скриптом

  1. #########################################################################################################
  2. #
  3. #  Скрипт отключает датасторы у выбранных хостов. Делает Unmount, потом Detach
  4. # Переменная $hosts — список хостов
  5. # Переменная $storage — список отключаемых датасторов/хранилищ.
  6. #
  7. #########################################################################################################
  8. # Подключаем оснастку, если ее нет
  9. if ( (Get-PSSnapin -Name VMware.VimAutomation.Core -ErrorAction SilentlyContinue) -eq $null )
  10. {
  11.     add-pssnapin VMware.*
  12. }
  13. else
  14. {
  15.     Write-Host «Snap in already added.»
  16. }
  17. #################################################
  18. # Убираем ругань на самоподписанный сертификат
  19. Set-powercliconfiguration -InvalidCertificateAction Ignore -Confirm:$false | out-null
  20. #################################################
  21. #vCenter Server
  22. $vCenter = «bs-vc»
  23. #I Если не подключены к vCentr, то подключаемся
  24. if ($global:DefaultVIServers.Count -lt 1)
  25. {
  26.     Connect-VIServer $vCenter
  27. }
  28. # получаем список ESX-серверов
  29. #$hosts = (Get-Content D:\PowerCLI\1unmountdatastoresservers.txt)
  30. # Список всех хостов
  31. # $hosts = Get-VMhost
  32. # Выборочный список хостов
  33. $hosts = «bs-esx07″, «bs-esx08″
  34. # Список Datastores, которые требуется отключить
  35. #$storage = (Get-Content D:\PowerCLI\storage.txt)
  36. $storage = «SAS_ThinClient_A_1″, «SAS_ThinClient_A_2″, «SAS_ThinClient_B_1″, «SAS_ThinClient_B_2″
  37. # Проверяем на каждом хосте
  38. foreach($esx in $hosts)
  39. {
  40.     Write-host «Servers: » $esx
  41.     # Подключаемся к хосту для выполнения команды esxcli
  42.     $esxcli = Get-ESXCLI -VMHost $esx
  43.     #Hosts Datastores
  44.     $hostds=Get-Datastore -VMhost $esx
  45.     #Проверяем наличие нужных датасторов на хосте
  46.     foreach ($st in $storage)
  47.     {
  48.         foreach($hds in $hostds)
  49.         {
  50.          #Write-Host «Проверяемый датастор: » $hds
  51.          if ($st -eq $hds)
  52.          {
  53.             Write-Host
  54.             Write-Host «Server: » $esx «have mapped datastores » $hds
  55.             Write-Host
  56.             # Проверяем включен ли SIOC, если да, то отключаем.
  57.             $SIOC = Get-Datastore -Name $hds
  58.             if ($SIOC.StorageIOControlEnabled -eq $True)
  59.             {
  60.                 Set-Datastore $hds -StorageIOControlEnabled $false
  61.                 # Ждем, когда завершится отключение SIOC
  62.                 Start-Sleep -s 10
  63.             }
  64.             $lun = $esxcli.storage.vmfs.extent.list() | Where-Object {$_.VolumeName -eq $hds}
  65.             $device_id=$lun.DeviceName
  66.             #Unmount Datastore
  67.             Write-Host «Unmount datastore » $hds » from » $esx
  68.             $esxcli.storage.filesystem.unmount($true,$hds)
  69.             #Detach Datastore
  70.             Write-Host «Detach datastore » $hds » from » $esx
  71.             $esxcli.storage.core.device.set($device_id,»IsOffline»,$null,»off»)
  72.          }
  73.         }
  74.     }# Конец проверки наличие нужных датасторов на хосте
  75. } # Конец проверки на каждом хосте

Далее рассмотрим Как очистить все отключенные хранилища у хостов в VMware ESXi через скрипт

Оцените статью
Настройка серверов windows и linux
Добавить комментарий

  1. Пётр

    Поскольку данная статья теперь вылезает на первой странице поисковой выдачи гугла по запросу «как отключить lun esxi powercli», позволю себе сэкономить время всех зашедших сюда, и запостить лично мной обновлённую версию скрипта (корректно работает на esxi 6+; детачит все extent-ы датастора, а не только первый). Проверен на esxi 6.0, 6.5.

    #########################################################################################################
    #
    # Скрипт отключает датасторы у выбранных хостов. Делает Unmount, потом Detach
    # Переменная $hosts — список хостов
    # Переменная $storage — список отключаемых датасторов/хранилищ.
    #
    #########################################################################################################
    # Подключаем оснастку, если ее нет
    if ( (Get-PSSnapin -Name VMware.VimAutomation.Core -ErrorAction SilentlyContinue) -eq $null )
    {
    add-pssnapin VMware.*
    }
    else
    {
    Write-Host «Snap in already added.»
    }
    #################################################
    # Убираем ругань на самоподписанный сертификат
    Set-powercliconfiguration -InvalidCertificateAction Ignore -Confirm:$false | out-null
    #################################################
    #vCenter Server
    $vCenter = «vcentr»
    #I Если не подключены к vCentr, то подключаемся
    if ($global:DefaultVIServers.Count -lt 1)
    {
    Connect-VIServer $vCenter
    }
    # получаем список ESX-серверов
    #$hosts = (Get-Content D:\PowerCLI\1unmountdatastoresservers.txt)
    # Список всех хостов
    # $hosts = Get-VMhost
    # Выборочный список хостов
    $hosts = «esxi-1″,»esxi-2»
    # Список Datastores, которые требуется отключить
    #$storage = (Get-Content D:\PowerCLI\storage.txt)
    $storage = «3par-1″,»3par-2»
    # Проверяем на каждом хосте
    foreach($esx in $hosts)
    {
    Write-host «Server: » $esx
    # Подключаемся к хосту
    $VMHost = Get-VMHost -Name $esx
    $StorageSys = Get-View $VMHost.ExtensionData.ConfigManager.StorageSystem

    #Hosts Datastores
    $hostds=Get-Datastore -VMhost $esx
    #Проверяем наличие нужных датасторов на хосте
    foreach ($st in $storage)
    {
    foreach($hds in $hostds)
    {
    #Write-Host «Проверяемый датастор: » $hds
    if ($st -eq $hds)
    {
    Write-Host
    Write-Host «Server» $esx «have mapped datastore» $hds
    Write-Host
    # Проверяем включен ли SIOC, если да, то отключаем.
    $SIOC = Get-Datastore -Name $hds
    if ($SIOC.StorageIOControlEnabled -eq $True)
    {
    Write-Host «Disable SIOC on datastore » $hds
    Set-Datastore $hds -StorageIOControlEnabled $false
    # Ждем, когда завершится отключение SIOC
    Start-Sleep -s 10
    }

    #Unmount Datastore
    Write-Host «Unmount datastore» $hds «from» $esx
    $StorageSys.UnmountVmfsVolume($SIOC.ExtensionData.Info.Vmfs.Uuid);

    foreach ($lun in $SIOC.ExtensionData.Info.Vmfs.Extent)
    {
    $device = $StorageSys.StorageDeviceInfo.ScsiLun | where {$_.CanonicalName -eq $lun.DiskName}

    #Detach Datastore
    Write-Host «Detach device» $lun.DiskName «from» $esx
    $storageSys.DetachScsiLun($device.Uuid)
    }

    }
    }
    }# Конец проверки наличие нужных датасторов на хосте
    } # Конец проверки на каждом хосте