Отчет локальных администраторов не показывает группы доменов - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь заставить следующий скрипт экспортировать в csv всех локальных администраторов и доменные группы на группе серверов. Он хорошо работает для экспорта локальных администраторов, но я заметил, что он не экспортирует группы домена (то есть: у меня есть группа администраторов домена, которая входит в группу локальных администраторов и не отображается в csv).

Это код, который я имею, любая помощь будет оценена:

param(
  [parameter(Position=0,ValueFromPipeline=$true)]
    $ComputerName=[Net.Dns]::GetHostName(),
    [System.Management.Automation.PSCredential] $Credential,
    [UInt32] $BlockSize=50
)

begin {
  $WMIEnumOpts = new-object System.Management.EnumerationOptions
  $WMIEnumOpts.BlockSize = $BlockSize

  function Get-LocalAdminGroupMember {
    param(
      [String] $computerName,
      [System.Management.Automation.PSCredential] $credential
    )
    $params = @{
      "Class" = "Win32_Group"
      "ComputerName" = $computerName
      "Filter" = "LocalAccount=TRUE and SID='S-1-5-32-544'"
    }
    if ( $credential ) {
      if ( $computerName -eq [Net.Dns]::GetHostName() ) {
        Write-Warning "The -Credential parameter is ignored for the current computer."
      }
      else {
        $params.Add("Credential", $credential)
      }
    }
    Get-WmiObject @params | ForEach-Object {
      $groupName = $_.Name
      $_.GetRelated("Win32_Account","Win32_GroupUser","","",
        "PartComponent","GroupComponent",$false,$WMIEnumOpts) | Select-Object `
          @{Name="ComputerName"; Expression={$_.__SERVER}},
          @{Name="Name"; Expression={$groupName}},
          @{Name="Member"; Expression={$_.Caption -replace "^$($_.__SERVER)\\", ""}},
          @{Name="Type"; Expression={$_.__CLASS}}
    }
  }
}
process {
$Filename = PATH HERE
$OutFileName = "C:\temp\admins.csv"

Get-Content $Filename | Foreach-Object {Get-LocalAdminGroupMember -computerName $_ | Select-Object * | Export-csv -NoType $OutFileName -Append}

1 Ответ

0 голосов
/ 17 января 2019

Ах, радости от попыток получить доступ к сетевым ресурсам с удаленного компьютера. Вы потеряете все, что связано с учетной записью домена, делая то, что вы делаете. Это просто, как это работает. Хорошей новостью является то, что есть еще способ получить нужную информацию, и вы даже можете использовать Get-WmiObject, если хотите. Если вы еще не переименовали группу «Администраторы» (потому что на самом деле, кто это делает?), Вы можете сделать это легко, но если вы это сделали и вам нужно искать группу по SID, как вы выше, вам придется запросить удаленный сервер, как вы, и внесите коррективы с помощью запроса ниже с измененным именем, которое вы получите. Вот что я бы порекомендовал сделать, используя вместо этого класс Win32_GroupUser:

Get-WmiObject -ComputerName $Server -Query "SELECT * FROM win32_GroupUser WHERE GroupComponent = ""Win32_Group.Domain='$computerName',Name='Administrators'"""

Чтобы поместить это вместо того, что у вас есть для вашей функции, это может выглядеть примерно так:

function Get-LocalAdminGroupMember {
    param(
        [String] $computerName,
        [System.Management.Automation.PSCredential] $credential
    )
    $params = @{
        "ComputerName" = $computerName
        "Query" = "SELECT * FROM win32_GroupUser WHERE GroupComponent = ""Win32_Group.Domain='$computerName',Name='Administrators'"""
    }
    if ( $credential ) {
        if ( $computerName -eq [Net.Dns]::GetHostName() ) {
        Write-Warning "The -Credential parameter is ignored for the current computer."
        }
        else {
        $params.Add("Credential", $credential)
        }
    }
    Get-WmiObject @params | 
        Where{$_.PartComponent -match ':(.+?)\.Domain="(.+?)",Name="(.+?)"'}|
        ForEach{
            [PSCustomObject]@{
                "ComputerName"=$computerName
                "Name"='Administrators'
                "Member"=$Matches[2..3] -join '\' -replace "^$computerName\\"
                "Type"=$Matches[1]
            }
        }
}
...