使用PowerShell获取VHD信息

使用PowerShell获取VHD信息,powershell,powershell-4.0,Powershell,Powershell 4.0,你能帮我完成Powershell脚本吗?我对Powershell相当陌生,但我的老板希望我尽快完成这项工作 对于虚拟机监控程序(服务器2012)上的每个虚拟机,我们需要相关的VHD文件,对于每个VHD文件: -文件的位置 -文件大小(允许的最大值) -文件的实际大小(当前已分配) -分配类型:厚或薄 -快照文件的位置 -快照文件的大小 到目前为止,我已经想到了这个(嗯……我发现的是)(*是我们的HV名称): 不知何故,这不会为文件大小、磁盘类型、大小和快照提供任何输出。加载HyperV模块。运行

你能帮我完成Powershell脚本吗?我对Powershell相当陌生,但我的老板希望我尽快完成这项工作

对于虚拟机监控程序(服务器2012)上的每个虚拟机,我们需要相关的VHD文件,对于每个VHD文件:
-文件的位置
-文件大小(允许的最大值)
-文件的实际大小(当前已分配)
-分配类型:厚或薄
-快照文件的位置
-快照文件的大小

到目前为止,我已经想到了这个(嗯……我发现的是)(*是我们的HV名称):

不知何故,这不会为文件大小、磁盘类型、大小和快照提供任何输出。

加载HyperV模块。运行“'Get-VM”查看是否已加载。然后运行如下操作:

Get-VM –ComputerName SERVER1, SERVER2 |
Get-VMHardDiskDrive |
Select-Object -Property VMName, VMId, ComputerName, ControllerType, ControllerNumber, ControllerLocation, Path |
Sort-Object -Property VMName |
Out-GridView -Title "Virtual Disks"

这个问题已经过时了,但也许有人对此感兴趣

注意:不考虑快照

$VMget=Get-VM -computername w01s007,w01s006,w01s008 | Get-VMHardDiskDrive | Select-Object -Property vmname, vmid, computername, controllertype, controllernumber,controllerlocation,path
 foreach ($VM in $VMget) {
    $VHDRemotePath=$VM.Path  -replace ":", "$"
    $VHDRemotePath="\\"+$VM.ComputerName+"\"+$VHDRemotePath
    $vhdsize=  gci $VHDRemotePath | select-object @{Name="SizeGB";Expression={"{0:N2}" -f ($_.length / 1GB)}}
    write-host = $VM.VMName " - " $vhdsize.SizeGB "GB - " $VM.Path
}

这很管用,虽然它没有给我尺寸。添加大小和文件大小会在Out Gidview中为我提供一个包含这些名称的选项卡,但该选项卡未填充。
$VMget=Get-VM -computername w01s007,w01s006,w01s008 | Get-VMHardDiskDrive | Select-Object -Property vmname, vmid, computername, controllertype, controllernumber,controllerlocation,path
 foreach ($VM in $VMget) {
    $VHDRemotePath=$VM.Path  -replace ":", "$"
    $VHDRemotePath="\\"+$VM.ComputerName+"\"+$VHDRemotePath
    $vhdsize=  gci $VHDRemotePath | select-object @{Name="SizeGB";Expression={"{0:N2}" -f ($_.length / 1GB)}}
    write-host = $VM.VMName " - " $vhdsize.SizeGB "GB - " $VM.Path
}