【问题标题】:Powershell Pull Current OUPowershell 拉取当前OU
【发布时间】:2012-06-05 20:44:38
【问题描述】:

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

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

-乔什

【问题讨论】:

    标签: vb.net powershell active-directory


    【解决方案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
        }
    }
    

    【讨论】:

    • 嗨,但这似乎不起作用。抱歉,也许我忽略了一些东西,因为我是 PowerShell 的新手?
    • 没关系,我有一些需要关闭的东西:\ 现在一切都很好,谢谢! :)
    • Ok 遇到了另一个问题,我正在尝试在基于 OU 的 switch 语句中使用输出。但是它似乎不起作用。
    • switch ($OU) { "OU=RATES_TRADING" { REACTOR_PUSH $RATES_Trading $REAC_VERSION } "OU=CRUDE_TRADING" { REACTOR_PUSH $CRUDE_Trading $REAC_VERSION } "OU=GRAINS_TRADING" { REACTOR_PUSH $GRAINS_Trading $REAC_VERSION } "OU=SPX_TRADING" { REACTOR_PUSH $SPX_Trading $REAC_VERSION } "OU=Analytics" { REACTOR_PUSH $Analytics $REAC_VERSION } "OU=RATES_ANALYTICS" { REACTOR_PUSH $RATES_Analytics $REAC_VERSION } }
    【解决方案2】:

    你不能根据这个page直接在Powershell中使用ADSystemInfo(或者至少不容易)

    好吧,这并不完全正确;可以在 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-21
      • 2020-10-04
      • 2018-10-04
      • 2014-06-28
      • 2021-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多