G-Files 10 Geschrieben 16. Oktober 2004 Melden Teilen Geschrieben 16. Oktober 2004 hallo, wir sind gerade dabei ca. 150 Clients in eine neue Domäne bzw. auf einen neuen Exchange 2003 umzustellen. Ich habe bisher eine Batch gebastelt, das die Benutzer-Profile von Outlook mit dem Exchange mittles einer prf-Datei verknüpft. Nun suche ich eine Möglichkeit das Script nur einmal auszuführen. Ansonsten würde das Profil bei jedem Anmelden des Benutzers wieder neu erstellt werden. Gibts es eine Möglichkeit, dass dieses Script nur einmal auf den Benutzer angewendet wird, evtl. per WSH-Script ? Wie könnte so ein Script aussehen ? Server: Windows 2003 Clients: Windows 2000 Zitieren Link zu diesem Kommentar
thorgood 10 Geschrieben 16. Oktober 2004 Melden Teilen Geschrieben 16. Oktober 2004 Hallo G-Files, da gibt es viele Möglichkeiten. Am Anfang des Scripts das Vorhandensein einer Datei oder eines Registry Eintrags abfragen. Wenn nicht vorhanden Script ausführen und Datei erzeugen oder Eintrag setzen. Wie rufst du dein Script auf ? (Loginscript, GPO, ...) Benutzt du Roaming Profiles ? thorgood Zitieren Link zu diesem Kommentar
Velius 10 Geschrieben 17. Oktober 2004 Melden Teilen Geschrieben 17. Oktober 2004 Hi Zusammen Ja, das mit dem PRF würde mich auch interessieren. Habe es auch schon auf verschiedene, von MS dokumentierte Arten versucht. Leider ist eine der Methoden wenig sinnvoll, da das Default Profile beim Ausführen eines Loginscripts durch ein Neues ersetzt wird, und das andere als Backup angelegt wird. Die andere Methode startet hingenen Outlook automatisch neu, ist somit also auch wenig brauchbar....... :( :( :( Allerdings habe ich den Ort in der Registy gefunden, wo das Outlook default Profile abgelegt ist. [b] Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles] "DefaultProfile"="[i]blabla, irgendwas Profil....[/i]" [/b] Wüsste nicht genau wie das aussehen müsste, aber man konnte doch ne Reg-Abfrage laufen lassen, die dann das Vorhandensein dieses Profil prüft, und allenfalls Outlook auffordert, das PRF (auf einem Netz-share) zu verarbeiten. Das wäre cool, wenn das ginge.... :shock: :cool: Was meinst du thorgood? Die anderen sind natürlich auch gefragt! :D Grüsse Velius P.S.: @G-Files Ich würde an deiner Stelle den Titel des Threads ändern, da sich sonst Leute mit Ahnung davon diesen nicht ansehen werden. Zitieren Link zu diesem Kommentar
G-Files 10 Geschrieben 17. Oktober 2004 Autor Melden Teilen Geschrieben 17. Oktober 2004 hallo, ja das mit erstellen einer Textdatei habe ich mir auch schon überlegt. Roaming Profiles werden auch genutzt, deshalb wäre es glaub ich am bestens so eine Textdatei im Profil abzulegen. Das Script soll per Benutzer-GPO beim Anmelden augerufen werden. Ich habe bisher folgendes Script getestet, das eine Textdatei erstellt: set fileso = CreateObject("Scripting.FileSystemObject") Set infile = fileso.CreateTextFile("C:\profilcheck.txt") Jedoch sollte es dies benutzerspezifisch im Profil des Benutzers ablegen und danach auf die Nicht-Existenz dieser Text-Datei überprüfen und falls nicht vorhanden ein Script mit der Office-Versions-Abfrage starten die wie folgt aussieht: sComputer = "." ' use "." for local computer iOfficeVer = GetOfficeVer(sComputer) If iOfficeVer = -1 Then WScript.Echo "Version of Office installed is unknown, " _ & "could not connect to the remote computer." Elseif iOfficeVer = 0 Then WScript.Echo "Office is not installed." Else WScript.Echo "Version of Office installed: " & iOfficeVer End If Function GetOfficeVer(sNode) On Error Resume Next Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" _ & sNode & "/root/default:StdRegProv") If Err.Number <> 0 Then GetOfficeVer = -1 Exit Function '-------> End If sValueName = "Path" sRegPre = "SOFTWARE\Microsoft\Office\" sRegPost = "\Common\InstallRoot" If oReg.GetStringValue( _ HKLM, sRegPre & "11.0" & sRegPost, sValueName, sValue) = 0 Then GetOfficeVer = 2003 Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.run ("cmd.exe /c \\server\verteilung\profil_2003.bat") Elseif oReg.GetStringValue( _ HKLM, sRegPre & "10.0" & sRegPost, sValueName, sValue) = 0 Then GetOfficeVer = 2002 Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.run ("cmd.exe /c \\server\verteilung\profil_2002.bat") Elseif oReg.GetStringValue( _ HKLM, sRegPre & "9.0" & sRegPost, sValueName, sValue) = 0 Then GetOfficeVer = 2000 Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.run ("cmd.exe /c \\server\verteilung\profil_2000.bat") Elseif oReg.GetStringValue( _ HKLM, sRegPre & "8.0" & sRegPost, sValueName, sValue) = 0 Then GetOfficeVer = 97 Else GetOfficeVer = 0 End If End Function in den profil_2000.bat liegt das prf-profil folgendermassen aufgerufen wird: \\server\verteilung\newprof.exe -p \\server\verteilung\Outlook_2000.prf in der profil_2002.bat steht folgendes: cd C:\Programme\Microsoft Office\Office10\ outlook.exe /cleanprofile /importprf \\server\verteilung\Outlook_2002.PRF in der profil_2003.bat steht folgendes: cd C:\Programme\Microsoft Office\Office11\ outlook.exe /cleanprofile /importprf \\server\verteilung\Outlook_2003.PRF kann mir da jemand weiterhelfen ? Zitieren Link zu diesem Kommentar
thorgood 10 Geschrieben 17. Oktober 2004 Melden Teilen Geschrieben 17. Oktober 2004 Warum mit einer Datei prüfen. Ein Eintrag in der Registry finde ich schöner. Dim WshShell Set WshShell = WScript.CreateObject("WScript.Shell") If Not PRFIsInstalled() Then Dein Script... End If Function PRFIsInstalled() On Error Resume Next Dim PRFCheck PRFCheck = WshShell.RegRead("HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\PRFIsInstalled") If PRFCheck = "Yes" Then PRFIsInstalled = True Else WshShell.RegWrite "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\PRFIsInstalled", "Yes", "REG_SZ" PRFIsInstalled = False End If End Function thorgood Zitieren Link zu diesem Kommentar
G-Files 10 Geschrieben 17. Oktober 2004 Autor Melden Teilen Geschrieben 17. Oktober 2004 das Problem ist, dass schon ein Profil besteht vom alten exchange-server. dieses soll überschrieben werden mit dem profil des neuen exchange, jedoch nur einmal. Zitieren Link zu diesem Kommentar
thorgood 10 Geschrieben 17. Oktober 2004 Melden Teilen Geschrieben 17. Oktober 2004 Das überschreiben des alten Profils übernimmt deine PRF Datei. Das Script oben übernimmt nur die Funktion zu prüfen ob dein Script schon gelaufen ist. Wenn nicht wird dein Script einmal ausgeführt und beim nächsten Mal nicht mehr. Oder habe ich deine Frage nicht verstanden ? Zitieren Link zu diesem Kommentar
thorgood 10 Geschrieben 17. Oktober 2004 Melden Teilen Geschrieben 17. Oktober 2004 Nochmal zur näheren Erklärung. Den Registry Eintrag "PRFIsInstalled" gibt es bei dir im Moment nicht, egal ob ein Exchange Profil vorhanden ist oder nicht, der ist frei erfunden und dient nur zur Überprüfung ob dein Script gelaufen ist. Zitieren Link zu diesem Kommentar
Velius 10 Geschrieben 17. Oktober 2004 Melden Teilen Geschrieben 17. Oktober 2004 Hi Thorgood Wusste doch, dass wir auf dich zählen können..... Also thoretisch kann man den dein VBS auch so ergänzen, oder? Dim WshShell Set WshShell = WScript.CreateObject("WScript.Shell") If Not PRFIsInstalled() Then Dein Script... End If Function PRFIsInstalled() On Error Resume Next Dim PRFCheck PRFCheck = WshShell.RegRead [b]("HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles")[/b] If PRFCheck = "[b][i]corporate profile[/i][/b]" Then PRFIsInstalled = True End If End Function Zitieren Link zu diesem Kommentar
thorgood 10 Geschrieben 17. Oktober 2004 Melden Teilen Geschrieben 17. Oktober 2004 Wenn die Namen des alten und neuen Profils sich unterscheiden Ja. thorgood Nachtrag: Da fehlt noch was If PRFCheck = "corporate profile" Then PRFIsInstalled = True End If [b]PRFIsInstalled = False[/b] Zitieren Link zu diesem Kommentar
Velius 10 Geschrieben 17. Oktober 2004 Melden Teilen Geschrieben 17. Oktober 2004 Original geschrieben von thorgood Wenn die Namen des alten und neuen Profils sich unterscheiden Ja. thorgood Nachtrag: Da fehlt noch was If PRFCheck = "corporate profile" Then PRFIsInstalled = True End If [b]PRFIsInstalled = False[/b] Und wenn nicht, dann müsste ich über WshShell.RegWrite das Dafult Profile umbenennen, gell? :suspect: :) Zitieren Link zu diesem Kommentar
G-Files 10 Geschrieben 17. Oktober 2004 Autor Melden Teilen Geschrieben 17. Oktober 2004 hallo, mein Script sieht jetzt folgendermassen aus : Dim WshShell Set WshShell = WScript.CreateObject("WScript.Shell") If Not PRFIsInstalled() Then [i] 'Office-Versions-Abfrage Anfang sComputer = "." ' use "." for local computer iOfficeVer = GetOfficeVer(sComputer) If iOfficeVer = -1 Then WScript.Echo "Version of Office installed is unknown, " _ & "could not connect to the remote computer." Elseif iOfficeVer = 0 Then WScript.Echo "Office is not installed." Else WScript.Echo "Version of Office installed: " & iOfficeVer End If Function GetOfficeVer(sNode) On Error Resume Next Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" _ & sNode & "/root/default:StdRegProv") If Err.Number <> 0 Then GetOfficeVer = -1 Exit Function '-------> End If sValueName = "Path" sRegPre = "SOFTWARE\Microsoft\Office\" sRegPost = "\Common\InstallRoot" If oReg.GetStringValue( _ HKLM, sRegPre & "11.0" & sRegPost, sValueName, sValue) = 0 Then GetOfficeVer = 2003 Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.run ("cmd.exe /c \\server\profil_2003.bat") Elseif oReg.GetStringValue( _ HKLM, sRegPre & "10.0" & sRegPost, sValueName, sValue) = 0 Then GetOfficeVer = 2002 Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.run ("cmd.exe /c \\server\profil_2002.bat") Elseif oReg.GetStringValue( _ HKLM, sRegPre & "9.0" & sRegPost, sValueName, sValue) = 0 Then GetOfficeVer = 2000 Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.run ("cmd.exe /c \\server\profil_2000.bat") Elseif oReg.GetStringValue( _ HKLM, sRegPre & "8.0" & sRegPost, sValueName, sValue) = 0 Else GetOfficeVer = 0 End If End Function 'Office-Versions-Abfrage Ende [/i] End If Function PRFIsInstalled() On Error Resume Next Dim PRFCheck PRFCheck = WshShell.RegRead ("HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles") If PRFCheck = "Exchange_Neu" Then PRFIsInstalled = True End If PRFIsInstalled = False End Function Jedoch wird bei jedem ausführen des Scripts in der Registry immer ein neues Backup des Profils erstellt. Habe ich noch einen Fehler drin ? Zitieren Link zu diesem Kommentar
Velius 10 Geschrieben 17. Oktober 2004 Melden Teilen Geschrieben 17. Oktober 2004 Ich hab da nen Fehler gemacht....... Es müsste so aussehen: PRFCheck = WshShell.RegRead ("HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\DefaultProfile") If PRFCheck = "Exchange_Neu" Then Versuch's mal so! ;) Zitieren Link zu diesem Kommentar
G-Files 10 Geschrieben 17. Oktober 2004 Autor Melden Teilen Geschrieben 17. Oktober 2004 hallo, es funktioniert. Bedanke mich nochmals bei euch. THX G-Files Zitieren Link zu diesem Kommentar
Velius 10 Geschrieben 18. Oktober 2004 Melden Teilen Geschrieben 18. Oktober 2004 Bei mir sieht's jetzt so aus..... Dim WshShell Set WshShell = WScript.CreateObject("WScript.Shell") If Not PRFIsInstalled() Then Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.run ("outlook.exe /importprf \\server\share\MailSettingsOutlook.prf") End If Function PRFIsInstalled() On Error Resume Next Dim PRFCheck PRFCheck = WshShell.RegRead ("HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\DefaultProfile") If PRFCheck = "Unsere Firma Profil" Then PRFIsInstalled = True End If PRFIsInstalled = False End Function Trotzdem wird die Abfrage nicht durchgeführt, und es werden Backups erstellt der vorgänger Profile..... Sieht da jemand den Fehler?? :( Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.