Русфонд

Показаны сообщения с ярлыком PowerCLI. Показать все сообщения
Показаны сообщения с ярлыком PowerCLI. Показать все сообщения

вторник, 20 октября 2015 г.

PowerCLI: Копирование фалов между виртуалкой и локальной машиной

Копирование фалов между виртуалкой и локальной машиной с помощью PowerCLI.

Из ВМ на локальную машину:
Copy-VMGuestFile -VM <VM Name> -GuestUser <GuestUser Name> -GuestPassword <GuestUser Password> -GuestToLocal -Source <Guest Local Path> -Destination <Local Path>

Из локальной машины на ВМ:
Copy-VMGuestFile -VM <VM Name> -GuestUser <GuestUser Name> -GuestPassword <GuestUser Password> -LocalToGuest -Source <Local Path> -Destination <Guest Local Path>

Пример:
Copy-VMGuestFile -VM MyVM1 -GuestUser Administrator -GuestPassword "paSSword!" -GuestToLocal -Source c:\temp\file1.txt -Destination c:\logVM\

четверг, 16 октября 2014 г.

PowerCLI: Отчет по виртуальным свичам в CSV-файле

Отчет с информацией о виртуальных свичах ESX-хостов в формате
ESX | vSwitch | Active NIC | Standby NIC | Portgroup | VLAN | Device | IP
с выгрузкой в csv:

Connect-VIServer (Read-Host "Имя vCenter")
&{foreach($esx in Get-VMHost){
        $vNicTab = @{}
        $esx.ExtensionData.Config.Network.Vnic | %{
              $vNicTab.Add($_.Portgroup,$_)
        }
        foreach($vsw in (Get-VirtualSwitch -VMHost $esx)){
              foreach($pg in (Get-VirtualPortGroup -VirtualSwitch $vsw)){
                    Select -InputObject $pg -Property @{N="ESX";E={$esx.name}},
                           @{N="vSwitch";E={$vsw.Name}},
                           @{N="Active NIC";E={[string]::Join(',',$vsw.ExtensionData.Spec.Policy.NicTeaming.NicOrder.ActiveNic)}},
                           @{N="Standby NIC";E={[string]::Join(',',$vsw.ExtensionData.Spec.Policy.NicTeaming.NicOrder.StandbyNic)}},
                           @{N="Portgroup";E={$pg.Name}},
                           @{N="VLAN";E={$pg.VLanId}},
                           @{N="Device";E={if($vNicTab.ContainsKey($pg.Name)){$vNicTab[$pg.Name].Device}}},
                           @{N="IP";E={if($vNicTab.ContainsKey($pg.Name)){$vNicTab[$pg.Name].Spec.Ip.IpAddress}}}
              }
         }
}} | Export-Csv vSwitchInfo.csv -NoTypeInformation -UseCulture


Скачать тут.

пятница, 29 ноября 2013 г.

PowerCLI: изменение размера оперативной памяти и количества CPU у виртуальной машины

Скрипт Change-VM_Memory_CPU_Count.ps1 позволяет изменять размер RAM и количество vCPU у виртуальной машины. При запуске скрипта необходимо указывать параметры:
-vCenter - имя vСenter-сервера;
-vmName - имя виртуальной машины;
-MemoryMB - размер памяти в MB, на который хотим изменить текущее значение;
-MemoryOption - значение Add или Remove, т. е. увеличиваем или уменьшаем память;
-CPUCount - количество vCPU, на которое хотим изменить текущее значение;
-CPUOption - значение Add или Remove, т. е. увеличиваем или уменьшаем количество vCPU.

Скрипт выполняет следующие шаги:
1. подключение к серверу vCenter;
2. выключение виртуальной машины;
3. изменение RAM и vCPU в соответствии с указанными параметрами;
4. включение виртуальной машины;
5. отключение от сервера  vCenter.

Пример использования.
vCenter-сервер vc01.local, виртуальная машина VM01, уменьшается память на 1GB, количество vCPU не меняется:

.\Change-VM_Memory_CPU_Count.ps1 -vCenter vc01.local -vmName VM01 -MemoryMB 1024 -MemoryOption Remove -CPUCount 0 -CPUOption Add

Можно запустить скрипт из bat-файла, если хотим выполнить его по расписанию:

powershell -PSConsoleFile "C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\vim.psc1" -Command "C:\Scripts\Change-VM_Memory_CPU_Count.ps1 -vCenter vc01.local -vmName VM01 -MemoryMB 1024 -MemoryOption Remove -CPUCount 0 -CPUOption Add"

