wassermann
Goto Top

Username / Profilname

Hallo,
ich will in einer Profil gespeicherten Datei einen bestimmten Pfad bestimmen:
"C:\Dokumente und Einstellungen\.....\Anwendungsdaten\Microsoft\Vorlagen"

Die Pünktchen sollen durch den Profilnamen ersetzt werden. Wie wird das geschrieben?
Ich habe Username, Profilname, Environ bereits ausprobiert.

Nur wenn ich den tatsächlichen Namen eintrage, z.B. MuellerManfr wird der Pfad gefunden.

Kann einer helfen?
Danke im voraus

Content-ID: 14322

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

Ausgedruckt am: 22.11.2024 um 17:11 Uhr

Atti58
Atti58 11.08.2005 um 16:31:41 Uhr
Goto Top
... Du meinst den "%USERNAME%"?

Gruß

Atti
13830
13830 11.08.2005 um 16:34:50 Uhr
Goto Top
Wenn ich dich richtig verstehe, willst du eine Datei in die jeweiligen Heimatverzeichnisse von (fiktiven) 20 Usern kopieren - allerdings mit einem Befehl. Oder willst du eine Datei verschiedene Verzeichnisse durchforsten lassen (Log-Datei)? Im Endeffekt ist es die Selbe Lösung: dazu bräuchtest du eine Schleife, die eine Variable (deine Pünktchen) durch einen Usernamen ersetzt, die Datei kopiert / das Verzeichnis durchforstet und anschließend die Variable auf einen neuen Usernamen setzt. Dieses ist meines Wissens jedoch nicht im Dos-Prompt möglich und die User-Namen die eingesetzt werden sollen, müssen auch entweder manuell einmal angegeben, oder aus einer Datenbank ausgelesen werden. Nun kommt es darauf an, wieviele User betroffen sind - ich denke, dass sich der Aufwand für 10-15 User nicht lohnt und du schneller bist, wenn du alles manuell eingibst.

O.K., da war Atti58 schneller - aber sowas meinte ich (btw. geht das nun im Dos-Prompt, oder nicht?)
11078
11078 11.08.2005 um 16:40:04 Uhr
Goto Top
Hallo,

versuch mal folgendes:

UserName = Environ("UserName")  

' Dann die Strings und die Variable mit & zusammenführen  
' Die Variable "Pfad" ist dann der komplette Pfad mit dem Usernamen  

Pfad = "C:\Dokumente und Einstellungen\" & UserName & "\Anwendungsdaten\Microsoft\Vorlagen"  


Gruß,
Tim

[EDIT: Der Punkt ist, dass man bei Visual Basic die Variable nicht einfach mitten in die Anführungsstriche schreiben kann, da sie sonst als normaler String interpretiert wird. Du musst den Pfad also in zwei Strings zerlegen und die Variable durch "&" mit den String concatieren, also zusammensetzen.]
wassermann
wassermann 11.08.2005 um 17:04:41 Uhr
Goto Top
TJa, ich danke Euch zwar - aber es funktioniert nicht.
irgendwas mache ich falsch - ich finde aber nicht den fehler.
Noch eine Idee?
wassermann
wassermann 11.08.2005 um 17:04:47 Uhr
Goto Top
TJa, ich danke Euch zwar - aber es funktioniert nicht.
irgendwas mache ich falsch - ich finde aber nicht den fehler.
Noch eine Idee?
wassermann
wassermann 11.08.2005 um 17:04:47 Uhr
Goto Top
TJa, ich danke Euch zwar - aber es funktioniert nicht.
irgendwas mache ich falsch - ich finde aber nicht den fehler.
Noch eine Idee?
11078
11078 11.08.2005 um 17:09:29 Uhr
Goto Top
Hallo,

poste doch mal ein größeres Stück Code (den gesamten Abschnitt, wo Du den Pfad ermittelst, etc.). So kann man nicht direkt sagen, woran es liegen könnte...

Gruß,
Tim

P.S.: Du hast die Variablen schon mit DIM deklariert, oder? Also:

Dim UserName As String
Dim Pfad As String

Wenn nicht, dann ist das auf jeden Fall ein Fehler.
Samtpfote
Samtpfote 11.08.2005 um 20:15:42 Uhr
Goto Top
Versuchs mit %USERNAME%
Atti58
Atti58 12.08.2005 um 08:10:26 Uhr
Goto Top
... mir glaubt er ja nicht face-wink ...

Gruß

Atti
11078
11078 12.08.2005 um 09:13:41 Uhr
Goto Top
Hallo,

