I sent this out a few days ago, but the list server seems to have been down. Retrying.
Xymonclient.ps1, lines 346-347 has:
[uint32]$diskusedKB = (uint32) - (uint32) # PS ver 1 doesnt support subtraction uint64's [uint32]$disksizeKB = uint32
Which is fine, until you have a disk that is large enough. When that happens, there is truncation. In the example below:
1K-blocks is correct Used is wrong - should be 2220117608 instead of 68526964 Avail is correct Capacity is wrong - should be 4% instead of 27% Summary is correct
Example:
[disk] Filesystem 1K-blocks Used Avail Capacity Mounted Summary(Total\Avail GB) ... F 2306837260 68526964 87800516 27% /FIXED/F 2199.97\83.73
I'm actually having some trouble figuring out where the overflow happens. I think Powershell must be using signed integers in some of the calculations. Maybe it's because of the 1KB constant.
PS> 1KB | get-member
TypeName: System.Int32
My fix was simply to remove all the [uint32] casts on those 2 lines. I'm running PS v2
PS> $PSVersionTable
Name Value
CLRVersion 2.0.50727.5466 BuildVersion 6.1.7601.17514 PSVersion 2.0 WSManStackVersion 2.0 PSCompatibleVersions {1.0, 2.0} SerializationVersion 1.1.0.1 PSRemotingProtocolVersion 2.1
If there is a pressing need to keep v1 compatibility, there may be a way to refactor the math so it works with uint32 (maybe casting the 1KBs), but I have a feeling that v2 compatibility is good enough.
Thanks,
glauber
(Let me know if you'd like me to investigate further.)
Glauber Ribeiro Experian Automotive, Schaumburg IL Infrastructure and Information Security