使用PowerCLI检查分区alignment

我试图validation每个我正在工作的服务器中的文件系统分区是否正确alignment。 我已经得到了下面的脚本,当我尝试运行时,要么声称所有的虚拟服务器alignment或不alignment的基础上,如果我使用的语句(一个被注释掉):

$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\myself\Documents\Scripts\PartitionAlignment.csv" 

有谁知道我的代码有什么问题吗? 我仍然在学习分区,所以我不知道如何检查起始偏移量来validationalignment。

编辑:

  $myArr = @() $vms = get-vm | where {$_.PowerState -eq "PoweredOn" -and $_.Guest.OSFullName -match "Microsoft Windows*" } | sort name $wmi = get-wmiobject -class "win32_DiskPartition" -namespace "root\CIMV2" -ComputerName $vm #foreach ($_ In Get-WMIObject Win32_DiskPartition | Select Name, BlockSize, NumberOfBlocks, StartingOffSet, @{n='Alignment'; e={$_.StartingOffSet/$_.BlockSize}}) {$_} foreach ($wmi| Select Name, BlockSize, NumberOfBlocks, StartingOffSet, @{n='Alignment'; e={$_.StartingOffSet/$_.BlockSize}}) {$_} 

那么,我看到你已经注意到了试图做实际算术的那一行。 你的代码,因为它现在说"if partition starting offset = 65536 then partition is aligned"

这不是它的工作原理。 分区有各种各样的起点偏移。 WMI类现在在我的笔记本电脑上返回2个分区,两者都没有起始偏移量65536。

其次,即使你取消注释上面的那一行,它将起始偏移量除以65536,然后将余数与十进制数据types进行比较……这也不是它的工作原理。 不要使用十进制types。

 PS C:\> 1 -Is [Decimal] False PS C:\> 1.23 -Is [Decimal] False 

他们都评价为假。 这并不能说明该部门是否产生了剩余部分。

给这个旋转:

 Foreach($_ In Get-WMIObject Win32_DiskPartition | Select Name, BlockSize, NumberofBlocks, StartingOffset, @{n='Alignment';e={$_.StartingOffset/$_.BlockSize}}) { $_ } Name : Disk #0, Partition #0 BlockSize : 512 NumberofBlocks : 614400 StartingOffset : 1048576 Alignment : 2048 Name : Disk #0, Partition #1 BlockSize : 512 NumberofBlocks : 487778304 StartingOffset : 315621376 Alignment : 616448 

如果Alignment是一个整数,你很好。 如果是小数,alignment是错误的。

这里有一篇关于分区alignment的好文章:

http://technet.microsoft.com/en-us/library/dd758814(v=SQL.100).aspx

顺便说一句,这不是您通常需要担心的Windows 2008+虚拟机。 Windows可以处理自己的分区alignment。 Windows 2003及更低版本,也许。