
Ich habe ein Skript erstellt, um eine Liste von Benutzern aus einer MSSQL-Datenbank mit einer Liste deaktivierter AD-Benutzer zu vergleichen. Das Tool, das wir für die AD-Authentifizierung verwenden, gibt Daten im folgenden Format zurück (mit viel mehr Leerzeichen zwischen den Spalten). Um den Vergleich (in Python) zu ermöglichen, müssen die Daten analysiert werden:
User info (Level-2):
====================
Name: domain\username
UPN: [email protected]
Generated UPN: NO
DN: DN....
Uid: 123456
Gid: 123456
Gecos: User Name
Shell: /shell/path
Home dir: /homedir
Other attributes: ....
Other attributes: ....
Account disabled (or locked): TRUE
Other attributes: ....
Other attributes: ....
Other attributes: ....
etc
Von der Befehlszeile aus funktioniert Folgendes, allerdings ist es sehr chaotisch und ich hoffe, dass jemand eine sauberere Methode vorschlagen kann. Ich habe mit awk experimentiert, aber es hat mir nicht viel Erfolg gebracht, die Größe des Befehls zu reduzieren:
/opt/util/enum-users --level 2 |
grep "Name:\|Account disabled (or locked): TRUE" |
grep -x "Account disabled (or locked): TRUE" -B 1 |
grep "Name:" |
sed -r 's/^.{35}//'
Dieser gibt die Daten wie gewünscht aus:
username
username
etc
Antwort1
Ich weiß nicht, ob es effizienter ist, aber Sie könnten dies vollständig in folgendem Format tun awk
:
awk -F': *' '$1 == "Name" {name = $2; next};
$0 == "Account disabled (or locked): TRUE" {
print gensub(/.*\\/, "", 1, name)
}'
Antwort2
Sie sollten dies einfach mit sed
completely tun, da Sie es sowieso verwenden:
/opt/util/enum-users --level 2 |
sed -n '/^Name:/h;//,/^Account/{
/^Account/!d;/TRUE[^:]*$/!d;g
s/^[^:]*:[[:blank:]]*//p
}'
Ich weiß eigentlich nicht, wie das [[:blank:]]
Geschäft gehandhabt werden soll, aber die oben getroffene Annahme ist, dass eine interessante Liniengruppe wahrscheinlich wie folgt beginnen wird:
^Name:[[:blank:]]*[INFORMATION YOU WANT]$
...und dass die nächste Zeile mit der Zeichenfolge beginntKontosollte mit der Zeichenfolge endenWAHRgefolgt von einer beliebigen Anzahl von Leerzeichen und dass eine uninteressante Gruppe wahrscheinlichFALSCHoder so.