#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() } } ##############################################