代码之家  ›  专栏  ›  技术社区  ›  Valrok

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

  •  2
  • Valrok  · 技术社区  · 11 年前

    我正在尝试验证我正在处理的每个服务器中的文件系统分区是否正确对齐。我有以下脚本,当我尝试运行时,它会声称所有虚拟服务器都已对齐或未对齐,这是基于我使用的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 回复  |  直到 11 年前
        1
  •  0
  •   noam    11 年前

    您正在将虚拟机对象而不是字符串传递给 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上总体一致性的好文章,其中包括一个关于来宾分区的更详细讨论的链接。