Источник.

четверг, 28 февраля 2013 г.

PowerCLI: настройка DRS-кластера

Установка Automation Level.

Connect-VIServer <vCenter Name>
Set-Cluster -Cluster <Cluster Name> -DrsAutomationlevel <FullyAutomated, Manual, PartiallyAutomated> -Confirm:$false

Установка порога срабатывания балансировки (Migration Threshold).

Connect-VIServer <vCenter Name>
$clusterName = '<Cluster Name>'
$rate = <от 1 до 5, 1 - агрессивный уровень, 5 - консервативный уровень>
$cluster = Get-Cluster -Name $clusterName | Get-View
$clusterSpec = New-Object VMware.Vim.ClusterConfigSpecEx
$clusterSpec.drsConfig = New-Object VMware.Vim.ClusterDrsConfigInfo
$clusterSPec.drsConfig.vmotionRate = $rate
$cluster.ReconfigureComputeResource_Task($clusterSpec, $true)

понедельник, 18 февраля 2013 г.

PowerCLI: ESX в\из Maintenance mode

Перевод хоста ESX в режим обслуживания:
Set-VMHost -VMhost <ESXname> -State “Maintenance”

Вывод хоста ESX из режима обслуживания:
Set-VMHost -VMhost <ESXname> -State “Connected”

Если это нужно делать по расписанию:

1. Пишем скрипы:

Скрипт EnterMaintenance.ps1

$Creds = Get-VICredentialStoreItem -Host <vCenterName> -File <path to XML-file>
Connect-VIServer <vCenterName> -User $Creds.User -Password $Creds.Password
Set-VMHost -VMhost <ESXname> -State “Maintenance”

Как делать XML-файл с реквизитами доступа смотрим тут.

Скрипт ExitMaintenance.ps1 аналогично.

2. Делаем bat-файлы:

EnterMaintenance.bat
powershell -PSConsoleFile "C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\vim.psc1" -Command <path to script, например C:\Scripts\EnterMaintenance.ps1>

ExitMaintenance.bat аналогично.

3. Настраиваем шедулер для выполнения bat-файлов.

PowerCLI: xml-файл с правами доступа vSphere

PowerCLI позволяет сохранить в XML-файл реквизиты доступа к vCenter и ESXi для использования их при вызове командлета Connect-VIServer.
XML-файл создаем комадлетом New-VICredentialStoreItem:

New-VICredentialStoreItem -Host <vCenterName или ESXname> -User <user> -Password <password> -File <path to XML-file, например, C:\Scripts\cred.xml>


В файле пароль захэширован.
Для работы с файлом используем переменную:

$Creds = Get-VICredentialStoreItem -Host <vCenterName или ESXname> -File <path to XML-file>
Connect-VIServer <vCenterName или ESXname> -User $Creds.User -Password $Creds.Password

пятница, 2 марта 2012 г.

PowerCLI: включить Copy/Paste между консолью виртуальной машины в vSphere Client и локальной системой

1. Выполняем скрипт:
$vCenter = "<vCenter Name>"
$VM = "<VM Name>"
$NewExtraOptions = @{
    "isolation.tools.copy.disable"="false";
    "isolation.tools.paste.disable"="false";
}
$VMConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec
foreach ($Option in $NewExtraOptions.GetEnumerator()) {
    $OptionValue = New-Object VMware.Vim.OptionValue
    $OptionValue.Key = $Option.Key
    $OptionValue.Value = $Option.Value
    $VMConfigSpec.ExtraConfig += $OptionValue
}
connect-viserver -server $vCenter
$VM=Get-VM -Name $VM | Get-View
$VM.ReconfigVM_Task($VMConfigSpec)

2. Выполняем vMotion либо ShutDown/PowerOn.
Источник chmv.

понедельник, 12 сентября 2011 г.

PowerCLI: список виртуальных машин с RDM-дисками


Connect-VIServer <vCenter Name>
$report = @()
$vms = Get-VM | Get-View
foreach($vm in $vms){
  foreach($dev in $vm.Config.Hardware.Device){
    if(($dev.gettype()).Name -eq "VirtualDisk"){
 if(($dev.Backing.CompatibilityMode -eq "physicalMode") -or
    ($dev.Backing.CompatibilityMode -eq "virtualMode")){
   $row = "" | select VMName, HDDeviceName, HDFileName, HDMode
          $row.VMName = $vm.Name
   $row.HDDeviceName = $dev.Backing.DeviceName
   $row.HDFileName = $dev.Backing.FileName
   $row.HDMode = $dev.Backing.CompatibilityMode
   $report += $row
 }
}
  }
}
$report

