Vmware 使用Powercli连接多个VCenter服务器并收集信息

Vmware 使用Powercli连接多个VCenter服务器并收集信息,vmware,powercli,vcenter,Vmware,Powercli,Vcenter,我有一个VCenter服务器列表。他们位于不同的地点,拥有不同的客户。我创建了一个包含所有vcenter服务器和凭据的文本文件,如下所示。我有20多个vcenter服务器。我需要收集虚拟机、数据存储等信息(我有脚本) 我想连接到每个VCenter服务器并执行脚本。请帮帮我。提前感谢。有几种方法可以实现这一点,首先您需要确保您的配置设置为允许多个连接。这是通过以下步骤完成的: Set-PowerCLIConfiguration -DefaultVIServerMode Multiple 注意:可

我有一个VCenter服务器列表。他们位于不同的地点,拥有不同的客户。我创建了一个包含所有vcenter服务器和凭据的文本文件,如下所示。我有20多个vcenter服务器。我需要收集虚拟机、数据存储等信息(我有脚本)


我想连接到每个VCenter服务器并执行脚本。请帮帮我。提前感谢。

有几种方法可以实现这一点,首先您需要确保您的配置设置为允许多个连接。这是通过以下步骤完成的:

Set-PowerCLIConfiguration -DefaultVIServerMode Multiple
注意:可能还需要运行以下操作以对所有会话作用域强制执行更改:

Set-PowerCLIConfiguration -DefaultVIServerMode Multiple -Scope User
Set-PowerCLIConfiguration -DefaultVIServerMode Multiple -Scope Session
之后,您可以将多个vCenter服务器名称以字符串格式或数组格式传递给Connect-VIServer cmdlet,并将其传递给“server”参数

使用字符串的示例:

Connect-VIServer -Server vcenter0001,vcenter0002,vcenter0003 -User sysdep -Password "Password"
使用数组的示例:

$vCenterNames = @('vcenter0001','vcenter0002','vcenter0003')
Connect-VIServer -Server $vCenterNames -User sysdep -Password "Password"
最后,因为看起来您可能使用本地帐户而不是单个域帐户,所以您可以考虑集成VICredentialStore。这会将您的凭据保存在XML文件中,该文件将在身份验证时自动引用

用法示例:

New-VICredentialStoreItem -Host vcenter0001 -User vcenter0001\sysdep -Password "Password"
New-VICredentialStoreItem -Host vcenter0002 -User vcenter0002\sysdep -Password "Password"
New-VICredentialStoreItem -Host vcenter0003 -User vcenter0003\sysdep -Password "Password"
Connect-VIServer -Server vcenter0001,vcenter0002,vcenter0003

假设您有一个绝密csv文件,其中存储的连接信息(即vi服务器fqdn、登录用户名和密码)如下所示:

viserver, username, password
myfav.cust1.org, cust1usr, cust1pw
my2fav.cust2.net, cust2usr, cust2pw
myleastfav.cust3.com, cust3usr, cust3pw
function get-vminventory
{
    $viCntinfo = Import-Csv c:\mysecretdocs\custviservers.csv
    foreach ($vi in $viCntInfo)
    {
        $convi = connect-viserver -server $vi.viserver -username $vi.username -password $vi.password
        $vms = get-vm
        $vms | select name, MemoryGB, NumCpu,
            @{ n = "hostname"; e = { $_.guest.hostname } },
            @{ n = "ip"; e = { $_.guest.ipaddress -join ", " } },
            @{ n = "viserver"; e = { $convi.Name } }
        $discvi = disconnect-viserver -server * -force -confirm:$false
    }
}
get-vminventory | Export-Csv c:\mycustomerdata\vminfo.csv 
它保存在:
c:\mysecretdocs\custviservers.csv
您可以使用import csv和foreach语句,使用类似以下内容的函数执行库存脏活:

viserver, username, password
myfav.cust1.org, cust1usr, cust1pw
my2fav.cust2.net, cust2usr, cust2pw
myleastfav.cust3.com, cust3usr, cust3pw
function get-vminventory
{
    $viCntinfo = Import-Csv c:\mysecretdocs\custviservers.csv
    foreach ($vi in $viCntInfo)
    {
        $convi = connect-viserver -server $vi.viserver -username $vi.username -password $vi.password
        $vms = get-vm
        $vms | select name, MemoryGB, NumCpu,
            @{ n = "hostname"; e = { $_.guest.hostname } },
            @{ n = "ip"; e = { $_.guest.ipaddress -join ", " } },
            @{ n = "viserver"; e = { $convi.Name } }
        $discvi = disconnect-viserver -server * -force -confirm:$false
    }
}
get-vminventory | Export-Csv c:\mycustomerdata\vminfo.csv 
您可以在那里运行任何PowerCLI资源清册或自定义命令,并选择所需的任何输出,这只是使用Get-VM的一个示例。点源函数或只是将其粘贴到shell中。然后执行它并将输出放入csv中,如下所示:

viserver, username, password
myfav.cust1.org, cust1usr, cust1pw
my2fav.cust2.net, cust2usr, cust2pw
myleastfav.cust3.com, cust3usr, cust3pw
function get-vminventory
{
    $viCntinfo = Import-Csv c:\mysecretdocs\custviservers.csv
    foreach ($vi in $viCntInfo)
    {
        $convi = connect-viserver -server $vi.viserver -username $vi.username -password $vi.password
        $vms = get-vm
        $vms | select name, MemoryGB, NumCpu,
            @{ n = "hostname"; e = { $_.guest.hostname } },
            @{ n = "ip"; e = { $_.guest.ipaddress -join ", " } },
            @{ n = "viserver"; e = { $convi.Name } }
        $discvi = disconnect-viserver -server * -force -confirm:$false
    }
}
get-vminventory | Export-Csv c:\mycustomerdata\vminfo.csv 

此问题可能更适合于。是否确实要以明文形式存储密码。新的VICredentialStoreItem允许使用多个凭据,使用[0]、[1]等进行引用。谢谢Kyle,在我的情况下,用户名和密码也可以更改。。每个vcenter可以有不同的用户密码,而不是sysdep和机器生成的密码。这真是太棒了,正是我想要的!