1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Benutzernamen und Kurznamen auslesen?

Dieses Thema im Forum "macOS & OS X Server" wurde erstellt von peha24, 04.09.09.

  1. peha24

    peha24 Tokyo Rose

    Dabei seit:
    01.07.09
    Beiträge:
    70
    Hallo

    In unserem Netzwerk haben wir etwa 1000 Benutzer. Wie kann ich einfach die Namen und Kurznamen der Benutzer auslesen? Habe es probiert mit Export aus dem Arbeitsgruppenmanager -> Import in Excel -> "Fortwerfen" der (vielen) überflüssigen Informationen. Es muss doch irgendwo eine einfachere Möglichkeit geben, die beiden Infos auszulesen! Wo kriege ich die her?
    Danke vielmals für alle Hinweise!

    Gruss aus der Schweiz
    p.
     
  2. Rastafari

    Rastafari Golden Noble

    Dabei seit:
    10.03.05
    Beiträge:
    17.898
    Liste aller "natürlichen" Benutzer (die einen Langnamen besitzen)
    Als Tab-separierte Liste mit numerischer UID ausgeben:
    Code:
    [SIZE="-1"]list="$(
    for u in $(dscl . -list /users|grep -v "^_");
    do
      nr="$(id -u "$u")";
      if [ "$u" != "nobody" ] &&
         [ $nr -ge 100 ];
      then
         fn="$(dscl . -read /users/$u RealName)";
         fn="${fn//:$'\n' /: }";
         rn="$(dscl . -read /users/$u RecordName)";
         rn="${rn//:$'\n' /: }";
         [[ "$fn" != "RealName:" ]] &&
         [[ "$rn" != "RecordName:" ]] &&
         echo -e "${rn#* }\t($nr)\t${fn#* }" | sort;
      fi;
    done; )" && echo -e "\n\n${list}\n";
    [/SIZE]
     
  3. peha24

    peha24 Tokyo Rose

    Dabei seit:
    01.07.09
    Beiträge:
    70
    Danke für das Script!
    Es funktioniert - leider jedoch nur für die lokalen User. Jene, welche sich über das Netzwerk anmelden können, bringe ich nicht raus, nur jene, welche als Benutzer in den Systemeinstellungen erscheinen. Hast du da evtl. eine Ergänzung?
    Danke!
     
  4. Rastafari

    Rastafari Golden Noble

    Dabei seit:
    10.03.05
    Beiträge:
    17.898
    dscl operates on a datasource specified on the command line.
    This may be a node name or a Mac OS X Server (10.2 or later) host
    specified by DNS hostname or IP address. Node names may be
    absolute paths beginning with a slash ("/"), or relative domain paths
    beginning with a dot (".") character, which specifies the local domain,
    or "..", specifying the local domain's parent.
    If the hostname or IP address form is used then the user must specify
    the -u option and either the -P of -p options to specify an
    administrative user and password on the remote host to authenticate
    with to the remote host. ...

    Code:
    [SIZE="-1"]ds_admin="[COLOR="Sienna"]foo[/COLOR]";
    ds_passwort="[COLOR="Sienna"]bar[/COLOR]";
    ds_server="[COLOR="Sienna"]my.server.host[/COLOR]";
    
    list="$(
    for u in $(dscl -u "$ds_admin" -P "$ds_passwort" "$ds_server" -list /users|grep -v "^_");
    do
      nr="$(id -u "$u")";
      if [ "$u" != "nobody" ] &&
         [ $nr -ge 100 ];
      then
         fn="$(dscl -u "$ds_admin" -P "$ds_passwort" "$ds_server" -read /users/$u RealName)";
         fn="${fn//:$'\n' /: }";
         rn="$(dscl -u "$ds_admin" -P "$ds_passwort" "$ds_server" -read /users/$u RecordName)";
         rn="${rn//:$'\n' /: }";
         [[ "$fn" != "RealName:" ]] &&
         [[ "$rn" != "RecordName:" ]] &&
         echo -e "${rn#* }\t($nr)\t${fn#* }" | sort;
      fi;
    done; )" && echo -e "\n\n${list}\n";
    [/SIZE]
    Sollte eigentlich in jeder gängigen Umgebung arbeiten.
     
  5. peha24

    peha24 Tokyo Rose

    Dabei seit:
    01.07.09
    Beiträge:
    70
    Habe grad gemerkt, dass ich glaub noch viel lernen muss: Wo liegt hier das Problem? Terminal spuckt folgende Fehlermeldungen aus (unter AppleScriptEditor lief der Code nicht, aber das ist glaub so, oder?): Kannst du mir bitte nochmals ein bisschen Nachhilfe-Unterricht erteilen? Danke!

    Code:
     Last login: Wed Sep  2 07:55:02 on console
    fileserver:~ admin$ ds_admin="diradmin";
    fileserver:~ admin$ ds_passwort="xxxxxxx";
    fileserver:~ admin$ ds_server="server.intranet.mac";
    fileserver:~ admin$ 
    fileserver:~ admin$ list="$(
    > for u in $(dscl -u "$ds_admin" -P "$ds_passwort" "$ds_server" -list /users|grep -v "^_");
    > do
    >  nr="$(id -u "$u")";
    >  if [ "$u" != "nobody" ] &&
    >     [ $nr -ge 100 ];
    >  then
    >     fn="$(dscl -u "$ds_admin" -P "$ds_passwort" "$ds_server" -read /users/$u RealName)";
    >     fn="${fn//:$'\n' /: }";
    >     rn="$(dscl -u "$ds_admin" -P "$ds_passwort" "$ds_server" -read /users/$u RecordName)";
    >     rn="${rn//:$'\n' /: }";
    >     [[ "$fn" != "RealName:" ]] &&
    >     [[ "$rn" != "RecordName:" ]] &&
    >     echo -e "${rn#* }\t($nr)\t${fn#* }" | sort;
    >  fi;
    > done; )" && echo -e "\n\n${list}\n";
    [COLOR=DarkGreen][I]id: Cannot: no such user
    -bash:  nr=: command not found
    -bash:  if: command not found
    -bash:  then: command not found
    -bash:     fn=Cannot open remote host, error: DSOpenDirServiceErr: command not found
    -bash:     fn=: command not found
    -bash:     rn=Cannot open remote host, error: DSOpenDirServiceErr: command not found
    -bash:     rn=: command not found
    -bash:     [[: command not found
    -bash:  fi: command not found
    id: open: no such user
    -bash:  nr=: command not found
    -bash:  if: command not found
    -bash:  then: command not found
    -bash:     fn=Cannot open remote host, error: DSOpenDirServiceErr: command not found
    -bash:     fn=: command not found
    -bash:     rn=Cannot open remote host, error: DSOpenDirServiceErr: command not found
    -bash:     rn=: command not found
    -bash:     [[: command not found
    -bash:  fi: command not found
    id: remote: no such user
    -bash:  nr=: command not found
    -bash:  if: command not found
    -bash:  then: command not found
    -bash:     fn=Cannot open remote host, error: DSOpenDirServiceErr: command not found
    -bash:     fn=: command not found
    -bash:     rn=Cannot open remote host, error: DSOpenDirServiceErr: command not found
    -bash:     rn=: command not found
    -bash:     [[: command not found
    -bash:  fi: command not found
    id: host,: no such user
    -bash:  nr=: command not found
    -bash:  if: command not found
    -bash:  then: command not found
    -bash:     fn=Cannot open remote host, error: DSOpenDirServiceErr: command not found
    -bash:     fn=: command not found
    -bash:     rn=Cannot open remote host, error: DSOpenDirServiceErr: command not found
    -bash:     rn=: command not found
    -bash:     [[: command not found
    -bash:  fi: command not found
    id: error:: no such user
    -bash:  nr=: command not found
    -bash:  if: command not found
    -bash:  then: command not found
    -bash:     fn=Cannot open remote host, error: DSOpenDirServiceErr: command not found
    -bash:     fn=: command not found
    -bash:     rn=Cannot open remote host, error: DSOpenDirServiceErr: command not found
    -bash:     rn=: command not found
    -bash:     [[: command not found
    -bash:  fi: command not found
    id: DSOpenDirServiceErr: no such user
    -bash:  nr=: command not found
    -bash:  if: command not found
    -bash:  then: command not found
    -bash:     fn=Cannot open remote host, error: DSOpenDirServiceErr: command not found
    -bash:     fn=: command not found
    -bash:     rn=Cannot open remote host, error: DSOpenDirServiceErr: command not found
    -bash:     rn=: command not found
    -bash:     [[: command not found
    -bash:  fi: command not found[/I][/COLOR]
    [COLOR=DarkGreen][I]fileserver:~ admin$ [/I][/COLOR]
     
  6. Rastafari

    Rastafari Golden Noble

    Dabei seit:
    10.03.05
    Beiträge:
    17.898
    Shellskripte laufen im Terminal (präziser gesagt, in "bash").
    Der AppleScript Editor verlangt nach AppleScript-Code.
    Shellskripte kann man dort einbetten, dazu sind sie aber gemäss der Syntax von AppleScript zu "quoten" und zu "kapseln".

    D.h. dass Zeichen mit Sonderbedeutung maskiert werden müssen (durch vorangestellten Backslash) und dass das ganze an ein AS-Kommando namens "do shell script ..." zu übergeben ist.
    Das erstere ist bei komplexeren Befehlen eine sehr schnell ausufernde und extrem unleserliche Tortur.
    Am einfachsten tut man sich damit als Anfänger, wenn man statt dem AS Editor lieber den Automator und die Aktion "Shellskript ausführen" benutzt. Dort braucht man sein Shellskript nur unverändert einzufügen, um das nötige Quoting kümmert sich das Programm vollständig selbst; und die Automator-Aktion stellt hier die Kapsel dar, da braucht man sich also auch nicht mehr drum kümmern.

    Zunächst mal muss das hier ganz alleine laufen.
    (Der Benutzer "diradmin" sollte auf dem Server natürlich auch existieren.)
    Code:
    [SIZE="-1"]ds_admin="diradmin";
    ds_passwort="xxxxxxx";
    ds_server="[COLOR="DarkRed"]ldap://LDAPv3/[/COLOR]server.intranet.mac";
    dscl -u "$ds_admin" -P "$ds_passwort" "$ds_server" -list /Users[/SIZE]
    Und? Klappt damit die Verbindung zum Server?
     
  7. peha24

    peha24 Tokyo Rose

    Dabei seit:
    01.07.09
    Beiträge:
    70
    Tatsächlich, es hat geklappt! Nachdem ich verschiedentlich mit den Passwörtern und vor allem den richtigen Ordnern "rumgedoktert" (schönes Wort, oder? ;)) hatte, gelang mir gestern gegen Abend der Durchbruch.
    Du hast mir sehr geholfen, danke vielmals!

    p.
     

Diese Seite empfehlen