我有一個按大小輸出所有Exchange 2003郵箱的powershell腳本。使用PowerShell將GUID字符串轉換爲octetBytes
$computers = "vexch01","vexch02"
foreach ($computer in $computers) {
Get-Wmiobject -namespace root\MicrosoftExchangeV2 -class Exchange_Mailbox -computer $computer | sort-object -desc Size | select-object MailboxDisplayName,StoreName,@{Name="Size/Mb";Expression={[math]::round(($_.Size/1024),2)}}, MailboxGUID | Export-Csv -notype -Path $computer.csv
}
目前這個輸出MailboxGUID爲字符串類型GUID(例如{21EC2020-3AEA-1069-A2DD-08002B30309D})。我想通過AD查找AD中的用戶,但AD將它們存儲爲octetBytes格式。
我發現了一些powershell functions這將做轉換,但只有當大括號被刪除。 Guid.ToString方法應該提供這個,但我不能讓它在上面的工作。
但是,如果我能想出如何做到這一點,Guid.ToByteArray方法可能會讓我更接近。
有沒有人破解過這個?
更新:到目前爲止的答案幫助我編寫了一個函數,將mailboxguid轉換爲通過LDAP進行搜索的正確格式。但是,我現在無法在腳本中使用它。這是我的更新腳本:
function ConvertGuidToLdapSearchString(
[parameter(mandatory=$true, position=0)]$Guid
)
{
$guid_object = [System.Guid]$Guid
($guid_object.ToByteArray() | foreach { '\' + $_.ToString('x2') }) -join ''
}
# Gets data through WMI from specified Exchange mailbox servers
$servers = "vexch01","vexch02"
foreach ($server in $servers) {
Get-Wmiobject -namespace root\MicrosoftExchangeV2 -class Exchange_Mailbox -computer $computer | sort-object -desc Size | select-object MailboxDisplayName,StoreName,@{Name="Size/Mb";Expression={[math]::round(($_.Size/1024),2)}}, @{Name="LDAP Guid";Expression={ConvertGuidToLdapSearchString(MailboxGUID)}} | Export-Csv -notype -Path $server.csv
}
我不知道爲什麼在select-object
使用功能與@{Name="LDAP Guid";Expression={ConvertGuidToLdapSearchString(MailboxGUID)}}
不起作用。
有沒有在select-object
中使用此函數的另一種方法,它會給字符串?
我更新了我的答案並提供了更多信息。 – OldFart