gpt4 book ai didi

powershell - 如何在 PowerShell 中访问用户帐户的域

转载 作者:行者123 更新时间:2023-12-02 23:25:29 28 4
gpt4 key购买 nike

我正在尝试获取机器上的管理员帐户列表。到目前为止,我在下面有这段代码来显示用户名

$obj_group = [ADSI]"WinNT://./Administrators,group"
$members= @($obj_group.psbase.Invoke("Members"))
foreach ($m in $members){
echo ([ADSI]$m).PSBase.InvokeGet("Name")
}

但我也想获得这些帐户所属的“域”。有什么建议吗?

最佳答案

帽子的提示 Santiago Squarzon感谢他的帮助。

尝试以下操作:

([ADSI] "WinNT://./Administrators,group").Members() |
ForEach-Object { ([ADSI] $_).Path }

.Path 返回组成员的完整目录服务 URI(路径),它反射(reflect)了原始域,尽管只是名称,而不是 FQDN(完全限定域名)。

  • 正如 Santiago 所建议的那样,对结果应用 .TrimStart('WinNT://') 是摆脱协议(protocol)方案的简单方法。

  • 要仅提取域名,请使用 (([ADSI] $_).Path -split '//?')[1]

至于只获取成员名称,您的原始代码可以简化为:

([ADSI] "WinNT://./Administrators,group").Members() |
ForEach-Object { ([ADSI] $_).psbase.Name }

注意:

  • 虽然 .Invoke("Members") 可用于调用 Members 方法,但常规方法调用语法也适用(.Members ())

  • .Members() 返回的对象也必须转换为 [ADSI] 才能访问其成员(如您的问题所示).

  • 访问 .Name 属性(仅仅是账户名)需要使用 intrinsic .psbase 属性,原因不明。

    • 相比之下,.Path 属性 - 包含帐户的完整目录服务 URI(路径;例如,WinNT://SERVER1/Administrator) - 不需要使用.psbase

.Path 属性除外,它必须始终直接访问.psbase.someProperty 的尴尬可以避免使用 .InvokeGet('someProperty') (如您的问题所示,尽管不需要 .psbase)

这使得以下简化的解决方案能够检索 .Name 属性值:

  • 使用 [adsi[]] 数组转换 - 注意需要 @(...) 来强制枚举:
([adsi[]] @([adsi] "WinNT://./Administrators,group").Members()).InvokeGet('Name')
  • 或者,正如 Santiago 所建议的那样,使用 .ForEach() array method 的重载接受类型文字 ([adsi]) 作为参数,它类似地将每个成员转换为 [adsi]
([adsi] "WinNT://./Administrators,group").Members().ForEach([adsi]).InvokeGet('Name')

关于powershell - 如何在 PowerShell 中访问用户帐户的域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38214252/

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