Скрипты (VMware): различия между версиями

Материал из WIKI vinote
Перейти к навигации Перейти к поиску
мНет описания правки
мНет описания правки
 
(не показано 11 промежуточных версий этого же участника)
Строка 3: Строка 3:
'''Назначение прав доступа на виртуальные машины с определенным шаблоном в имени'''
'''Назначение прав доступа на виртуальные машины с определенным шаблоном в имени'''
<pre>Get-VM -name "SL*" | where {$_.powerState -eq "PoweredOn"} | New-VIPermission -Role "Read-only + Console + Reboot" -Principal "DOMAIN\vasya"</pre>
<pre>Get-VM -name "SL*" | where {$_.powerState -eq "PoweredOn"} | New-VIPermission -Role "Read-only + Console + Reboot" -Principal "DOMAIN\vasya"</pre>
'''На каких включенных виртуальных машинах настроен USB-контроллер'''
<pre>Get-VM | where {$_.PowerState -eq 'PoweredOn'}| ?{$_.ExtensionData.Config.Hardware.Device.DeviceInfo.Label -match "USB"}</pre>
'''На каких включенных виртуальных машинах не добавлен CD-ROM'''
<pre>$vmList = Get-VM |  where {$_.PowerState -eq 'PoweredOn'}
foreach ($vm in $vmList) {
    $cdStatus = Get-CDDrive -VM $vm
    if ($cdStatus -eq $null) {
        Write-Host "$($vm.Name) - CD-ROM is not attached"}}</pre>
'''Определение версии VMware Tools на хостах ESXi'''
<pre>$Result = @()
foreach ($ViHost in (Get-VMhost)) {
    $esxcli = $ViHost | Get-esxcli -V2
    $ToolsVersion = ($esxcli.software.component.get.Invoke() | Where-Object {$_.name -eq "VMware-VM-Tools"}).Version
    $Result += [PSCustomObject] @{
        HostName = $ViHost.Name;
        ToolsVersion = $ToolsVersion}}
$Result</pre>
'''Определение времени загрузки операционной системы и сортировка в порядке увеличения времени uptime'''
<pre>$vms = Get-VM | where {($_.powerState -eq "PoweredOn") -and ($_.name –notlike “*vCLS*”)}
$stat = 'sys.osuptime.latest'
$now = Get-Date
Get-Stat -Entity $vms -Stat $stat -Realtime -MaxSamples 1 | Select @{N='VM';E={$_.Entity.Name}}, @{N='LastOSBoot';E={$now.AddSeconds(- $_.Value)}}, @{N='UptimeDays';E={[math]::Floor($_.Value/(24*60*60))}} | Sort-Object  UptimeDays | ft -a</pre>
'''Вывод в CSV-файл списка включенных виртуальных машин с Windows и не равной определенной версии Vmware Tools'''
<pre>Get-VM |where {($_.PowerState -eq "PoweredOn") -and ($_.Guest -like "*Windows*") -and ($_.Guest.ToolsVersion -ne "12.3.5")} | Select-Object -Property Name,@{Name='ToolsVersion';Expression={$_.Guest.ToolsVersion}} | export-csv -Encoding UTF8 -Path C:\Temp\vmware_tools_ver.csv -NoClobber -UseCulture </pre>
'''Получение списка датасторов, у которых произошла переподписка (OverProvisioned)'''
<pre>
$report = Get-Datastore | ForEach-Object {
    $datastore = $_
    $capacityGB = [math]::Round($datastore.CapacityGB, 2)
    # Считаем Provisioned Space
    $provisionedGB = Get-VM -Datastore $datastore | Get-HardDisk |
        Where-Object { $_.FileName.Split(']')[0].TrimStart('[') -eq $datastore.Name } |
        Measure-Object -Property CapacityGB -Sum |
        Select-Object -ExpandProperty Sum
    # Если дисков нет, устанавливаем 0
    $provisionedGB = if ($provisionedGB) { [double]$provisionedGB } else { 0.0 }
    $provisionedGB = [math]::Round($provisionedGB, 2)
    # Формируем отчет
    if ($provisionedGB -gt $capacityGB) {
        [PSCustomObject]@{
            Datastore = $datastore.Name
            CapacityGB = $capacityGB
            ProvisionedGB = $provisionedGB
            OverProvisionedByGB = [math]::Round(($provisionedGB - $capacityGB), 2)
        }
    }
}
$report | Format-Table -AutoSize
</pre>
'''Вывод событий за последние сутки о перезагрузках виртуальных машин из-за недоступности хоста'''
<pre>
$Date = Get-Date
$HAVMrestartold =1
Get-VIEvent -maxsamples 100000 -Start ($Date).AddDays(-$HAVMrestartold) -type warning | Where {$_.FullFormattedMessage -match "restarted"} |select CreatedTime,FullFormattedMessage |sort CreatedTime -Descending
</pre>
[[Category:VMware]]
[[Category:VMware]]
[[Category:Powershell]]

