Jump to content

Einmaliges ausführen einer Batch


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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

Geschrieben

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.

Geschrieben

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 ?

Geschrieben

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

Geschrieben

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 ?

Geschrieben

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

Geschrieben
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: :)

Geschrieben

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 ?

Geschrieben

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!

 

;)

Geschrieben

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?? :(

Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...