пятница, 9 сентября 2011 г.

PowerCLI: поиск виртуальной машины по MAC-адресу


Get-vm | Select Name, @{N="Network";E={$_ | Get-networkAdapter | ? {$_.macaddress -eq "<required MAC>"}}} |Where {$_.Network-ne ""}

На выходе получаем:

Name         Network
----           -------
VM2         Network adapter 1

четверг, 8 сентября 2011 г.

PowerCLI: массовая смена портгрупп

Массовое переключение виртуальных машин с старой подгруппы на новую:
1) в отдельной папке

$vCenter = "<vCenter Name>"
$Folder = "<Folder Name>
$OldNetwork = "<Old Port Group Name>
$NewNetwork = "<New Port Group Name>"
connetct-viserver -server $vCenter
Get-Folder $Folder |Get-VM |Get-NetworkAdapter |Where {$_.NetworkName -eq $OldNetwork } |Set-NetworkAdapter -NetworkName $NewNetwork -Confirm:$false

2) в кластере

$vCenter = "<vCenter Name>"
$Cluster = "<Cluster Name>
$OldNetwork = "<Old Port Group Name>
$NewNetwork = "<New Port Group Name>"
connetct-viserver -server $vCenter
Get-Cluster $Cluster |Get-VM |Get-NetworkAdapter |Where {$_.NetworkName -eq $OldNetwork } |Set-NetworkAdapter -NetworkName $NewNetwork -Confirm:$false

Параметр -Confirm:$false позволяет выполнять изменения без подтверждений.

четверг, 11 августа 2011 г.

PowerCLI: создание стандартных свичей и портгрупп

1) на одном хосте

connect-viserver -server <vCenter> -user <user> -password <pwd>
 Get-VMHost <Host> | New-VirtualSwitch -name <New Switch> -nic <VMNIC> (например, vmnic1)
Get-VMHost <Host> | Get-VirtualSwitch -name <New Switch> | New-VirtualPortGroup -name <New PortGroup> -vlanid <VLAN ID>

2) на всех хостах

новый свич, в нем новая подгруппа
connect-viserver -server <vCenter> -user <user> -password <pwd>
 Foreach ($vmhost in (get-cluster -name <My Cluster> | get-vmhost))
 {
  $vmhost | New-VirtualSwitch -Name <New Switch> | New-VirtualPortGroup -Name <New PortGroup>  -vlanid <VLAN ID>
 }
новая портгруппа в существующем свиче
connect-viserver -server <vCenter> -user <user> -password <pwd>
 Foreach ($vmhost in (get-cluster -name <My Cluster> | get-vmhost))
 {
  $vmhost | Get-VirtualSwitch -Name <Existing vSwitch> | New-VirtualPortGroup -Name <New PortGroup>  -vlanid <VLAN ID>
 }

3) копирование свичей с одного хоста на другой хост (интерактивный)

$VISRV = Connect-VIServer (Read-Host "Имя vCenter")
$BASEHost = Get-VMHost -Name (Read-Host "Имя ESX(i)-образца (как оно отображено в vSphere Client)")
$NEWHost = Get-VMHost -Name (Read-Host "Имя настраиваемого ESX(i) (как оно отображено в vSphere Client)")
$BASEHost |Get-VirtualSwitch |Foreach {
$vSwitch = $_
If (($NEWHost |Get-VirtualSwitch -Name $_.Name-ErrorAction SilentlyContinue)-eq $null){
       Write-Host "Creating Virtual Switch $($_.Name)"
       $NewSwitch = $NEWHost |New-VirtualSwitch -Name $_.Name-NumPorts $_.NumPorts-Mtu $_.Mtu
       $vSwitch = $_
    }
   $_ |Get-VirtualPortGroup |Foreach {
       If (($NEWHost |Get-VirtualPortGroup -Name $_.Name-ErrorAction SilentlyContinue)-eq $null){
           Write-Host "Creating Portgroup $($_.Name)"
           $NewPortGroup = $NEWHost |Get-VirtualSwitch -Name $vSwitch |New-VirtualPortGroup -Name $_.Name-VLanId $_.VLanID
        }
    }
}


Скачать этот скрипт.
Плюс подобный скрип с более удобным интерфейсом.

Источники:
http://communities.vmware.com/docs/DOC-4210
http://searchvmware.techtarget.com/tip/Bulk-VMware-administration-Using-PowerCLI-with-standard-switches
http://www.virtu-al.net/