Текущая версия от 16:50, 27 ноября 2025

Узнаем статус включения ipv6 на хостах ESXi

Get-VMHost | Select Name,@{N='IPv6 Enabled';E={$_.ExtensionData.Config.Network.ipV6Enabled}}

Назначение прав доступа на виртуальные машины с определенным шаблоном в имени

Get-VM -name "SL*" | where {$_.powerState -eq "PoweredOn"} | New-VIPermission -Role "Read-only + Console + Reboot" -Principal "DOMAIN\vasya"

На каких включенных виртуальных машинах настроен USB-контроллер

Get-VM | where {$_.PowerState -eq 'PoweredOn'}| ?{$_.ExtensionData.Config.Hardware.Device.DeviceInfo.Label -match "USB"}

На каких включенных виртуальных машинах не добавлен CD-ROM

$vmList = Get-VM |  where {$_.PowerState -eq 'PoweredOn'}
foreach ($vm in $vmList) {
    $cdStatus = Get-CDDrive -VM $vm
    if ($cdStatus -eq $null) {
        Write-Host "$($vm.Name) - CD-ROM is not attached"}}

Определение версии VMware Tools на хостах ESXi

$Result = @()
foreach ($ViHost in (Get-VMhost)) {
    $esxcli = $ViHost | Get-esxcli -V2
    $ToolsVersion = ($esxcli.software.component.get.Invoke() | Where-Object {$_.name -eq "VMware-VM-Tools"}).Version
    $Result += [PSCustomObject] @{
        HostName = $ViHost.Name;
        ToolsVersion = $ToolsVersion}}
$Result

Определение времени загрузки операционной системы и сортировка в порядке увеличения времени uptime

$vms = Get-VM | where {($_.powerState -eq "PoweredOn") -and ($_.name –notlike “*vCLS*”)}
$stat = 'sys.osuptime.latest'
$now = Get-Date
Get-Stat -Entity $vms -Stat $stat -Realtime -MaxSamples 1 | Select @{N='VM';E={$_.Entity.Name}}, @{N='LastOSBoot';E={$now.AddSeconds(- $_.Value)}}, @{N='UptimeDays';E={[math]::Floor($_.Value/(24*60*60))}} | Sort-Object  UptimeDays | ft -a

Вывод в CSV-файл списка включенных виртуальных машин с Windows и не равной определенной версии Vmware Tools

Get-VM |where {($_.PowerState -eq "PoweredOn") -and ($_.Guest -like "*Windows*") -and ($_.Guest.ToolsVersion -ne "12.3.5")} | Select-Object -Property Name,@{Name='ToolsVersion';Expression={$_.Guest.ToolsVersion}} | export-csv -Encoding UTF8 -Path C:\Temp\vmware_tools_ver.csv -NoClobber -UseCulture 

Получение списка датасторов, у которых произошла переподписка (OverProvisioned)

$report = Get-Datastore | ForEach-Object {
    $datastore = $_
    $capacityGB = [math]::Round($datastore.CapacityGB, 2) 
    # Считаем Provisioned Space
    $provisionedGB = Get-VM -Datastore $datastore | Get-HardDisk | 
        Where-Object { $_.FileName.Split(']')[0].TrimStart('[') -eq $datastore.Name } | 
        Measure-Object -Property CapacityGB -Sum | 
        Select-Object -ExpandProperty Sum
    # Если дисков нет, устанавливаем 0
    $provisionedGB = if ($provisionedGB) { [double]$provisionedGB } else { 0.0 }
    $provisionedGB = [math]::Round($provisionedGB, 2)
    # Формируем отчет
    if ($provisionedGB -gt $capacityGB) {
        [PSCustomObject]@{
            Datastore = $datastore.Name
            CapacityGB = $capacityGB
            ProvisionedGB = $provisionedGB
            OverProvisionedByGB = [math]::Round(($provisionedGB - $capacityGB), 2)
        }
    }
}
$report | Format-Table -AutoSize

Вывод событий за последние сутки о перезагрузках виртуальных машин из-за недоступности хоста

$Date = Get-Date
$HAVMrestartold =1
Get-VIEvent -maxsamples 100000 -Start ($Date).AddDays(-$HAVMrestartold) -type warning | Where {$_.FullFormattedMessage -match "restarted"} |select CreatedTime,FullFormattedMessage |sort CreatedTime -Descending