Powershell - 将文本文件串分割成块,然后删除不需要的信息

时间:2011-02-02 23:06:12

标签: powershell active-directory powershell-v2.0

使用Active Directory导出脚本。目前,该脚本可以轻松地将给定组中的用户对象作为完全限定名称导出到.txt文件中(即,而不是报告为“用户名”,您会得到丑陋的“CN = username,OU = foo,OU = bar,DC = FOO,DC =栏“)。

我的Powershell经验充其量只是新手。到目前为止我得到了什么:

  • 加载文本文件的内容
  • 将文本文件的内容拆分为“,”
  • 将这些内容写入第二个文本文件。

  • 生成的文本文件如下所示:

    "CN=username  
    OU=foo  
    OU=bar  
    DC=foo  
    DC=bar"
    

我的目标:

  • 保存以“CN =开头的任何结果文本行(是的,我想在开头保留”)
  • 删除其他所有内容
  • 剥离“CN =从结果行的开头
  • 注意:用户名长度不等

到目前为止我所拥有的:

$a = (Get-Content c:\test.txt | foreach-Object {$_.split(",,") })  
Out-File c:\results.txt -inputObject $a

我完全迷失了如何搜索带有通配符的模式的文本文件(即搜索包含“CN = *并保留这些行和那些行的任何行)的文本”然后将结果粘贴到.TXT。

非常感谢你提供的任何和所有指导。

2 个答案:

答案 0 :(得分:3)

Select-String会允许这样做。它对PowerShell来说有点grep

但是,如果我理解正确,你可以用

轻松一点
$a = (Get-Content c:\test.txt | foreach-Object {$_.split(",,") }) -match '^CN='

比较运算符可以应用于对象列表,只返回匹配项。

答案 1 :(得分:1)

也许还要查看Quest AD cmdlets并将其用作导出脚本。这样,您可以精确选择所需的属性,而无需过滤文本文件的输出,例如

Get-QADUser -Searchroot foo.bar/MyOu | Select Name, DisplayName, email