【问题标题】:Find users with a certain parameter, display the groups they belong to and count how many查找具有一定参数的用户,显示他们所属的组并统计有多少
【发布时间】:2020-07-22 11:59:40
【问题描述】:

我正在尝试了解特定组中有多少具有特定头衔的人。

我的方法是:

  1. 我正在寻找具有特定头衔的用户。
  2. 我正在遍历这些用户并寻找他们所在的组
  3. 然后,我循环遍历每个组并尝试在该特定标题有新条目时添加 .csv 条目,如果列出了组,我试图增加计数器。

我认为我的方法很慢 - 每次我导出和导入 .csv 文件时,但我确信有一种方法可以处理导入的文件。

我还有一个奇怪的错误:导入 test.csv 时,我有 10 个条目而不是一个。如何解决?

我的代码:

clear
$Roles = Get-Content 'C:\Users\DWodzinski-admin\Documents\Titles.txt'
$Users = @()
Foreach ($Item in $Roles){
    $Users += Get-ADUser -Filter {title -like $Item} -properties title, SamAccountName | Select SamAccountName, title
    }
Foreach ($User in $Users){      
    $AdGroups = Get-ADPrincipalGroupMembership $User.SamAccountName | Select Name
    foreach ($thing in $AdGroups) {            
            $name = $thing.name
            $csv = Import-Csv "C:\Users\DWodzinski-admin\Documents\test.csv"
            foreach($i in $csv){
                if($i.Group -eq $name -and $i.Title -eq $User.title) {             
                $i.Count += 1
                Export-CSV "C:\Users\DWodzinski-admin\Documents\test.csv" -NoTypeInformation
                } else {
                $NewCsvEntry = @{
                 Title = $User.title
                 Group = $name
                 Count = 0
                 }
                [PSCustomObject]$NewCsvEntry | Export-CSV "C:\Users\DWodzinski-admin\Documents\test.csv" -NoTypeInformation -Append                 
                }
                $i
            }
        }
    $csv | Export-CSV "C:\Users\DWodzinski-admin\Documents\test.csv" -NoTypeInformation -Append
    }

【问题讨论】:

    标签: powershell csv


    【解决方案1】:

    我对其进行了更改,使其仅在开始时导入您的 csv 一次,并在结束时导出(覆盖)它。也许它也解决了您对 10 个条目的问题,试试吧。

    clear
    $csv = Import-Csv "C:\Users\DWodzinski-admin\Documents\test.csv"
    
    $Roles = Get-Content 'C:\Users\DWodzinski-admin\Documents\Titles.txt'
    $Users = @()
    Foreach ($Item in $Roles) {
        $Users += Get-ADUser -Filter { title -like $Item } -properties title, SamAccountName | Select SamAccountName, title
    }
    Foreach ($User in $Users) {      
        $AdGroups = Get-ADPrincipalGroupMembership $User.SamAccountName | Select Name
        foreach ($thing in $AdGroups) {            
            $name = $thing.name
            foreach ($i in $csv) {
                if ($i.Group -eq $name -and $i.Title -eq $User.title) {             
                    $i.Count += 1
                }
                else {
                    $newCsvEntry = [PSCustomObject]@{
                        Title = $User.title
                        Group = $name
                        Count = 0
                    }
                    $csv += $newCsvEntry
                }
                $i
            }
        }
    }
    
    $csv | Export-CSV "C:\Users\DWodzinski-admin\Documents\test.csv" -NoTypeInformation -Force
    

    【讨论】:

      【解决方案2】:

      如果有人想知道我是怎么做到的,我用 CustomObjects 创建了 ArrayList:

      clear
      $Roles = Get-Content 'C:\Users\DWodzinski-admin\Documents\Titles.txt'
      $Users = @()
      $List = New-Object System.Collections.ArrayList
      $Object = [PSCustomObject]@{
      Name = 'Pierwszy';
      Title = 'Czarny';
      Count = 0;
      }
      $List.add($Object)
      Foreach ($Item in $Roles){
          $Users += Get-ADUser -Filter {title -like $Item} -properties title, SamAccountName | Select SamAccountName, title
          }
      Foreach ($User in $Users){      
          $AdGroups = Get-ADPrincipalGroupMembership $User.SamAccountName | Select Name
          foreach($Group in $AdGroups){
              if($List | Where Name -eq $Group.name | Where Title -eq $User.title){
                  $temp = $List | Where Name -eq $Group.name | Where Title -eq $User.title
                  $temp.Count += 1
              } else {
              $Object = [PSCustomObject]@{
                  Name = $Group.Name;
                  Title = $User.title;
                  Count = 1;
                  }
              $List.add($Object)
              }
          }
      }
      $FilePathLocation = "C:\Users\DWodzinski-admin\Documents\test.csv"
      $List | Export-Csv -Path $FilePathLocation -NoTypeInformation
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-21
        • 1970-01-01
        • 1970-01-01
        • 2019-04-01
        • 1970-01-01
        • 2022-01-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多