我有一个powershell脚本,它按大小输出所有Exchange 2003邮箱。
$computers = "vexch01","vexch02"
foreach ($computer in $computers) {
Get-Wmiobject -namespace rootMicrosoftExchangeV2 -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以octetBytes格式存储它们。
我发现了一些powershell函数,它将进行转换,但只有当花括号被删除时。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 rootMicrosoftExchangeV2 -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
中使用此函数,将给出字符串?
结合Andy Schneider的回答,您可能会发现这个函数很有用:
function Convert-GuidToLdapSearchString(
[parameter(mandatory=$true, position=0)][guid]$Guid
)
{
($Guid.ToByteArray() | foreach { '' + $_.ToString('x2') }) -join ''
}
(我认为我有一个更聪明的方法来做到这一点,通过添加一个ScriptProperty到System。Guid,但我似乎已经知道,你不能有效地向结构体添加成员。)
根据你的评论,我不确定我理解你想要完成什么,但我认为你可能只是遗漏了一个$_。下面是一个有点虚构的示例,它创建了一个带有GUID属性的对象,然后使用select和convert - guidtoldapsearchstring转换格式。我希望这对你有帮助。$o = New-Object PSObject -Property @{ GUID = $([Guid]::NewGuid()) }
$o
$o | select @{ Name='SearchString'; Expression={ Convert-GuidToLdapSearchString $_.GUID } }
这完全不是我想象中的函数使用方式。我希望您使用它来创建LDAP搜索子句,例如:
$searchString = Convert-GuidToLdapSearchString '{9e76c48b-e764-4f0c-8857-77659108a41e}'
$searcher = [adsisearcher]"(msExchMailboxGuid=$searchString)"
$searcher.FindAll()
是否将字符串转换为GUID ?
$guid = [System.Guid]"{21EC2020-3AEA-1069-A2DD-08002B30309D}"
$guid.ToString()
$guid.ToByteArray()