首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按OU筛选PowerShell

按OU筛选PowerShell
EN

Stack Overflow用户
提问于 2021-03-11 00:22:02
回答 3查看 169关注 0票数 0
代码语言:javascript
复制
Import-Module ActiveDirectory

Get-ADComputer -Filter {enabled -eq $true} -properties *|select Name,
   | Out-File -FilePath c:\Powershell.txt

我正在尝试将列表导出到txt文件,并让它按名称显示我的域中所有计算机的列表以及它所分配到的OU或组。我可以用这个来检索名称,但我想添加一个OU列。

EN

回答 3

Stack Overflow用户

发布于 2021-03-11 00:37:47

由于RDN值包含OU,因此我们可以使用一些字符串拆分魔术来提取它:

代码语言:javascript
复制
Get-ADUser -Filter * |Select Name,@{Name='OU';Expression={$_.DistinguishedName -split '(?<!\\),' |Select -Index 1}}

这将只给我们提供RDN (即OU=Company Users),如果需要OU的完整DN,请执行以下操作:

代码语言:javascript
复制
Get-ADUser -Filter * |Select Name,@{Name='OU';Expression={$_.DistinguishedName -split '(?<!\\),',2 |Select -Skip 1}}

只有在前面没有\的情况下,模式(?<!\\),才会匹配DN中的任何, -这是为了避免对转义的,进行拆分,就像在CN=LastName\, FirstName,OU=Users,...中一样

票数 2
EN

Stack Overflow用户

发布于 2021-03-11 00:37:48

老实说,我会从DistinguishedName值派生OU。这将比运行额外的ActiveDirectory模块PowerShell命令更快。然后,您可以使用Select-Object's calculated properties输出OU值。我还建议输出到CSV (使用Export-Csv),因为这种格式很容易被PowerShell和其他文件编辑工具读取。

代码语言:javascript
复制
Get-ADComputer -Filter 'Enabled -eq $true' |
    Select-Object Name,@{n='OU';e={$_.DistinguishedName -creplace '^.*?,(?=[A-Z]{2}=.*)'}} |
        Export-Csv -Path c:\Computers.csv

请注意,CSV导出将有一个标题行,值将由逗号分隔。如果您喜欢使用不同的分隔符,则可以使用-Delimiter参数或PowerShell会话的默认列表分隔符和-UseCulture开关。

-creplace-replace运算符的区分大小写版本。

^.*?,(?=[A-Z]{2}=.*)是正则表达式语法,用于匹配要替换的文本。^表示字符串的开头。在匹配,之前,.*?,会尽可能地匹配几个字符。但是因为CN值可以包含,字符,所以我们只想在它位于OU=DC=之前时停止匹配。这就是为什么我们有积极的前瞻(?=[A-Z]{2}=.*)[A-Z]{2}恰好匹配后面跟着=的两个大写字母。

票数 1
EN

Stack Overflow用户

发布于 2021-03-11 01:09:50

这就是我所做的,它比提供的其他示例慢一点,但它将防止Get-ADcomputer cmdlet上的任何超时。我还使用CanonicalName来获得OU的绝对路径,因为OU可以具有相同的名称,并且规范比区分更容易阅读。

代码语言:javascript
复制
$Result=New-Object System.Collections.ArrayList
$OUs=Get-ADOrganizationalUnit -Filter * -Properties CanonicalName

foreach($OU in $OUs)
{
    $hash=@{
        Filter='Enabled -eq $true'
        SearchScope='OneLevel'
        SearchBase=$OU.DistinguishedName
    }
    $computers=Get-ADComputer @hash
    
    foreach($computer in $computers)
    {
        $Result.Add(
            [pscustomobject]@{
                ComputerName=$computer.Name
                OU=$OU.CanonicalName
        }) > $null
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66568822

复制
相关文章

相似问题

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