通过脚本验证系统分区对齐

时间:2013-10-24 18:31:07

标签: powershell vmware partitioning powercli

我正在尝试验证我正在处理的每个服务器中的文件系统分区是否正确对齐。我已经得到了以下脚本,当我尝试运行时会声称所有虚拟服务器已根据我使用的if语句(一个被注释掉)对齐或未对齐:

$myArr = @()
$vms = get-vm | where {$_.PowerState -eq "PoweredOn" -and $_.Guest.OSFullName -match "Microsoft Windows*" } | sort name
foreach($vm in $vms){
    $wmi = get-wmiobject -class "win32_DiskPartition" -namespace "root\CIMV2" -ComputerName $vm
    foreach ($partition in $wmi){
        $Details = "" | Select-Object VMName, Partition, Status
        #if (($partition.startingoffset % 65536) -isnot [decimal]){
        if ($partition.startingoffSet -eq "65536"){
            $Details.VMName = $partition.SystemName
            $Details.Partition = $partition.Name
            $Details.Status = "Partition aligned"
        }
        else{
            $Details.VMName = $partition.SystemName
            $Details.Partition = $partition.Name
            $Details.Status = "Partition not aligned"
        }
    $myArr += $Details
    }
}
$myArr | Export-CSV -NoTypeInformation "C:\users\a411882\Documents\Scripts\PartitionAlignment.csv"

有人知道我的代码有什么问题吗?我还在学习分区,所以我不确定如何检查起始偏移数以验证分配。

1 个答案:

答案 0 :(得分:0)

您正在将虚拟机对象而不是字符串传递给get-wmiObject -ComputerName。当我这样做时,get-wmiObject会抛出RPC错误。您可以尝试-computerName $vm.guest.Hostname而不是-computerName $vm

在注释行中,您对%的使用应返回remainder,该值始终为整数或零。也许你正在期待一个商,并想评估它是否是一个整数?

PS C:\temp> (1 / 2) -isnot [int]
True
PS C:\temp> (2 / 1) -isnot [int]
False

最近的Windows操作系统会自动对齐他们的分区,所以就是这样。 Here是关于通常在VMware上进行对齐的好帖子,包括指向客户分区的更详细讨论的链接。