首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修改Get-ADComputer中distinguishedName的输出

修改Get-ADComputer中distinguishedName的输出
EN

Stack Overflow用户
提问于 2013-11-13 09:23:38
回答 3查看 19K关注 0票数 0

我的powershell知识非常基础。无论如何,我正在尝试创建一个脚本,它将在Get中转换来自distinguishedName的输出。

通常情况下,使用Get-ADComputer查询服务器的结果-- distinguishedName看起来是这样的--这取决于OU的结构:

代码语言:javascript
复制
CN=<servername>,OU=Others,OU=Servers,OU=0180,DC=win,DC=dom,DC=<something>,DC=com

我想要做的是将输出转换成两列并重新组织信息。到目前为止,我已经得到了两个列排序的部分,如下所示。

名称ParentContainer  -  server1 OU=Others,OU=Servers,OU=0180,DC=win,DC=dom,DC=,DC=com server2 OU=DRA8,OU=Servers,OU=Admins,DC=win,DC=dom,DC=,DC=com server3 OU=Others,OU=Servers,OU=0180,DC=win,DC=dom,DC=,DC=com server4 OU=Others,OU=Servers,OU=0180,DC=win,DC=dom,DC=,DC=com server5 OU=Servers,OU=4611,DC=win,DC=dom,DC=,DC=com

脚本如下所示:

代码语言:javascript
复制
$list = Get-Content "C:\temp\testservers.txt"
foreach ($servers in $list)
{
Get-ADcomputer "$servers" -Properties distinguishedName,cn | 
select name, @{n='ParentContainer';e={$_.distinguishedname -replace '^.+?,(CN|OU.+)','$1'}}
}

现在说到棘手的部分。在"ParentContainer“一栏中,我希望删除所有"DC=”值,然后切换OU,因此与上面不同,它应该如下所示。

名称ParentContainer  -  server1 OU=0180,OU=Servers,OU=Others server2 OU=Admins,OU=Servers,OU=DRA8 server3 OU=0180,OU=Servers,OU=Others server4 OU=0180,OU=Servers,OU=Others server5 OU=4611,OU=Servers

这样做的原因是,可以更容易地看到OU结构,以及服务器放置在CSV文件中的OU。

我能在深水里做吗?或者我在深水里?

向Torbjorn Persson问好

EN

回答 3

Stack Overflow用户

发布于 2013-11-13 11:48:38

试试看。拆分DN后,第一个元素将给出服务器名称。然后使用range运算符获取所有其他元素,这些元素自上而下,不以“dc=”开头,然后返回。

代码语言:javascript
复制
Get-ADComputer -Filter * | ForEach-Object{

    $dn = $_.DistinguishedName.Split(',')

    New-Object PSObject -Property @{
        Name = $dn[0] -replace '^cn='
        ParentContainer = $dn[$dn.length..1] -notlike 'dc=*' -join ','
    }

}

顺便说一下,您可能需要检查CanonicalName属性。它可能会以类似的方式提供您所追求的输出,而不需要操作DN。

票数 4
EN

Stack Overflow用户

发布于 2013-11-13 11:36:21

您可以编写内联代码,但为了简化操作,请导入我编写的Format-OU函数,然后将选择的代码行调整为:

代码语言:javascript
复制
select name, @{n='ParentContainer';e={Format-OU -OUString $_.distinguishedname}}

格式-OU功能:

代码语言:javascript
复制
Function Format-OU()
{
    param
    (
        [String]$OUString
    )
    $OUString = $OUString.Substring(0,$OUString.IndexOf("DC")-1)
    $OUArray = $OUString.Split(",")
    $Result = ""
    $Count = 1
    $OUArray | % {IF ($Count -eq 1) {$Result = $Result.Insert(0,"$_")} ELSE {$Result = $Result.Insert(0,"$_,")};$Count++}
    Return $Result
}
票数 0
EN

Stack Overflow用户

发布于 2013-11-13 13:10:02

这里还有另一种可能性:

代码语言:javascript
复制
Get-ADComputer -Filter * | ForEach-Object{  
  $split = ($dn -split 'CN=|,DC=.+').split(',',2) 
  New-Object PSObject -property @{
   Name=$split[1];ParentContainer=$split[2]}
}  
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19949933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档