GetUsersOfLocalAdmGroup.ps1
#GetUsersOfLocalAdmGroup.ps1 / richard / 2019 / ab Windows 7
# ermittle alle Benutzer der lokalen Gruppe Administrator(s)(en) und 
# schreibe sie in eine Datei in vorgegebenes Logverzeichnis und sende sie an einen rsyslogserver
# $Zertifikat = dir cert:\ -recurse –codesign
# Set-AuthenticodeSignature C:\sourcen\scripte\powershell\GetUsersOfLocalAdmGroup.ps1 $Zertifikat
###############################################################################
 
$ErrorActionPreference = "SilentlyContinue"
$dom = "$env:userdnsdomain"
$comp = "$env:computername"
$user = "$env:username"
$localadmgrp = ([System.Security.Principal.SecurityIdentifier] 'S-1-5-32-544').Translate([System.Security.Principal.NTAccount]).Value.Split("\")[1]
$localadmins = ([ADSI]"WinNT://localhost/$localadmgrp,group").Members() | % { ([ADSI]$_).Path.Substring(8) }
$logdir = "\\$dom\SYSVOL\$dom\logs\"
$rsyslogsrv = "myrsyslogsrv"
$rsyslogsrv =  [Net.DNS]::GetHostEntry("$rsyslogsrv").Addresslist[0].IPAddresstoString
 
if ((Test-Path -LiteralPath $logdir)) {
foreach ($line in $($localadmins -split "`r`n")) {
        if ( ($line -notlike "*Administrator*") `
        -and ($line -notlike "*-Admins") `
        -and ($line -notlike "*PC-Service-GRP")
         ) {
        $line2= $line.Split("/")[1]
        Write-Output "lokale Administratoren auf: $comp ### Besitzer: $user ### Datum: $(Get-Date)" > $logdir$line2.log
        Write-output "`r`n"$line >> $logdir$line2.log
        [string]$buf="<28>1 $(Get-Date -Format "yyyy-MM-ddTHH:mm:ssK") $comp windows - - -  localadmin: $line gefunden auf $comp.  Besitzer: $user."
        SendtoRsyslogsrv $rsyslogsrv $buf
        #$buf
        }
    }
}
else { Write-Error -Message "Path $logdir not exist!" }
 
###############################################
Function SendtoRsyslogsrv($remotesrv,$buffer)
{
   [int]$remoteudpport=514              
   [int]$sourceudpport = 0
 
   #$buffer
   Try{
        $udpClient = new-Object system.Net.Sockets.Udpclient($sourceudpport)
        $udpClient.Client.Blocking = $False
        #$udpClient.Client.Connect($remotesrv,$remoteudpport)
        #$udpClient.Client.ReceiveTimeout = 10 
        $byteBuffer  = [System.Text.Encoding]::ASCII.GetBytes($Buffer)
        $sendbytes = $udpClient.Send($byteBuffer, $byteBuffer.length,$remotesrv, $remoteudpport)
        if ($sendbytes -ne $byteBuffer.length) {
        write-host "Mismatch bytes"
        }
    }
    Catch { write-host "send-udp:Error found "$error}
    Finally { $udpClient.close() }
}
##############################################