crowdy
Goto Top

Psexec variable mitgeben

Hallo Script und Programmierprofis!

Ich möchte psexec eine variable mit auf den weg geben. Leider konnte google mir nicht helfen.

Ich starte über eine "lokale" auf meiner Workstation eine Batch die wie folgt aussieht (AUSSCHNITT):

 psexec \\server C:\Ordner\Ordner1\checkin.cmd 

So sieht die Batch auf dem Server aus:

@echo off
rem :START
rem settings

echo.

set ADDOM=domain
rem echo Bitte Benutzernamen eingeben:
set /p n=
set USERHOMEDIR=D:\Profile\%n%

cd D:\Profile\standartprofil\
d:
cmd /c xcopy /s "D:\Profile\standartprofil\\*.*" "D:\Profile\%n%"  

takeown /F %userhomedir% /R /D Y /A


cd C:\AppleScripts\Apple

c:

cmd /c SetACL.exe -on "%USERHOMEDIR%" -ot file -actn setprot -op "dacl:np;sacl:nc" -rec cont_obj  


cmd /c SetACL.exe -on "%USERHOMEDIR%" -ot file -actn setowner -ownr "n:%ADDOM%\%n%" -rec cont_obj  


cmd /c SetACL.exe -on "%USERHOMEDIR%" -ot file -actn ace -ace "n:%ADDOM%\%n%;p:full" -rec cont_obj  

Wenn ich das Script via psexec (sysinternals) ausführe und die variablen durch einen "richtigen" Ordnernamen in der Batch auf dem Server starte funktioniert das wunderbar. Gibt es eine Möglichkeit eine Variable zu übergeben?

Mit:

psexec \\server C:\Ordner\Ordner1\checkin.cmd 
%1

funktioniert das leider nicht face-confused

Vielen Dank für eure Hilfe und Anregungen im Voraus!

//Crowdy

Content-Key: 155180

Url: https://administrator.de/contentid/155180

Printed on: April 24, 2024 at 22:04 o'clock

Member: bastla
bastla Nov 16, 2010 at 14:15:43 (UTC)
Goto Top
Hallo Crowdy und willkommen im Forum!

Wenn ich das einigermaßen richtig verstanden habe, willst Du die Eingabe des Benutzernamens "mitliefern" - das könnte (beides ungetestet) über
echo %1|psexec \\server C:\Ordner\Ordner1\checkin.cmd
gehen oder Du änderst im Batch am Server auf
set USERHOMEDIR=D:\Profile\%1
oder besser (wenn der Batch auch "interaktiv" verwendet werden soll)
set "n=%~1"  
if not defined n set /p n=Bitte Benutzernamen eingeben: 
set USERHOMEDIR=D:\Profile\%n%
und startest mit
psexec \\server C:\Ordner\Ordner1\checkin.cmd %1
BTW: Direkt zum Standarten-Profil-Ordner kommst Du mit
cd /d D:\Profile\standartprofil
Grüße
bastla
Mitglied: 60730
60730 Nov 16, 2010 at 21:47:35 (UTC)
Goto Top
Servus und auch von mir ein willkommen,

sag mal bitte, was macht denn (oder soll) dieses Script?

deine Zeile 14 sieht aber auch sehr merkwürdig aus?
xcopy /s "D:\Profile\standartprofil\\*.*" "D:\Profile\%n%"
ich meine jetzt nicht den Theo ohne Deo... sind dir da die Backslashes verrutscht?


Ergänzend zu Bastlas Vorschlag würde ich eine "echte" Überprüfung bauen...

:username
set "n=%~1"  
if not defined n set /p n=Bitte Benutzernamen eingeben: 
net user %n% /domain|findstr /i "%n%" || goto username  
set USERHOMEDIR=D:\Profile\%n%

[OT]
Du hast sowohl mich, als auch Bastla ins grübeln gebracht, der kennt jetzt sogar den Standarten Profil Ordner
[/OT]
Gruß
Member: Crowdy
Crowdy Nov 17, 2010 at 14:24:54 (UTC)
Goto Top
Hallo zusammen,

danke für die freundliche Begrüßung und schnelle Hilfe!

