Aktionen

ZnilTools:ifmemberexecute.exe

Aus znilwiki

1 IfMemberExecute.exe

ist der kleine Bruder von ifmemberDELUXE.exe

Statt jedoch Drucker oder Netzlaufwerke zu Mappen führt dieses Programm beliebige Befehle aus.


Download: IfMemberExecute.zip



Beschreibung:
Führt einen Befehl oder ein anderes Programm aus wenn der Benutzer Mitglied einer ausgewählten Active Directory Gruppe ist.
Dabei kann in Abhängigkeit gesetzt werden,ob es sich um ein 32 oder 64Bit System handelt.



2 Programm starten

Aufruf für Programm starten

IfMemberExecute.exe [Gruppenname] [Programm] [Programmparameter ...]

Beispiele Programm starten:

IfMemberExecute.exe TestGruppe net use X: \\Test\Freigabe
IfMemberExecute.exe QMB_nur_Lesen notepad.exe X:\Bitte_Lesen.txt
IfMemberExecute.exe Verwaltung SET ISTMITGLIED=JA
IfMemberExecute.exe Einkauf START "Testtitel" /LOW calc.exe
IfMemberExecute.exe GruppeNAS net use Z: \\NAS\Freigabe test1234 /user:nas
IfMemberExecute.exe SAP delete %USERHOME%\SAP\temp.tmp




3 Programm für 32 oder 64 Bit starten

Aufruf für Programm starten Betriebssystemabhängig: (32/64Bit)

IfMemberExecute.exe [Gruppenname] x86:[Programm] [Programmparameter ...]
IfMemberExecute.exe [Gruppenname] x64:[Programm] [Programmparameter ...]

Parameter:

[Gruppenname]                 : Name der zu prüfenden Gruppe
[Programm]                    : Programm/Befehl der gestartet werden
                               soll
[Programmparameter ...]       : eventuelle Programmparameter
x86:                          : nur auf x86 (32Bit) Systemen starten
x64:                          : nur auf x64 (64Bit) Systemen starten

Beispiele Programm Systemabhängig starten

IfMemberExecute.exe TS-Benutzer x86:C:\Programme\Test\Programm32.exe
---> Startet Programm32.exe, aber nur wenn der Benutzer sich
     an einem x86 System (=32Bit) anmeldet, z.B. Windows XP / 2003.
IfMemberExecute.exe GruppeR304 x64:C:\Programme\Test\Programm64.exe
---> Startet Programm64.exe, aber nur wenn der Benutzer sich
     an einem x64 System (=64Bit) anmeldet, z.B. Windows 2008R2.




4 Sonstige Aufrufparamter


IfMemberExecute.exe /Liste
---> Listet alle(!) Gruppen auf in der aktuelle Benutzer Mitglied ist.
IfMemberExecute.exe /OS
---> Gibt aus ob das Programm gerade auf einem x86 oder x64 System
     aufgerufen wurde.



5 Hinweise


Bei Leerzeichen im Gruppennamen oder Pfaden diese bitte in Anführungszeichen setzen!
Verwenden von Umlauten auf eigene Gefahr! (funktioniert aber).


--Bernhard Linz 13:38, 7. Apr. 2013 (CEST)


6 Einsatz in Skripten mit GoTo oder SET

Die Verwendung von SET um Variablen zu setzen wird nicht funktionieren. Das liegt daran das IfMemberExecute die übergebenen Befehle in einer neuen CMD-Sitzungen starten und nicht innerhalb der aktuellen. Die Befehle werden also in einem "Tochter"-Prozess ausgeführt - und dieser kann nicht die Umgebung des Mutterprozessen beinflussen. Aber schaut in den nächsten Punkt, vielleicht löst das euer Problem:

Aus dem gleichen Gründen funktioniert GoTo auch nicht - aber Michael Rompa hat da eine Lösung gefunden und mir mitgeteilt:

An den Anfang eures Skriptes in dem Ihr IfMemberExecute einsetzt schreibt Ihr die folgenden Zeile:

