Powershell 编辑我找到的一个脚本,导入成人列表,获取他们的信息并导出回另一个csv

Powershell 编辑我找到的一个脚本,导入成人列表,获取他们的信息并导出回另一个csv,powershell,csv,Powershell,Csv,我所需要的只是一个项目的帮助。我的目标是使用powershell搜索用户并报告他们所属的组 我用剧本来满足我最初的需要 Param ( [Parameter(Mandatory=$true,ValueFromPipeLine=$true)] [Alias("ID","Users","Name")] [string[]]$User ) Begin { Try { Import-Module ActiveDirectory -ErrorAction Stop }

我所需要的只是一个项目的帮助。我的目标是使用powershell搜索用户并报告他们所属的组

我用剧本来满足我最初的需要

Param (
    [Parameter(Mandatory=$true,ValueFromPipeLine=$true)]
    [Alias("ID","Users","Name")]
    [string[]]$User
)
Begin {
    Try { Import-Module ActiveDirectory -ErrorAction Stop }
    Catch { Write-Host "Unable to load Active Directory module, is RSAT installed?"; Break }
}

Process {
    ForEach ($U in $User)
    {   $UN = Get-ADUser $U -Properties MemberOf
        $Groups = ForEach ($Group in ($UN.MemberOf))
        {   (Get-ADGroup $Group).Name
        } 
        $Groups = $Groups | Sort
        ForEach ($Group in $Groups)
        {   New-Object PSObject -Property @{
                Name = $UN.Name
                Group = $Group
            } |  export-csv "c:\grouptest.csv" -append
        } 
    } 
} 
我甚至可以让它导出结果。通过添加导出csv命令。这就是我遇到的一个问题。我不知道该做什么更改,从csv获取输入,然后将这些结果导出到不同的csv

因此,我想添加命令$UserList=IMPORT-CSV C:\UserList.CSV

我试过这个

Begin {
    Try { Import-Module ActiveDirectory -ErrorAction Stop }
    Catch { Write-Host "Unable to load Active Directory module, is RSAT installed?"; Break }
}

Process {
$UserList=IMPORT-CSV C:\Userlist.csv
    ForEach ($U in $UserList)
    {   $UN = Get-ADUser $U -Properties MemberOf
        $Groups = ForEach ($Group in ($UN.MemberOf))
        {   (Get-ADGroup $Group).Name
        } 
        $Groups = $Groups | Sort
        ForEach ($Group in $Groups)
        {   New-Object PSObject -Property @{
                Name = $UN.Name
                Group = $Group
            } |  export-csv "c:\grouptest.csv" -append
        } 
    } 
} 
但我一直在犯错误。它看起来像是试图将第一个用户与所有其他用户组合在一起来命名


任何帮助都将被上诉。:)

将foreach循环的结果分配给一个变量,然后将导出Csv移动到foreach的末尾。实际上,在循环中的每次迭代都会覆盖csv

Begin {
    Try { Import-Module ActiveDirectory -ErrorAction Stop }
    Catch { Write-Host "Unable to load Active Directory module, is RSAT installed?"; Break }
}

Process {
    $UserList=IMPORT-CSV C:\Userlist.csv
    $users = ForEach ($U in $UserList)
    {   $UN = Get-ADUser $U -Properties MemberOf
        $Groups = ForEach ($Group in ($UN.MemberOf))
        {   (Get-ADGroup $Group).Name
        } 
        $Groups = $Groups | Sort
        ForEach ($Group in $Groups)
        {   New-Object PSObject -Property @{
                Name = $UN.Name
                Group = $Group
            } 
        } 
    } 
    $users | export-csv "c:\grouptest.csv" -append
} 

这是为可能需要这种东西的其他人编写的工作脚本

Begin {
Try { Import-Module ActiveDirectory -ErrorAction Stop }
Catch { Write-Host "Unable to load Active Directory module, is RSAT installed?"; Break }
}

Process {
$UserList=Get-Content C:\Userlist.csv
$users = ForEach ($U in $UserList)
{   $UN = Get-ADUser $U -Properties MemberOf
    $Groups = ForEach ($Group in ($UN.MemberOf))
    {   (Get-ADGroup $Group).Name
    } 
    $Groups = $Groups | Sort
    ForEach ($Group in $Groups)
    {   New-Object PSObject -Property @{
            Name = $UN.Name
            Group = $Group
        } 
    } 
} 
$users | export-csv "c:\grouptest.csv" -append
} 

我复制了您编辑的脚本并尝试运行它。我遇到错误Get ADUser:无法绑定参数“Identity”。无法将值“@{arnett=ahudson}”转换为类型“Microsoft.ActiveDirectory.Management.ADUser”。错误:“无法将类型为“System.Management.Automation.PSCustomObject”的“@{arnett=ahudson}”值转换为类型为“Microsoft.ActiveDirectory.Management.ADUser”。“非常有趣的是,arnett是列表中的第一个用户,ahudson是第二个用户。对于每个进行中的错误@{arnett是相同的,但=是列表中的下一个用户。Import-CSV将内容作为对象数组导入,使用第一行作为标题。如果每行上只有用户名,请更改Import CSV以获取内容。如果没有,请发布UserList.CSV的摘录。完善获取内容。稍后我将发布我的工作代码。现在,要想知道用户ID是否相同,如何将组保持在同一行中,只需添加到一个新列。不过这只是一种幻想。这给了我现在所需要的。