将 ObjectGuid 从 AD 转换为 GUID powershell
Convert ObjectGuid from AD to GUID powershell
我不明白为什么这在 PowerShell v4 中不起作用:
New-Object -TypeName System.Guid((New-Object -TypeName DirectoryServices.DirectorySearcher -Property @{ Filter = "(&(objectCategory=computer)(name=$env:COMPUTERNAME))" }).FindOne().Properties.Item('objectguid')[0])
当这在 PowerShell v5 中有效时:
[Guid]::New((New-Object -TypeName DirectoryServices.DirectorySearcher -Property @{ Filter = "(&(objectCategory=computer)(name=$env:COMPUTERNAME))" }).FindOne().Properties.Item('ObjectGuid')[0])
但不幸的是 'New' 方法在 PowerShell v4 中不存在。但是,第一个例子应该有效。 arg 是一个字节数组,因为它应该接受:GUID MSDN。但我收到一条错误消息:
Cannot find an overload for "Guid" and the argument count: "16"
非常感谢任何帮助。谢谢!
我成功了,一定是使用了错误的构造函数?我不知道,但这有效:
New-Object -TypeName System.Guid -ArgumentList @(,(New-Object -TypeName DirectoryServices.DirectorySearcher -Property @{ Filter = "(&(objectCategory=computer)(name=$env:COMPUTERNAME))" }).FindOne().Properties.Item('objectguid')[0])
希望它能在某时某处对某人有所帮助。
我自己偶然发现了这个问题。
原因
New-Object Guid @(,$guidByteArray)
在
时工作
New-Object Guid $guidByteArray
不是因为 powershell v4(及更低版本)如何解析您提供的内容。
前者被解释为将文字数组传递给 New-Object 的 -ArgumentList 参数。
后者被解释为将参数列表传递给 New-Object 的 -ArgumentList 参数。
Guid(Byte[]) 构造函数采用一个参数,如错误消息所述,Guid 结构没有接受任何类型的 16 个参数的构造函数。
在 powershell v5 中,Guid::New() 构造函数正确识别您打算传递数组而不是参数列表,并选择正确的重载。
我不明白为什么这在 PowerShell v4 中不起作用:
New-Object -TypeName System.Guid((New-Object -TypeName DirectoryServices.DirectorySearcher -Property @{ Filter = "(&(objectCategory=computer)(name=$env:COMPUTERNAME))" }).FindOne().Properties.Item('objectguid')[0])
当这在 PowerShell v5 中有效时:
[Guid]::New((New-Object -TypeName DirectoryServices.DirectorySearcher -Property @{ Filter = "(&(objectCategory=computer)(name=$env:COMPUTERNAME))" }).FindOne().Properties.Item('ObjectGuid')[0])
但不幸的是 'New' 方法在 PowerShell v4 中不存在。但是,第一个例子应该有效。 arg 是一个字节数组,因为它应该接受:GUID MSDN。但我收到一条错误消息:
Cannot find an overload for "Guid" and the argument count: "16"
非常感谢任何帮助。谢谢!
我成功了,一定是使用了错误的构造函数?我不知道,但这有效:
New-Object -TypeName System.Guid -ArgumentList @(,(New-Object -TypeName DirectoryServices.DirectorySearcher -Property @{ Filter = "(&(objectCategory=computer)(name=$env:COMPUTERNAME))" }).FindOne().Properties.Item('objectguid')[0])
希望它能在某时某处对某人有所帮助。
我自己偶然发现了这个问题。 原因
New-Object Guid @(,$guidByteArray)
在
时工作New-Object Guid $guidByteArray
不是因为 powershell v4(及更低版本)如何解析您提供的内容。
前者被解释为将文字数组传递给 New-Object 的 -ArgumentList 参数。
后者被解释为将参数列表传递给 New-Object 的 -ArgumentList 参数。
Guid(Byte[]) 构造函数采用一个参数,如错误消息所述,Guid 结构没有接受任何类型的 16 个参数的构造函数。
在 powershell v5 中,Guid::New() 构造函数正确识别您打算传递数组而不是参数列表,并选择正确的重载。