gpt4 book ai didi

powershell - 使用PowerShell将GUID字符串转换为octetBytes

转载 作者:行者123 更新时间:2023-12-03 01:23:04 26 4
gpt4 key购买 nike

我有一个Powershell脚本,可以按大小输出所有Exchange 2003邮箱。

$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以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中使用此函数来提供字符串?

最佳答案

结合Andy Schneider的答案,您可能会发现此功能很有用:

function Convert-GuidToLdapSearchString(
[parameter(mandatory=$true, position=0)][guid]$Guid
)
{
($Guid.ToByteArray() | foreach { '\' + $_.ToString('x2') }) -join ''
}

(我认为我可以通过向System.Guid中添加ScriptProperty来实现此目的的更巧妙的方法,但是我似乎已经知道您无法有效地向结构中添加成员。)

我不确定我是否会根据您的评论理解您要完成的工作,但是我认为您可能只省了$ _。这是一个有些人为的示例,该示例创建一个具有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()

关于powershell - 使用PowerShell将GUID字符串转换为octetBytes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7193370/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com