2017-08-28 84 views
0

我对powershell很新,所以我会尽我所能解释我自己。我目前正在使用一个脚本,它为服务器上的所有用户和用户组创建一个访问级别的csv报告。在管理员和用户权限之间分解。现在,它目前为具有Admin和User访问权限的组提供了两个条目。类似于下面的图像。 (张贴的图像由于一些麻烦创建于计算器表)如果powershell存在重复项,则更改CSV报告条目

Current Layout

我希望有关如何巩固用户/组,其重复报告为一个条目,在一个X的一些建议两个领域。有点像下面:

https://i.stack.imgur.com/o1RUa.png

这里是我当前的脚本:

[CmdletBinding()] 
Param(
    [Parameter( ValueFromPipeline=$true, 
       ValueFromPipelineByPropertyName=$true 
       )] 
    [string[]] 
    $ComputerName = $env:ComputerName, 

    [Parameter()] 
    [array] $LocalGroupNames = @("Administrators", "Remote Desktop Users"), 

    [Parameter()] 
    [string] 
    $LocalGroupName, 

    [Parameter()] 
    [string] 
    $OutputDir = "c:\temp" 
) 

Begin { 
    $OutputFile = Join-Path $OutputDir "OSUsers $(get-date -f yyyy-MM-dd).csv" 
    Add-Content -Path $OutPutFile -Value "ServerName, User\Group, Administrator, User" 
    } 

Process { 
    ForEach($Computer in $ComputerName) { 
     foreach ($LocalGroupName in $LocalGroupNames) { 
     Write-host "Working on $Computer" 
     If(!(Test-Connection -ComputerName $Computer -Count 1 -Quiet)) { 
      Add-Content -Path $OutputFile -Value "$Computer,Offline,Offline,Offline" 
      Continue 
     } else { 
      Write-Verbose "Working on $computer" 
      try { 
       $group = [ADSI]"WinNT://$Computer/$LocalGroupName" 
       $members = @($group.Invoke("Members")) 
       Write-Verbose "Successfully queries the members of $computer" 
       if(!$members) { 
        Add-Content -Path $OutputFile -Value "$Computer,NoMembersFound" 
        Write-Verbose "No members found in the group" 
        continue 
       } 
      }   
      catch { 
       Add-Content -Path $OutputFile -Value "$Computer,FailedToQuery" 
       Continue 
      } 
      foreach($member in $members) { 
       try { 
        $MemberName = $member.GetType().Invokemember("Name","GetProperty",$null,$member,$null) 
        $MemberType = $member.GetType().Invokemember("Class","GetProperty",$null,$member,$null) 
        $MemberPath = $member.GetType().Invokemember("ADSPath","GetProperty",$null,$member,$null) 
        $MemberDomain = $null 
        if($MemberPath -match "^Winnt\:\/\/(?<domainName>\S+)\/(?<CompName>\S+)\/") { 
         if($MemberType -eq "User") { 
          $MemberType = "LocalUser" 
         } elseif($MemberType -eq "Group"){ 
          $MemberType = "LocalGroup" 
         } 
         $MemberDomain = $matches["CompName"] 

        } elseif($MemberPath -match "^WinNT\:\/\/(?<domainname>\S+)/") { 
         if($MemberType -eq "User") { 
          $MemberType = "DomainUser" 
         } elseif($MemberType -eq "Group"){ 
          $MemberType = "DomainGroup" 
         } 
         $MemberDomain = $matches["domainname"] 

        } else { 
         $MemberType = "Unknown"  
         $MemberDomain = "Unknown" 
        } 
       if ($MemberType -ne "Unknown") ##Exclude unresolved users 
       { 
        if ($LocalGroupName -eq "Administrators") 
        {Add-Content -Path $OutPutFile -Value "$Computer, $MemberName, X, ,"} 
        if ($LocalGroupName -eq "Remote Desktop Users") 
        {Add-Content -Path $OutPutFile -Value "$Computer, $MemberName, , X,"} 
       } 
       } catch 
       { 
        Add-Content -Path $OutputFile -Value "$Computer, ,FailedQueryMember" 
       } 
       } 

      } 
     } 

    } 
} 
End {} 
+0

你试过问别人做你的工作,你做之前什么呢? – TheIncorrigible1

+0

我已经做了相当多的搜索模块或功能,这将允许我这样做。我认为使用“-unique”可以工作,但我需要能够将“X”添加到用户/组,其中独特似乎只是删除重复的用户/组。 – Pat

+0

我只是在寻找一个建议,让我指出正确的方向。我可以做我自己的工作。 :) – Pat

回答

0

你可能想在这里做的是让管理员和远程桌面用户两者的成员,然后用foreach语句,检查每个用户在两个组中的存在与否的结果。

比较对象也可能是你的朋友,因为你可以决定如何处理你写给你的文件。如果使用-IncludeEqual参数,那么该命令将输出“< =”,“=>”或“==”。

例:

Powershell - find items which are in array1 but NOT in array2

+0

补充,谢谢。 – Pat

+0

这不提供问题的答案。一旦你有足够的[声誉](https://stackoverflow.com/help/whats-reputation),你将可以[对任何帖子发表评论](https://stackoverflow.com/help/privileges/comment);相反,[提供不需要提问者澄清的答案](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an- I-DO-代替)。 - [来自评论](/ review/low-quality-posts/17169404) – worpet

相关问题