glaub nicht, dass das etwas mit "glauben" zu tun hat. Die Frage wurde doch in "VB und .NET" gepostet - und %USERNAME% könnte er doch nur nutzen, wenn diese Variable in einem Systemaufruf direkt verwendet wird.

Da er aber keinen Code gepostet hat, der darauf schließen lässt, gehe ich mal davon aus, dass er den Usernamen über die Möglichketen abfragen muss, die die Programmiersprache bietet (und das ist bei VB wohl bevorzugt die Abfrage über die "environ"-Funktion).

Oder begehe ich da einen massiven Denkfehler???


Gruß,
Tim
Atti58
Atti58 12.08.2005 um 09:31:33 Uhr
Goto Top
@tim

... nein, natürlich begingst Du keinen Denkfehler sondern Samti und ich - wir hatten wohl nur den Post gelesen ohne auf den Bereich zu achten face-wink ...

Gruß

Atti
Samtpfote
Samtpfote 12.08.2005 um 10:34:10 Uhr
Goto Top
@Atti
dummes katzi.... face-wink nicht mal lesen kanns....
weißt ja eh:, wie heißt's so schön in der geliebten Zauberflöte: ein Weib tut wenig, plaudert viel...
Biber
Biber 13.08.2005 um 10:22:24 Uhr
Goto Top
uuuups,
hier gibts Bereiche?? *Staunend die Augen reibt*
...wieder was gelernt face-wink
Biber
P.S. Aber warum TIMs Tipps nicht helfen, verstehe ich nicht... mehr Ideen hätte ich zu dem Thema auch nicht.
F.
gemini
gemini 13.08.2005 um 11:25:51 Uhr
Goto Top
<strike>Welch Wunder, diemal kein Einzeiler-Batch face-wink face-wink</strike>
Mit einem zeitlichen Abstand von 30 Min. und etwas abgekühltem Gemüt fällt mir auf: Ich hab mich wohl etwas im Ton vergriffen.
Wollte niemanden persönlich angreifen, der mir nichts getan hat, Sorry!!
~~~~~~~~~~~~~~~~~~~
Sind ein paar Zeilen mehr, aber wie heißt es so schön: "Wer schreibt, der bleibt!" face-wink

Das Script setzt voraus, das eine deutsche OS-Version installiert ist, also der Pfad zum Profilverzeichnis 31 Zeichen lang ist. Kann aber mit Instr auch dynamisch gemacht werden.
Außerdem ist der anzufügende Pfad auf "\Anwendungsdaten\Microsoft\Vorlagen" fixiert, wobei man das sicher aus der Registry auslesen könnte

' ### TemplatesPath.vbs ###
Const USER_PROFILE = &H28&

Set objShell = CreateObject("Shell.Application")
Set WshNetwork = Wscript.CreateObject("Wscript.Network")
Set objFolder = objShell.Namespace(USER_PROFILE)
Set objFolderItem = objFolder.Self

strTemplatePath = "\Anwendungsdaten\Microsoft\Vorlagen"
strProfilePath = Left(objFolderItem.Path, 31)
strUserName = WshNetwork.UserName
strDomain = WshNetwork.UserDomain
strPathNew = strProfilePath & strUserName & strTemplatePath
MsgBox strPathNew
' ###################
Samtpfote
Samtpfote 13.08.2005 um 14:04:19 Uhr
Goto Top
Falls es Wordbasic sein soll, hab ich den schwarzen Gürtel.... face-wink

In einem Wordmakro bekommst Du mit dem Befehl

x$ = Environ("USERNAME")

den Loginnamen des aktuellen Benutzer.
Den Benutzerdefinierten Vorlagenpfad kannst Du mit
zB mit

myPath$="C:\blablubb\"+x$+"\Vorlagen\"
Options.DefaultFilePath(Path:=wdUserTemplatesPath) = MyPath$

verändern.


face-smile hihi langsam kommt mir vor, wir drehen hier auf der Glatze Locken... was möchtest Du denn genau machen wassermann?

widderkatzi
Biber
Biber 13.08.2005 um 15:10:40 Uhr
Goto Top
Nööööö, <font=color=blue>gemini</font>, keine Sorge,
bei jedem Stück Sourcecode, das länger als eine Zeile wird, bekomme ich immer so einen komischen "Compile error in Line 2"... deshalb bleib ich freiwillig bei meinen kleinen Onelinern. face-big-smile