if #%1# neq ## goto :%~1

Wird das Skript nun mit einem Parameter aufgerufen, springt es direkt zur Sprungmarke. Wenn es keinen Parameter gibt macht es einfach weiter.
Am Ende des Skriptes kommen nun die Sprungmarken wie z.B.

:Abteilung1
    Set bla=1
    echo Abteilung 1 wurde gestartet ...
    ...
    goto ENDE
:Abteilung2
    ...
    ...
    goto ENDE
:ENDE
    REM nichts

Wir euer Skript nun mit

namedesskriptes Abteilung1

gestartet, springt es gleich zu dem Abschnitt :Abteilung1 und fügt den Code dort aus. Am Ende des Abschnitts muss ein Goto ENDE oder ein exit stehen - sonst würde er die Befehle bei Abteilung2 usw. auch noch ausführen. Wenn Ihr die Goto ENDE Variante nhemt muss es diese Sprungmarke natürlich auch geben.

In der Mitte habt Ihr dann euren eigentichen Aufruf von IfMemberExecute

IfMemberExecute.exe Abteilung1 call meinskript.cmd Abteilung1
IfMemberExecute.exe Abteilung2 call meinskript.cmd Abteilung2
goto ENDE

Nun wird getestet ob man in Abteilung 1 oder 2 ist - und dann das Skript mit diesem Paramter noch einmal gestartet.
Am Ende ist der Befehl Goto ENDE oder ein exit wichtig damit er nicht einfach im Script weitermacht.

Ein vollständiges Skript sähe z.B. so aus:

REM * START *** Springe zur Abteilung wenn Parameter angegeben
if #%1# neq ## goto :%~1

REM * Gruppenprüfung *** Gruppenmitgliedschaft festellen und Skript nochmal neu starten mit Parameter
IfMemberExecute.exe Abteilung1 call meinskript.cmd Abteilung1
IfMemberExecute.exe Abteilung2 call meinskript.cmd Abteilung2
goto ENDE

REM * Abteilungen *** Sprungmarken für Abteilungen
:Abteilung1
   echo Abteilung 1 wurde gestartet ...
   REM * Befehle ***
   goto ENDE

:Abteilung2
   echo Abteilung 2 wurde gestartet ...
   REM * Befehle ***
   goto ENDE

REM * Sprungmarke ENDE ***
:ENDE
REM nichts

Ich bevorzuge die Variante mit dem Goto ENDE statt EXIT weil dadurch euch ein DOS-Fenster/E9ingabeaufforderung immer geschlossen wird.


--Bernhard Linz 19:51, 16. Nov. 2014 (CET)


7 Kommentare


Max

37 Monaten zuvor
Punktzahl 0++

Halo, vielen Dank für dieses Nützliche Tool! Leider funktioniert bei mir der aufruf von Set nicht. (IfMemberExecute.exe Verwaltung SET ISTMITGLIED=JA) Das Programm schreibt einfach nichts in die Variable.

Kann jmd. das Problem nachvollziehen?

BLinz

37 Monaten zuvor
Punktzahl 0++

Das liegt daran das die mit SET geänderte Variable nur während des Ablaufes von IfMemberExecute vorhanden ist.

Sobald das Programm beendet ist stirbt diese Variable wieder. Oder anders erklärt:

IfMemberExecute kann keine Umgebungsvariablen ändern.

In deinem Fall solltest du lieber diese beispiel nutzen:

http://znil.…r%2Bismember

Bernhard

BLinz

37 Monaten zuvor
Punktzahl 0++

Hab einen neuen Abschnitt hinzugefügt (den letzten) - vielleicht hilft dir das ja

Bernhard
Kommentar hinzufügen
znilwiki freut sich über alle Kommentare. Sofern du nicht anonym bleiben möchtest, trage deinen Namen oder deine Email-Adresse ein oder melde dich an. Du kannst das Feld auch einfach leer lassen.