Не удается подключиться к кластеру VMware с PowerShell - PullRequest
0 голосов
/ 25 октября 2018

Мне нужно получить статистику из кластера, например, использование памяти или процессора.Я пытаюсь подключиться с помощью команды Connect-VIServer, но не могу пройти через нее.У меня есть доступ к vcenter с клиентом vSphere без каких-либо проблем.

Add-PSSnapin VMware.VimAutomation.Core

Connect-VIServer -server 'ServerIP' -user 'Username' -password 'Password'
$clusterName = 'ServerIP'



$stat = 'cpu.usagemhz.average','mem.usage.average'

$entity = Get-Cluster -Name $clusterName

$start = (Get-Date).AddDays(-2)



Get-Stat -Entity $clusterName -Stat $stat -Start $start |

Group-Object -Property Timestamp |

Sort-Object -Property Name |

Select @{N='Cluster';E={$entity.Name}},

    @{N='Time';E={$_.Group[0].Timestamp}},

    @{N='CPU GHz Capacity';E={$script:capacity = [int]($entity.ExtensionData.Summary.TotalCPU/1000); $script:capacity}},

    @{N='CPU GHz Used';E={$script:used = [int](($_.Group | where{$_.MetricId -eq 'cpu.usagemhz.average'} | select -ExpandProperty Value)/1000); $script:used}},

    @{N='CPU % Free';E={[int](100 - $script:used/$script:capacity*100)}},

    @{N='Mem Capacity GB';E={$script:mcapacity = [int]($entity.ExtensionData.Summary.TotalMemory/1GB); $script:mcapacity}},

    @{N='Mem Used GB';E={$script:mused = [int](($_.Group | where{$_.MetricId -eq 'mem.usage.average'} | select -ExpandProperty Value) * $script:mcapacity/100); $script:mused}},

    @{N='Mem % Free';E={[int](100 - $script:mused/$script:mcapacity*100)}} |

Export-csv -Path C:\cluster-stats.csv

Сценарий выполняется в течение нескольких минут, но в итоге я получаю сообщение об ошибке:

Connect-VIServer : 25/10/2018 12:54:46    Connect-VIServer        The underlying connection was closed: An unexpected error occurred on a send.    
At line:3 char:1
+ Connect-VIServer -server 'ServerIP' -user 'Username' -password 'Password'
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Connect-VIServer], ViError
    + FullyQualifiedErrorId : Client20_ConnectivityServiceImpl_Reconnect_WebException,VMware.VimAutomation.ViCore.Cmdlets.Commands.ConnectVIServer

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Есть пара вещей, которые вы можете сделать.

Сначала обновите свою версию PowerCLI.PowerCLI не использовал оснастки PowerShell в течение нескольких лет (~ 2015 г.) и, вероятно, не будет работать на vSphere 6.0 и новее.

Во-вторых, используйте функцию с именем Resolve-Error.Это вызовет последний объект ошибки и выведет свойство, которое содержит некоторую дополнительную информацию, которая может помочь вам в дальнейшем устранении неполадок.

function Resolve-Error ($ErrorRecord=$Error[0])
{
   $ErrorRecord | Format-List * -Force
   $ErrorRecord.InvocationInfo | Format-List *
   $Exception = $ErrorRecord.Exception
   for ($i = 0; $Exception; $i++, ($Exception = $Exception.InnerException))
   {   “$i” * 80
       $Exception | Format-List * -Force
   }
}

Запустите приведенные выше строки кода, снова запустите сценарий, затем выполните Resolve-Error.Если вывод не имеет смысла, скопируйте / вставьте его здесь.

0 голосов
/ 25 октября 2018

Вы должны также указать 'https' в качестве протокола в:

Connect-ViServer

Так что-то вроде:

Connect-ViServer -Server $myServer -Protocol https -Credential $myCreds

У меня раньше были такие проблемы (связано с SSL/ TLS) .. В окончательном исправлении было несколько различий, поэтому одно из них должно помочь:

:: В основном для vCloud ::

 function Set-VmWareTls
    {
        try {        
            # Grab current ciphers, convert their names to strings, add to an array
            $esp = [System.Net.ServicePointManager]::SecurityProtocol.ToString().Split(',') | Foreach-Object {     
                $($_.TrimStart(' ').TrimEnd(' '))         
            }     
            # See if gathered ciphers contains the needed ciphers for vCloud/vCenter to connect without issue
            if (($esp -notcontains 'Tls11') -or ($esp -notcontains 'Tls12')) {     
                # if they're not found, add them
                [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls11 -bor [System.Net.SecurityProtocolType]::Tls12;                     
            }        
            # if we were able to process evertying above, return true
            $true    
        } catch {    
            # If we are unable to set the ciphers return false
            $false    
        }     
    }

:: vCenter::

function Set-IgnoreCertCheck
{
    if (-not ([System.Management.Automation.PSTypeName]'ServerCertificateValidationCallback').Type)
    {
        $certCallback = @"
            using System;
            using System.Net;
            using System.Net.Security;
            using System.Security.Cryptography.X509Certificates;
            public class ServerCertificateValidationCallback
            {
                public static void Ignore()
                {
                    if(ServicePointManager.ServerCertificateValidationCallback ==null)
                    {
                        ServicePointManager.ServerCertificateValidationCallback += 
                            delegate
                            (
                                Object obj, 
                                X509Certificate certificate, 
                                X509Chain chain, 
                                SslPolicyErrors errors
                            )
                            {
                                return true;
                            };
                    }
                }
            }
"@

    Add-Type $certCallback
    }
    [ServerCertificateValidationCallback]::Ignore()
}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...