以 MB 格式格式化属性输出,括号中没有字节
Formatting attribute output in MB without bytes in parentheses
我编写了一个脚本,用于从 public 文件夹收集信息并将其输出到 .csv。一切都很好,除了 pf.FolderSize 属性以 MB 和 KB 的形式显示(导出),并在括号中显示字节,例如:1.925 MB(2,018,497 字节)。我想对整个事情进行总结,所以最好将结果格式化为 MB,不带括号,这样我就可以轻松获得所有文件夹的总体大小。
这是工作
$publicFolders = Get-PublicFolder "\SomePublicFolderName" -Recurse -resultsize unlimited |
Select-Object *
### Array to contain results
$results = @()
### Loop through and do the work
$publicFolders |ForEach-Object {
$pf = $_
if ($pf.MailEnabled){
$pfstat = Get-PublicFolderStatistics -Identity $pf.Identity | Where-Object {$_.User -notmatch "Default|Anonymous|S-X-X-XX"}
$perms = Get-PublicFolderClientPermission -Identity $pf.Identity | Where-Object {$_.User -notmatch "Default|Anonymous|S-X-X-XX"}
Foreach($perm in $perms){
[PSCustomObject]@{
PFName = $pf.Name
PFIdentity = $pf.Identity
MailEnabled = $pf.MailEnabled
FolderSize = $pf.FolderSize
TotalItemSize = $pfstat.TotalItemSize
ItemCount = $pfstat.ItemCount
LastModificationTime = $pfstat.LastModificationTime
UserWithPerms = $perm.User
AccessRights = $perm | Select-Object -ExpandProperty AccessRights
PrimaryAddy = $mepf.PrimarySmtpAddress
ForwardingAddy = $mepf.ForwardingAddress
}
}
}}| Export-Csv $path -NoTypeInformation -append
我已经尝试了下面的代码,但是所有的输出都是相同的值,所以这不可能是正确的...
$pfstat = Get-PublicFolderStatistics -Identity $pf.Identity | Where-Object {$_.User -notmatch "Default|Anonymous|S-X-X-XX"} | Select-Object FolderPath,ItemCount,LastModificationTime @{
N = "TotalItemSize (MB)";
E = {
"{0:N2}" -f ((($_.TotalItemSize -replace "[0-9\.]+ [A-Z]* \(([0-9,]+) bytes\)","`") -replace ",","") / 1MB)
}
}
一如既往,提前致谢。我很想知道我哪里做错了。
如果您运行您的代码在服务器本身或您的 PC 上,则会有所不同。
当 运行 在(较旧的 Exchange)服务器上运行时,TotalItemSize
可能不是 [string]
,而是一个 [Microsoft.Exchange.Data.Unlimited]
对象,它具有 .Value
属性 类型 [ByteQuantifiedSize]
.
要同时处理该问题,请使用辅助函数
function Format-MailboxStatisticsSize($itemSize) {
if ($itemSize -is [string]) {
'{0:F2}' -f (($itemSize -replace '^.*\(([\d,]+) bytes\)', '' -replace '\D') / 1MB)
}
else { # Microsoft.Exchange.Data.Unlimited
'{0:F2}' -f ($itemSize.Value.ToBytes() / 1Mb)
}
}
Format-MailboxStatisticsSize $pfstat.TotalItemSize # "1.925 MB (2,018,497 bytes)" --> 1.92
我编写了一个脚本,用于从 public 文件夹收集信息并将其输出到 .csv。一切都很好,除了 pf.FolderSize 属性以 MB 和 KB 的形式显示(导出),并在括号中显示字节,例如:1.925 MB(2,018,497 字节)。我想对整个事情进行总结,所以最好将结果格式化为 MB,不带括号,这样我就可以轻松获得所有文件夹的总体大小。
这是工作
$publicFolders = Get-PublicFolder "\SomePublicFolderName" -Recurse -resultsize unlimited |
Select-Object *
### Array to contain results
$results = @()
### Loop through and do the work
$publicFolders |ForEach-Object {
$pf = $_
if ($pf.MailEnabled){
$pfstat = Get-PublicFolderStatistics -Identity $pf.Identity | Where-Object {$_.User -notmatch "Default|Anonymous|S-X-X-XX"}
$perms = Get-PublicFolderClientPermission -Identity $pf.Identity | Where-Object {$_.User -notmatch "Default|Anonymous|S-X-X-XX"}
Foreach($perm in $perms){
[PSCustomObject]@{
PFName = $pf.Name
PFIdentity = $pf.Identity
MailEnabled = $pf.MailEnabled
FolderSize = $pf.FolderSize
TotalItemSize = $pfstat.TotalItemSize
ItemCount = $pfstat.ItemCount
LastModificationTime = $pfstat.LastModificationTime
UserWithPerms = $perm.User
AccessRights = $perm | Select-Object -ExpandProperty AccessRights
PrimaryAddy = $mepf.PrimarySmtpAddress
ForwardingAddy = $mepf.ForwardingAddress
}
}
}}| Export-Csv $path -NoTypeInformation -append
我已经尝试了下面的代码,但是所有的输出都是相同的值,所以这不可能是正确的...
$pfstat = Get-PublicFolderStatistics -Identity $pf.Identity | Where-Object {$_.User -notmatch "Default|Anonymous|S-X-X-XX"} | Select-Object FolderPath,ItemCount,LastModificationTime @{
N = "TotalItemSize (MB)";
E = {
"{0:N2}" -f ((($_.TotalItemSize -replace "[0-9\.]+ [A-Z]* \(([0-9,]+) bytes\)","`") -replace ",","") / 1MB)
}
}
一如既往,提前致谢。我很想知道我哪里做错了。
如果您运行您的代码在服务器本身或您的 PC 上,则会有所不同。
当 运行 在(较旧的 Exchange)服务器上运行时,TotalItemSize
可能不是 [string]
,而是一个 [Microsoft.Exchange.Data.Unlimited]
对象,它具有 .Value
属性 类型 [ByteQuantifiedSize]
.
要同时处理该问题,请使用辅助函数
function Format-MailboxStatisticsSize($itemSize) {
if ($itemSize -is [string]) {
'{0:F2}' -f (($itemSize -replace '^.*\(([\d,]+) bytes\)', '' -replace '\D') / 1MB)
}
else { # Microsoft.Exchange.Data.Unlimited
'{0:F2}' -f ($itemSize.Value.ToBytes() / 1Mb)
}
}
Format-MailboxStatisticsSize $pfstat.TotalItemSize # "1.925 MB (2,018,497 bytes)" --> 1.92