2

我需要能够拉出当前机器 OU。我找到了一些可以做到这一点的 VB 代码,但我希望能够在脚本中执行此操作而不必调用 VB。任何想法,VB代码如下。

Set objSysInfo = CreateObject("ADSystemInfo")
DN = objSysInfo.ComputerName
WScript.Echo DN

-乔什

4

2 回答 2

1

您可以使用此函数获取 ADSystemInfo。

function Get-LocalLogonInformation
{
    try
    {
        $ADSystemInfo = New-Object -ComObject ADSystemInfo
        $type = $ADSystemInfo.GetType()

        New-Object -TypeName PSObject -Property @{
            UserDistinguishedName = $type.InvokeMember('UserName','GetProperty',$null,$ADSystemInfo,$null)
            ComputerDistinguishedName = $type.InvokeMember('ComputerName','GetProperty',$null,$ADSystemInfo,$null)
            SiteName = $type.InvokeMember('SiteName','GetProperty',$null,$ADSystemInfo,$null)
            DomainShortName = $type.InvokeMember('DomainShortName','GetProperty',$null,$ADSystemInfo,$null)
            DomainDNSName = $type.InvokeMember('DomainDNSName','GetProperty',$null,$ADSystemInfo,$null)
            ForestDNSName = $type.InvokeMember('ForestDNSName','GetProperty',$null,$ADSystemInfo,$null)
            PDCRoleOwnerDistinguishedName = $type.InvokeMember('PDCRoleOwner','GetProperty',$null,$ADSystemInfo,$null)
            SchemaRoleOwnerDistinguishedName = $type.InvokeMember('SchemaRoleOwner','GetProperty',$null,$ADSystemInfo,$null)
            IsNativeModeDomain = $type.InvokeMember('IsNativeMode','GetProperty',$null,$ADSystemInfo,$null)
        }
    }
    catch
    {
        throw
    }
}
于 2012-06-06T06:39:07.300 回答
0

根据this page ,您不能ADSystemInfo直接在Powershell中使用(或者至少不容易)

好吧,这并不完全正确。可以在 PowerShell 中使用 ADSystemInfo;然而,这个过程远非简单,甚至远非直观。这是因为 ADSystemInfo 缺少一个“包装器”,它使得从 Windows PowerShell 等 .NET 语言访问对象变得容易。这导致了很多涉及 .NET Reflection 类、InvokeMember 方法的旋转,并且,据我们所知,很多祈祷。

System.DirectoryServices.DirectorySearcher但该页面确实提供了使用.NET 对象执行 AD 查询的示例。这是页面中的一个示例,该示例稍作修改以匹配您的 VB 脚本:

$strName = $env:computername
$strFilter = "(&(objectCategory=Computer)(Name=$strName))"

$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.Filter = $strFilter

$objPath = $objSearcher.FindOne()
$objPath.GetDirectoryEntry().distinguishedname
于 2012-06-05T21:16:09.470 回答