Aber trotzdem hab ich Dein Script nicht ganz verstanden, denn der
objFolderItem.Path entspricht doch IMMER exakt dem strProfilePath & strUserName in der vorletzten Zeile. Da es doch bei sowohl bei "objFolder" wie auch bei "strUserName = WshNetwork.UserName" um denselben User geht.
Dann kannst Du ohne Informationsverlust auch die vorletzte Zeile ändern auf: strPathNew = objFolderItem.Path & strTemplatePath ..?? Oder hab ich es jetzt mit den Augen? (Ernstgemeinte Verständnisfrage).

Wenn ich VBScript könnte, hätte ich wahrscheinlich zusammengetrümmert:
' ### TemplatesPath2.vbs ###

Set objWshShell = CreateObject("Wscript.Shell")
Set WshNetwork = Wscript.CreateObject("Wscript.Network")

strProfilePath = objWshShell.SpecialFolders("AllUsersDesktop")
strProfilePath = Left(strProfilePath, Len(strProfilePath)-Len("\AllUsers.WINNT\Desktop"))
strTemplatePath = "\Anwendungsdaten\Microsoft\Vorlagen"
strUserName = WshNetwork.UserName

strPathNew = strProfilePath & vbCrLf & strUserName & strTemplatePath
MsgBox strPathNew
' ###################

..aber für heute schließe ich mich <font color=blue>la gattina's</font> Einwurf an - wir sollten nochmal <font color=blue>wassermann</font> in Ruhe fragen, was er genau vorhat....
ich hätte zwar auch noch ein GetObject("LDAP://cn=Biber,ou=xx,dc=firma,dc=com") mit einem ProfilePath irgendwo rumliegen, aber ich glaub irgendwie gar nicht mehr, dass es nötig ist.

Liebe Wochenend-Grüße an alle Zwillinge, Wasser- und Frodermänner, Widderinnen , cystras und Attis
vom Widderbiber aus Bremen face-wink
P.S @13830 Selbstverständlich geht alles vom DOS-Prompt. *ggg
gemini
gemini 13.08.2005 um 16:12:51 Uhr
Goto Top
Aber trotzdem hab ich Dein Script nicht ganz verstanden, denn der
objFolderItem.Path entspricht doch IMMER exakt dem
strProfilePath & strUserName in der vorletzten Zeile. Da es
doch bei sowohl bei "objFolder" wie auch bei "strUserName =
WshNetwork.UserName" um denselben User geht.
Dann kannst Du ohne Informationsverlust auch die vorletzte Zeile ändern auf:
strPathNew = objFolderItem.Path & strTemplatePath ..?? Oder

Das ist schon richtig Frank, objFolderItemPath gibt C:\Dokum...\<<a>username<a>> zurück.
Wenn ich wassermann richtig verstanden habe, will er <<a>username<a>> durch etwas anderes eretzten.
Ich nehme also den ersten Teil bis zum 31. Zeichen, den braucht man in jedem Fall, und setze dann halt den Usernamen wieder ein, es muss ja was drinstehen.
strUserName kann man aber belegen wie man will, strUserName = "Sepp" oder auch GetOject("LDAP://...").
Primär ging es ja um Stringverarbeitung, wie ersetze ich einen Teil durch einen anderen.
Die Pünktchen sollen durch den Profilnamen ersetzt werden.
Wie wird das geschrieben?
Ob die Rechte das dann auch zulassen steht natürlich auf einem anderen Blatt.
Außerdem hat sich wassermann nicht sehr über den Zweck des Scripts ausgelassen.
~~~~~~~~~
Bei den Onelinern heißt es dann Compile error at char 437 *gg*
Biber
Biber 13.08.2005 um 17:31:59 Uhr
Goto Top
Ach sooooooo, @gemini,
Die Pünktchen sollen durch den Profilnamen ersetzt werden.
Wie wird das geschrieben?
hab wieder zu flüchtig gelesen... Das geht echt nicht als CMD-Oneliner face-sad ...da brauch ich drei Zeilen, wenn alles dokumentiert sein soll... face-wink
wassermann
wassermann 15.08.2005 um 07:57:05 Uhr
Goto Top
Hallo,
Zweck des ganzen ist folgender:
In dem Verzeichnis C:\........\Vorlagen sind Dokumentenvorlagen gespeichert. Egal, an welchem PC ich mich in der Firma anmelde, wird immer mein Profil geladen (da es nachts gesichert wird). Ich erhalte also immer mein Profil und kann somit auf meine eigenen Dots zugreifen.
Ich könnte natürlich als Admin an jeden PC gehen und anstatt der Pünktchen den Username eingeben, unter dem der jeweilige Anwender angemeldet ist. Da wir aber über 1.500 Anwender haben, ist mir das etwas zu viel Arbeit, jeden Morgen zu jedem Arbeitsplatz zu gehen. Deswegen gibt es eine Dot im Startup-Verzeichnis, in der stehen soll:
Public Const BasisPfad = "C:\Dokumente und Einstellungen\MaierSepp\AnwendungsdatenMicrosoft\Vorlagen". Da nicht alle MeierSepp heißen, muß hierfür m.E. ein Platzhalter gesetzt werden.
Ich muß gestehen, daß ich überhaupt keine Ahnung von VBA habe und die Makros alle schon von jemand anderem erstellt wurden, ich jetzt aber anpassen muß. Der "Jemand" ist nicht mehr in unserer Firma.
Danke für Eure Mühe - Wassermann
Biber
Biber 15.08.2005 um 09:22:54 Uhr
Goto Top
Moin, Wassermann,
sorry, nicht verstanden.. bin jetzt eher verwirrt durch Deine Erklärungen...

