1

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

Connect-VIServer vcenter0001 -User vcenter0001\sysdep -Password "Passwowrd1"
Connect-VIServer vcenter0002 -User vcenter0002\sysdep -Password "Passwowrd2"

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

4

2 回答 2

1

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

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
于 2017-07-26T21:20:50.787 回答
1

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

viserver, username, password
myfav.cust1.org, cust1usr, cust1pw
my2fav.cust2.net, cust2usr, cust2pw
myleastfav.cust3.com, cust3usr, cust3pw

它被保存在:c:\mysecretdocs\custviservers.csv 你可以使用 import-csv 和 foreach 语句来做你的库存脏工作,这个函数看起来像这样:

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
    }
}

您可以在那里运行任何 PowerCLI 清单或自定义命令并选择所需的任何输出,这只是使用 Get-VM 的示例。点源函数或将其粘贴到您的外壳中。然后执行它并将输出放入 csv 中,如下所示:

get-vminventory | Export-Csv c:\mycustomerdata\vminfo.csv 
于 2017-08-03T04:36:59.277 回答