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