In dem Verzeichnis C:\........\Vorlagen sind Dokumentenvorlagen gespeichert.
In C:\Dokumente und Einstellungen\MaierSepp\AnwendungsdatenMicrosoft\Vorlagen?
Oder in C:\Dokumente und Einstellungen\Admistrator\AnwendungsdatenMicrosoft\Vorlagen?
Ich erhalte also immer mein Profil und kann somit auf meine eigenen Dots zugreifen.
?? Deine Dots sind auf jedem der 1500 PCs auf Laufwerk C:\ gespeichert?? Erstaunlich... Macht das Sinn?

Deswegen gibt es eine Dot im Startup-Verzeichnis, in der stehen soll:
ähmm.. dieser Zeitenwechsel .... es gibt eine (baugleiche) *.Dot in jedem StartUp-Verzeichnis, in der heute steht ....ist das der heutige Zustand? Auf 1500 PCs?
und in dieser *dot steht also..
Public Const BasisPfad = "C:\Dokumente und Einstellungen\MaierSepp\AnwendungsdatenMicrosoft\Vorlagen".
... na gut, auch ohne VBA-Kenntnisse... da steht halt "Const BasisPfad"... was passiert den mit dieser Konstanten?
Folgt da 2 Zeilen später eine Zeile a la Samtpfötchen <font color=blue>Options.DefaultFilePath(Path:=wdUserTemplatesPath) = BasisPfad$ </font>?
Das kann m.E. weder jemand so programmiert geschweige denn an 1500 PCs verteilt haben. Ausgeschlossen. Weder Admin noch Praktikant.

Und verstanden hab ich auch einen weiteren Punkt immer noch nicht: hat (im Sollzustand) jede/r Anwender/in seine/ihre eigenen Vorlagen? Oder ist die Vorgabe, dass alle die identischen (Firmen-) Vorlagen und Standard-Dots verwenden müssen und diese auf die lokalen Rechner unter C:\...Vorlagen kopiert werden?

Sonst poste doch bitte mal dat Scriptchen, oder hat das mehr als 20 Zeilen?
Immer noch staunend
Biber
gemini
gemini 15.08.2005 um 18:12:28 Uhr
Goto Top
Mir gehts wie Biber face-wink

Wenn jeder der 1500 seine eigenen Vorlagen hat ist das ja in Ordnung. Zwar ziemlich ungewöhlich für so große Organisationen, aber jeder User hat seine Vorlagen bei der Anmeldung zur Verfügung.

Wenn du den Vorlagenpfad auf eine anderes Profil verbiegen willst wird das problematisch, weil Nicht-Administratoren keine Rechte auf die Profile anderer haben.
In diesem Fall müsstest du alle 1500 User zu Admins machen, was nicht empfehlenswert ist. Allerdings brauchst du dich dann über Arbeitmangel nicht mehr zu beklagen face-wink

Wenn es dir allerdings um ein Standard-Vorlagenverzeichnis für alle User geht, kannst du das über Gruppenrichtlinien festlegen. Ganz ohne Scripting.
Dazu musst du die ADMs für die jeweilige Office-Version auf dem DC importieren.
Ich hab jetzt grad die für Office XP da; hier sind die entspr. Richtlinien in:
Benutzerkonfig. > Administr. Vorlagen > Microsoft Office XP > Shared paths > User templates path | Workgroup templates path
Ein Verzeichnis auf einem Server freigeben, die Vorlagen reinkopieren und den UNC-Pfad in die Richtlinie eintragen
Samtpfote
Samtpfote 16.08.2005 um 00:21:02 Uhr
Goto Top
*grins*
du sprichst mir aus der seele gemini.... ich weiß auch nicht so ganz was er möchte...