如何使用 "IF" 语句确定要添加到 VMDK 的可用磁盘 space 的数量?

How can I use "IF" statement to determine the amount of free disk space to add to a VMDK?

我正在使用的脚本如下。我们正在将我们的 1500 VDI 从 Windows 10 1809 升级到 1909,我们希望尽可能自动化该过程,因为这将是我们必须定期对每个新版本 Windows 执行的过程出去。我们正在使用 SCCM(系统中心配置管理器)。该脚本非常适合为多台机器扩展磁盘 space。它正在导入的 .csv 文件仅包含一个虚拟机列表,该脚本将在其上扩展磁盘 space。我想使用“if”语句来确定可用空间量 space 是否低于 30GB,如果是,则添加所需的磁盘 space 以使其达到 30GB 可用空间 space.示例:“if”free disk space 是 -lt 30GB,Set-HardDisk -CapacityGB(使 30GB free space 可用的区别),“if”free space 是 -eq 30GB,什么都不做。我已经研究了 Google 和这个网站,寻找任何远程相似的东西,但无法找到我需要的东西。感谢所有帮助实现这一目标的人。

##Task Change Disk Size
##Variable clear
$csvobjects = @()
$cskobject = @()
$network = @()
$isalive = @()

##Import VM name(s)
$csvobjects = Import-CSV -path "C:\Temp\ExpandHDDiskList.csv"

Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Confirm:$false

connect-viserver -server anyserver.com -User anyuser@anyserver.com

foreach ($csvobject in $csvobjects){
##Variable clear
$network = @()
$isalive = @()
##Pre-change data gathering
$beforechange = (GET-VM -Name $csvobject.vmname | FT -auto CapacityGB|out-string)
##Stop VM
GET-VM -Name $csvobject.vmname | Get-HardDisk -Name 'Hard disk 1' | Set-HardDisk -CapacityGB 75 -Confirm:$false
start-sleep -s 60

# Variable specifying the drive you want to extend
$drive_letter = "C"

# Script to get the partition sizes and then resize the volume
$size = (Get-PartitionSupportedSize -DriveLetter $drive_letter)
Resize-Partition -DriveLetter $drive_letter -Size $size.SizeMax
}

您可以使用 Get-VMGuest 在来宾 VM 中获取免费的 space。

在变量中设置目标免费量 space。 30GB (GB = 1024^3)

$gb = 1024 * 1024 * 1024
$space = 30 * $gb

使用 Get-VMGuest

从 VM 获取免费 space
$vm = Get-VMGuest $csvobject.vmname

现在,假设机器中有一个硬盘,判断空闲space是否小于30GB。如果是,请增加硬盘大小,以便有 30GB 的可用空间 space。计算采用磁盘容量并加上所需的可用空间 space (30GB),然后减去当前的可用空间 space。这都是以字节为单位完成的,因此将其转换为 GB 并将其四舍五入为整数以避免奇怪的磁盘大小:

if ($vm.Disks[0].FreeSpace -lt $space) {
   Get-HardDisk $vm.Vm | Select -first 1 | Set-HardDisk -CapacityGB ([math]::round(($vm.Disks[0].Capacity + $space - $vm.Disks[0].FreeSpace) / $gb))
}

运行 时要小心,尤其是当您的机器有多个硬盘时。

假设有 Windows 个虚拟机,您不需要停止虚拟机。您可以使用 Invoke-CommandInvoke-VMScript.

远程调整文件系统的大小

使用 PowerShell 5 或更新版本,您可以替换

    $gb = 1024 * 1024 * 1024

    1GB

并替换

    $space = 30 * $gb

    30GB

所以,整个脚本看起来像这样

    $vm = Get-VMGuest $csvobject.vmname
    if ($vm.Disks[0].FreeSpace -lt 30GB) {
    Get-HardDisk $vm.Vm | Select -first 1 | Set-HardDisk -CapacityGB ([math]::round(($vm.Disks[0].Capacity + 30GB - $vm.Disks[0].FreeSpace) / 1GB))}