Kurz und Knapp, da es sonst zu Umfangreich werden würde:

Im Unternehmen nutzen wir aus "kosten- und effizienz-" Gründen AD für unsere Apple Clients. Da die Mitarbeiter ein vordefiniertes Profil mit verschiedenen Einstellungen bekommen sollen, legt das Script neue Benutzer in der AD an, setzt User-GPOs etc., kopiert ein "Default-Roamingprofile" ("Standartprofil mit Settings und Beispielfiles") und setzt Rechte. Da das alles öfters für 20 und mehr Personen gemacht werden muss will ich das ganze per Script automatisieren um die Stundenlangen "Klickorgien" zu vermeiden.

Diese Woche befinde ich mich im Urlaub, deshalb werde ich erst nächste Woche Montag eure Tips ausprobieren und testen. Wenn ich sämtliche Scripts fertig habe werde ich den ganzen "Kladderadatsch" hier für die Nachwelt posten.

Schöne Woche noch und nochmal Danke für die Hilfe (bin ein echter Script-Newbe)!

// Crowdy
Member: Crowdy
Crowdy Nov 17, 2010 at 14:27:56 (UTC)
Goto Top
deine Zeile 14 sieht aber auch sehr merkwürdig aus?
> xcopy /s "D:\Profile\standartprofil\\*.*" "D:\Profile\%n%"
ich meine jetzt nicht den Theo ohne Deo... sind dir da die Backslashes verrutscht?

Äh ja, hab nur den für mich bisher nicht Lösbaren teil gepostet, das ist nur nenn Typo gewesen. Hab es gekürzt für die Übersicht.

//Crowdy
Member: Crowdy
Crowdy Nov 22, 2010 at 08:53:10 (UTC)
Goto Top
Hallo zusammen,

hab es jetzt in den verschiedenen Varianten getestet und die "Übergabe der Variable" für psexec

will leider immer noch nicht so recht für mich funktionieren.

Deshalb poste ich nochmal alle Scripts ausführlich, vlt. findet ja jemand den Fehler im Detail.

1. Ich starte die "start.bat" zum Ausführen der "ad_check_in.vbs".

start.bat:
call ad_check_in.vbs

ad_check_in.vbs:
Dim fso, f, Zeile, Feld
Set fso = CreateObject("Scripting.FileSystemObject")  
Set f = fso.OpenTextFile ("user.txt",1,0)  

Do while not f.AtEndOfLine
Zeile = f.readLine
Feld = split(Zeile,",")  
Benutzer = Feld(0)
Vorname = Feld(1)
Nachname = Feld(2)
Passwort = Feld(3)
Call BenuntzerAnlegen(Benutzer,Vorname,Nachname,Passwort)
Loop
f.Close
Wscript.Quit(0)

Sub BenuntzerAnlegen(Benutzer,Vorname,Nachname,Passwort)
Dim ouo, b
Set ouo = GetObject("LDAP://OU=test,DC=corp,DC=test,DC=de")  
Set b = ouo.Create("user", "CN=" & Vorname & " " & Nachname)  
Dim WshShell, ret
Set WshShell = WScript.CreateObject("WScript.Shell")  
b.Put "sAMAccountName", Benutzer  
b.Put "displayName", Vorname & " " & Nachname  
b.Put "givenName", Vorname  
b.Put "sn", Nachname  
b.Put "userPrincipalName", Benutzer & "@corp.test.de"  
b.Put "profilePath", "corp.test.deProfiles" & Benutzer  
b.Put "homeDirectory", "Server01Home" & Benutzer  
b.Put "homeDrive", "P:"  
b.Put "scriptPath", "runLoginGOE.cmd"  
b.Put "c", "DE"  
b.Put "co", "DEUTSCHLAND"  
b.Put "l", "Musterstadt"  
b.Put "postalCode", "0815"  
b.Put "streetAddress", "Adresse 1" & vbCrlf & "Adresse 2" & vbCrlf & "Adresse 3" & vbCrlf  
b.SetInfo
b.SetPassword Passwort
b.AccountDisabled = False

user.txt:
vnachnam,Vorname,Nachname,password

2. Im AD-Script wird die "verz.cmd" aufgerufen.

