powershell - 将 ObjectGuid 从 AD 转换为 GUID powershell

标签 powershell guid

我不明白为什么这在 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])

但不幸的是,PowerShell v4 中不存在“新建”方法。但是,第一个例子应该有效。 arg 是一个字节数组,因为它应该接受:GUID MSDN .但是我收到一条错误消息:

Cannot find an overload for "Guid" and the argument count: "16"

非常感谢任何帮助。谢谢!

最佳答案

我自己偶然发现了这个问题。 原因

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 - 将 ObjectGuid 从 AD 转换为 GUID powershell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30057249/

相关文章:

powershell - 远程运行 Get-EventLog 会删除实际事件日志

powershell - 如何使用 powershell 将 "\"替换为 "\\"?

c# - 我在哪里可以获得用于创建 DLL、C# 的接口(interface)和类的 GUID 值

c++ - 对 GUID_DEVINTERFACE_XXX 的 undefined reference

使用严格模式最新找不到 Powershell 对象

powershell - Powershell-显示清理(get-filehash结果为.txt文件)

Powershell,使用Contains检查文件是否包含特定单词

c# - 更改 GUID 中的两个字节

c#-4.0 - 在 C# 中分配 GUID

visual-studio-2010 - VS2010 : Multiple solutions, 一个共享的C#项目文件/GUID