ZnilTools:ifmemberexecute.exe
Aus znilwiki
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.
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
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.
Sonstige Aufrufparameter
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.
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)
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)