verz.cmd:
md Server01ProfilesApple\%1

echo J | cacls Server01Home\%1 /C /E /G Administratoren:F
echo J | cacls Server01Home\%1 /C /E /G corp.test.com\%1:F
echo J | cacls Server01Home\%1 /C /E /R Jeder


md corp.test.deProfiles\%1

echo J | cacls corp.test.deProfiles\%1 /C /E /G Administratoren:F
echo J | cacls corp.test.deProfiles\%1 /C /E /G corp.test.de\%1:F
echo J | cacls corp.test.deProfiles\%1 /C /E /R Jeder

psexec Server01 C:Applecheckin.cmd

3. Über psexec von Sysinternals soll die Variable für den Benutzernamen in die "checkin.cmd"-

Batch übergeben werden:

checkin.cmd:
@echo off
:START
rem settings

echo.

set ADDOM=t4h
rem echo Bitte Benutzernamen eingeben:
set /p n=
set USERHOMEDIR=D:Home\%1

cd D:Homestandard_profil
d:
cmd /c xcopy /s "D:Homestandard_profil*.*" "D:Home\%1"  

rem take ownership for administrators group

takeown /F %userhomedir% /R /D Y /A


rem set inheritation flag

cd C:Scripts
c:

cmd /c SetACL.exe -on "%USERHOMEDIR%" -ot file -actn setprot -op "dacl:np;sacl:nc" -rec cont_obj  


rem put back ownership for user

cmd /c SetACL.exe -on "%USERHOMEDIR%" -ot file -actn setowner -ownr "n:%ADDOM%\%1" -rec cont_obj  


rem put back ACL for user

cmd /c SetACL.exe -on "%USERHOMEDIR%" -ot file -actn ace -ace "n:%ADDOM%\%1;p:full" -rec cont_obj  



rem goto START

pause

So wie ich mir das vorgestellt hab funktioniert es soweit auch ganz gut. Wenn ich in der "checkin.cmd" die Variable (%1) durch den Benutzernamen (vnachnam) ersetze läuft alles wie gewünscht durch. Noch jemand eine Idee wo bei mir der "Hase im Pfeffer" sitzt?

Vielen Dank im Voraus!!!

//Crowdy
Member: Crowdy
Crowdy Nov 23, 2010 at 10:34:28 (UTC)
Goto Top
Keiner mehr eine zündende Idee? face-confused
Member: bastla
bastla Nov 23, 2010 at 10:55:58 (UTC)
Goto Top
Hallo Crowdy!

Abgesehen davon, dass ich die "checkin.cmd" etwas straffen würde:
@echo off & setlocal

rem settings
set ADDOM=t4h

::set /p n=Bitte Benutzernamen eingeben: 
set USERHOMEDIR=D:\Home\%1

cmd /c xcopy /e "D:\Homestandard_profil\*.*" "%USERHOMEDIR%\"  

rem take ownership for administrators group
takeown /F "%USERHOMEDIR%" /R /D Y /A  


cd /d C:\Scripts
rem set inheritation flag
cmd /c SetACL.exe -on "%USERHOMEDIR%" -ot file -actn setprot -op "dacl:np;sacl:nc" -rec cont_obj  

rem put back ownership for user
cmd /c SetACL.exe -on "%USERHOMEDIR%" -ot file -actn setowner -ownr "n:%ADDOM%\%1" -rec cont_obj  

rem put back ACL for user
cmd /c SetACL.exe -on "%USERHOMEDIR%" -ot file -actn ace -ace "n:%ADDOM%\%1;p:full" -rec cont_obj  

pause
müsste der Aufruf von "psexec" etwa so aussehen:
psexec \\server C:\Ordner\Ordner1\checkin.cmd Benutzername
damit in "checkin.cmd" auch etwas als %1 ankommt ...

Grüße
bastla
Member: Crowdy
Crowdy Nov 24, 2010 at 10:11:54 (UTC)
Goto Top
bastla,

du bist Großartig!!! Vielen vielen Dank! Ohne deine Hilfe hätte ich das wahrscheinlich nächstes Jahr noch nicht gelöst!

//Crowdy