【发布时间】:2016-11-21 02:21:28
【问题描述】:
我想从 ESXi 获取所有信息。我在不同的 CSV 文件中提取了信息,但是一旦我想合并它们,它就不会全部显示。但我宁愿创建 foreach 来收集相同的信息。
Add-PsSnapin VMware.VimAutomation.Core -ErrorAction "SilentlyContinue"
Import-Module ‚C:\Program Files\Microsoft Virtual Machine Converter\MvmcCmdlet.psd1‘
$datetime = Get-Date -Format "ddMMyyyy";
# Configuration Block
$User =
$Password =
$ESXiServer = "172.17.1.171"
# Connect to ESXi
$PWD = ConvertTo-SecureString -AsPlainText -Force -String $Password;
$SourceCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User,$PWD;
$sourceConnection = New-MvmcSourceConnection -Server $ESXiServer -SourceCredential $sourceCredential
$SourceVMName = (Get-MvmcSourceVirtualMachine -SourceConnection $sourceconnection).Name
$Datacenter = Get-Datacenter
$Datastore = Get-Datastore
$DataStoreLocation = $Datastore.ExtensionData.info.url
$Datastore = Get-Datastore
# Get-VMHostNetworkAdapter | fl *
Get-VMHostNetworkAdapter | select VMhost, Name, IP, SubnetMask, Mac, DHCPEnabled, DeviceName | Export-Csv C:\VMHostNetworkDetails_$datetime.csv -Delimiter ";"
Get-MvmcSourceVirtualMachine -SourceConnection $sourceconnection | select MemorySizeBytes, OperatingSystem, UsedSpacebytes | Export-Csv C:\VMRAmDetails_$datetime.csv -Delimiter ";"
$Global:DefaultVIServers | Select ProductLine,Version,Build, Port | Export-Csv C:\GlobalDetails_$datetime.csv -Delimiter ";"
@(Import-Csv C:\VMHostNetworkDetails_$datetime.csv) + @(Import-Csv C:\VMRAmDetails_$datetime.csv) + @(Import-Csv C:\GlobalDetails_$datetime.csv) | Export-Csv C:\ESxiDetails_$datetime.csv -Delimiter ";"
注意:get-vm 对我不起作用。
编辑:
我尝试使用 foreach 循环获取信息,但无法获取 IP、SubnetMask、Mac、DHCPEnabled。$VMSysInfo.IPAddress 不给我任何 IP,但Get-VMHostNetworkAdapter | select VMhost, Name, IP, SubnetMask, Mac, DHCPEnabled, DeviceName 给我 IP。
$VmInfo = vmware.vimautomation.core\Get-VM
$VMS = ($VmInfo).Name
$VCenter = @()
foreach ($VM in $VMS)
{
$HostServer = (($VmInfo | ? {$_.Name -eq $VM}).Host).Name
$VMSysInfo = Get-VMGuest -VM $VM
$MyObject = New-Object PSObject -Property @{
VMName = $VM
#VMHostName = $VMSysInfo.HostName
VMIP = $VMSysInfo.IPAddress
VMInstalledOS = $VMSysInfo.OSFullName
PowerState = ($VmInfo | ? {$_.Name -eq $VM}).PowerState
NumberOfCPU = ($VmInfo | ? {$_.Name -eq $VM}).NumCpu
MemoryGB = (($VmInfo | ? {$_.Name -eq $VM}).MemoryMB/1024)
VMDataS = (Get-Datastore -VM $VM).Name
#HostServer = (($VmInfo | ? {$_.Name -eq $VM}).Host).Name
#HostCluster = (Get-Cluster -VMHost $HostServer).Name
Datacenter = (Get-Datacenter -VM $vm).Name
#Notes = $vm | Select -ExpandProperty Description
Portgroup = (Get-VirtualPortGroup -VM $vm).Name
}
$VCenter += $MyObject
}
$VCenter | Select VMName,
@{N='VMIPAddress';E={$_.VMIP -join '; '}},
VMInstalledOS, PowerState, NumberOfCPU, MemoryGB,
@{N='VMDataStore';E={$_.VMDataS -join '; '}},
HostServer, HostCluster,Datacenter, Notes, Portgroup |
Export-Csv C:\test.csv -NoTypeInformation -Delimiter ";"
【问题讨论】:
-
“不显示”“不工作”“我不能” - 请阅读How to ask a good question 并编辑您的问题,并提供足够详细的信息,以便有人可以帮助您。
-
请仔细阅读。我的问题很清楚。我创建了 3 个 CSV 文件,每个文件都给了我正确的信息。只是想知道如何使用 foreach 循环获取相同的信息。
-
我猜
Get-VM不起作用,因为与 Hyper-V 命令的命名冲突。如果您使用包含模块/snapin 前缀vmware.vimautomation.core\Get-VM的全名,这可能会起作用。无论如何 - 目前尚不清楚三个不同的表格如何适合一个 CSV - 您希望它看起来像什么。如果将它们链接在一起,则不是 CSV 数据。 (Get-Content a.csv,b.csv,c.csv | Set-Content out.csv)。目前尚不清楚您打算让foreach循环什么。目前尚不清楚 foreach 循环如何/为什么可以收集相同的信息却给出不同的结果。 -
首先谢谢。
vmware.vimautomation.core\Get-VM工作。out.csv也有效,但只是问题所在:1-标题位于 3 行不同的行中,但我想要的是所有标题都在一行中。 2-我想通过使用 foreach 循环获得与 out.csv 中相同的信息。这对我来说就像是一种练习。
标签: powershell foreach vsphere esxi