数组中字符串的Powershell输出项到文件

Powershell output items of a string in an array to a file

当我在 powershell 中执行 net group (the name of the group) /domain 时,我得到一个这样的列表。一行中的多个项目,中间有许多空格:

groupmemberOne           groupmemberTwo           groupmemberThree
groupmemberFour          groupmemberFive          groupmemberSix

我想 extract/transform net group 的输出并通过脚本将其发送到 txt 文件,格式如下:

groupmemberOne
groupmemberTwo  
groupmemberThree
groupmemberFour
groupmemberFive     
groupmemberSix

到目前为止我做了什么:

New-Item -Path "thepath and .txt file" -ItemType File -Force
$data = net group /domain (the name of the group)
$transform = $data[8..$($data.Count -3)]
$result = $transform | ConvertFrom-String | out-string
Add-Content -Value $transform -Path "thepath and .txt file"

你能帮帮我吗?

注:

  • 一般来说,最好使用 PowerShell 命令,这样你就不必依赖解析 text并且可以操作objects及其属性:参见Get-ADUserGroupMember;在最简单的情况下(不区分用户、计算机和组类型的成员):

    (Get-ADUserGroupMember $groupName).Name > $outFile
    
  • 如果您没有 ActiveDirectory module installed / cannot install it, you can use the [adsi] class (short for: System.DirectoryServices.DirectoryEntry), as Santiago Squarzon 建议:

    • 请参阅 示例。
    • 有关与 [adsi] 一起使用所需的 LDAP 查询语法的信息,请参阅 this TechNet doc

如果您想坚持使用文本解析方法,请使用 -split operator 的一元形式来解析 net.exe group 调用的输出, 它按白色 space 的运行拆分字符串,忽略前导和尾随白色 space:

# ...
-split $transform > $outFile

注意:如果组成员名称本身包含 space,这将不起作用 。如果他们这样做,你必须按multiple spaces 的运行进行拆分,假设这样的运行是白色独有的space 分隔 名字:

# ... 
$transform -split '  +' > $outFile # split by 2 or more spaces

注意:>Out-File的有效别名,这意味着在Windows PowerShell中你'你会得到一个“Unicode”编码的文件(UTF-16LE)。如果不需要,则通过管道传输到 | Set-Content -Encoding utf8 $outFile,例如。

通过模拟 net group 输出的相关部分的简单示例进行说明:

PS> -split (
     'groupmemberOne           groupmemberTwo           groupmemberThree',
     'groupmemberFour          groupmemberFive          groupmemberSix'
    )

groupmemberOne
groupmemberTwo
groupmemberThree
groupmemberFour
groupmemberFive
groupmemberSix
PS> (
     'groupmember One           groupmember Two           groupmember Three',
     'groupmember Four          groupmember Five          groupmember Six'
    ) -split '  +'

groupmember One
groupmember Two
groupmember Three
groupmember Four
groupmember Five
groupmember Six