Powershell 在CSV中找到点并替换为Active Directory组中找到的名称

Powershell 在CSV中找到点并替换为Active Directory组中找到的名称,powershell,active-directory,Powershell,Active Directory,我有一个TXT文件,并将其转换为CSV 现在我想要一个脚本: 在UserID列中查看是否有带点的名称(例如:xyz.aaa)。带点的名称不是UserID,而是Group 那么它应该在广告中寻找它们 然后替换同一CSV文件中找到的名称 在TXT文件中查找所有CNs并在CSV文件中列出: Select-String -Path $TXTFile -Pattern 'CN=(.*?),' -AllMatches | Select-Object -Expand Matches |

我有一个TXT文件,并将其转换为CSV

现在我想要一个脚本:

  • UserID
    列中查看是否有带点的名称(例如:
    xyz.aaa
    )。带点的名称不是UserID,而是Group
  • 那么它应该在广告中寻找它们
  • 然后替换同一CSV文件中找到的名称
在TXT文件中查找所有CNs并在CSV文件中列出:

Select-String -Path $TXTFile  -Pattern 'CN=(.*?),' -AllMatches |
    Select-Object -Expand Matches |
    ForEach-Object { $_.Groups[1].Value } | 
    select @{L="UserID"; E={$_}} |
    Export-CSV $CSVFile1 -Delimiter ";" 
我尝试过但没有成功,这绝对是错误的:

UserID
列中查找属于组的
,然后在AD中查找它们。替换GroupName中的成员

Get-ChildItem -Path $CSVFile1 | ForEach-Object {  
    (Get-Content $_.UserID).Replace('.','Get-ADGroupMember -identity "$_.UserID" -Recursive | Select Name') | Out-File $_.UserID
}

我想这样的事情应该能奏效

$ProcessedList = Import-Csv -Path $CSVFile1 -Delimiter ';' | 
    Select-Object -Property *,
    @{
        Name='ProcessedUserID';
        Expression={
            if ($_.UserID -match '\.') {
                (Get-ADGroupMember -Identity $_.UserID | 
                    Select-Object -ExpandProperty SamAccountName) -join ','
            }
            else {
                $_.UserID
            }
        }
    }
$ProcessedList
$ProcessedList | Export-CSV -Path 'Whatever' -NoTypeInformation -Delimiter ';'

... 还是你的EXL比较任务。。。这个TXT文件来自哪里?你不能得到那些已经准备好/适合你需要的信息吗?这与EXL无关。我得到了txt文件,可以将其转换为CSV。只是不知道如何搜索“.”/组并与成员一起使用它。如果您正在寻找“模式”,则可以使用正则表达式。。。如果你已经有一个CSV文件,你应该使用导入CSV而不是获取内容!!非常感谢。这对我帮助很大,但从你发布答案时起,我正在寻找一种方法,将广告结果存储在$ProcessedUserID中,并将$ProcessedUserID和$ProcessedUserID导出到csv中,但我没有成功。因为我从AD中得到的是数组{A,B,C,…},但我希望它们是CSV…在CSV中,我在一列中获得UserID和ProcessedUSerID。我建议您立即花时间学习Powershell的基础知识。你在问一些基本的问题,如果你知道基本原理,你就不必问这些问题。我添加了在CSV文件中导出列表的代码。