wsh und Environment Variablen setzen und in Excel abrufen

Dieses Thema wsh und Environment Variablen setzen und in Excel abrufen im Forum "Webentwicklung, Hosting & Programmierung" wurde erstellt von schauan, 11. Juli 2005.

Thema: wsh und Environment Variablen setzen und in Excel abrufen Hallo, ich habe ein Script welches unter NT4 und Excel 97 problemlos läuft. Das Script wird in abgemeldetem Zustand...

  1. Hallo,

    ich habe ein Script welches unter NT4 und Excel 97 problemlos läuft. Das Script wird in abgemeldetem Zustand mittels taskSchedule unter meinem user ausgeführt.

    Unter XP und Excel XP bekomme ich 2 verschiedene Varianten, eine läuft und eine nicht. Melde ich mich an und führe das Script aus, passt es, melde ich mich ab und starte es über die geplanten Aufträge geht es in die Hose ... Anscheinend werden die Variablen nicht so wie unter NT4 gesetzt sodass Excel diese im abgemeldeten Zustand nicht findet. Die 4 Typen habe ich begonnen zu testen, allerdings bekomme ich mit anderen Typen als PROCESS Probleme unter NT4.

    Script (gekürzt):

    Dim WshShell, WshEnv
    Dim oExcel, oWbk
    Dim fname
    Set WshShell = WScript.CreateObject(WScript.Shell)
    Set WshEnv = WshShell.Environment(PROCESS)
    ' Set WshEnv = WshShell.Environment(SYSTEM)
    ' Set WshEnv = WshShell.Environment(USER)
    ' Set WshEnv = WshShell.Environment(VOLATILE)

    WshEnv (QS_MODE) = AUTO
    fname= c:\test.xls

    Set oExcel = CreateObject(Excel.Application)
    oExcel.visible = true
    Set oWbk = oExcel.Workbooks.Open (fname, false, true)
    ' If left(oExcel.Version,1) = 8 then
    oExcel.Run test
    ' End If
    oExcel.Quit
    '--- ENDE ----
    Set WshShell = nothing
    Set WshEnv = nothing
    Set oExcel = nothing
    Set oWbk = nothing

    In der test.xls ist nur ein winziges Makro:

    Sub test()
    MsgBox Environ(qs_mode)
    End Sub

    Hier wird mir dann der Environment-Wert AUTO ausgegeben.

    Danke und Gruß, Andre
     
  2. Hallo,

    nach weiteren Experimenten habe ich herausgefunden, dass unter NT im an- und abgemeldeten Zustand die PROCESS-Variable ausgelesen wird und unter XP im angemeldeten Zustand ebenfalls die PROCESS-Variable, im abgemeldeten Zustand allerdings die SYSTEM-Variable.
    Das würde bedeuten, dass ich 2 Scripte benötige, 1x für NT und für XP angemeldet und 1x für XP nicht angemeldet. Kann man mit wsh feststellen, welches System läuft (NT4 - 2000 - XP) und ob der user bei Ausführung richtig angemeldet ist ? Wie gesagt, das script läuft im Task Scheduler unter dem Namen des users. Da es auf mehreren Rechnern läuft und natürlich etwas mehr tut  als hier dargestellt - es wird nicht nur eine Variable gesetz usw. -  wären 2 Scripte nicht gerade elegant oder einfacher zu bewerkstelligen. Bisher gibt es ein einheitliches script im Netz, da greifen alle zu, da ist das handling am einfachsten.

    Anbei ein verbesserter code, die Meldung AUTO hilft nicht allzu viel ;-)

    ' wsh code Variante 1 (siehe Excel-Ergebnis):

    Dim WshShell, WshEnv
    Dim oExcel, oWbk
    Dim fname

    Set WshShell = WScript.CreateObject(WScript.Shell)

    Set WshEnv = WshShell.Environment(PROCESS)
    WshEnv (QS_MODE) = PROCESS

    fname= c:\test.xls
    Set oExcel = CreateObject(Excel.Application)
    oExcel.visible = false
    Set oWbk = oExcel.Workbooks.Open (fname, false, false)
    oExcel.DisplayAlerts = False
    oExcel.Run zaehler
    WScript.sleep 60 * 1

    WshEnv (QS_MODE) =

    oExcel.Run zaehler
    WScript.sleep 60 * 1
    oWbk.save
    WScript.sleep 60 * 10
    oWbk.close
    WScript.sleep 60 * 10
    oExcel.Quit


    Set WshShell = nothing
    Set WshEnv = nothing
    Set oExcel = nothing
    Set oWbk = nothing

    '---    ENDE  V1  ----


    ' wsh code Variante 2 (siehe Excel-Ergebnis):

    Dim WshShell, WshEnv
    Dim oExcel, oWbk
    Dim fname

    Set WshShell = WScript.CreateObject(WScript.Shell)

    fname= c:\test.xls


    Set WshEnv = WshShell.Environment(PROCESS)
    WshEnv (QS_MODE) = PROCESS
    Set oExcel = CreateObject(Excel.Application)
    oExcel.visible = true
    Set oWbk = oExcel.Workbooks.Open (fname, false, false)
    oExcel.DisplayAlerts = False
    oExcel.Run zaehler
    WScript.sleep 60 * 1
    oWbk.save
    WScript.sleep 60 * 10
    oWbk.close
    WScript.sleep 60 * 10
    oExcel.Quit
    Set WshEnv = nothing
    Set oExcel = nothing
    Set oWbk = nothing

    Set WshEnv = WshShell.Environment(SYSTEM)
    WshEnv (QS_MODE) = SYSTEM
    Set oExcel = CreateObject(Excel.Application)
    oExcel.visible = true
    Set oWbk = oExcel.Workbooks.Open (fname, false, false)
    oExcel.DisplayAlerts = False
    oExcel.Run zaehler
    WScript.sleep 60 * 1
    oWbk.save
    WScript.sleep 60 * 10
    oWbk.close
    WScript.sleep 60 * 10
    oExcel.Quit
    Set WshEnv = nothing
    Set oExcel = nothing
    Set oWbk = nothing

    Set WshEnv = WshShell.Environment(USER)
    WshEnv (QS_MODE) = USER
    Set oExcel = CreateObject(Excel.Application)
    oExcel.visible = true
    Set oWbk = oExcel.Workbooks.Open (fname, false, false)
    oExcel.DisplayAlerts = False
    oExcel.Run zaehler
    WScript.sleep 60 * 1
    oWbk.save
    WScript.sleep 60 * 10
    oWbk.close
    WScript.sleep 60 * 10
    oExcel.Quit
    Set WshEnv = nothing
    Set oExcel = nothing
    Set oWbk = nothing

    Set WshEnv = WshShell.Environment(VOLATILE)
    WshEnv (QS_MODE) = VOLATILE
    Set oExcel = CreateObject(Excel.Application)
    oExcel.visible = true
    Set oWbk = oExcel.Workbooks.Open (fname, false, false)
    oExcel.DisplayAlerts = False
    oExcel.Run zaehler
    WScript.sleep 60 * 1
    oWbk.save
    WScript.sleep 60 * 10
    oWbk.close
    WScript.sleep 60 * 10
    oExcel.Quit
    Set oExcel = nothing
    Set oWbk = nothing

    Set WshEnv = WshShell.Environment(VOLATILE)
    WshEnv (QS_MODE) =
    Set WshEnv = WshShell.Environment(USER)
    WshEnv (QS_MODE) =
    Set WshEnv = WshShell.Environment(SYSTEM)
    WshEnv (QS_MODE) =
    Set WshEnv = WshShell.Environment(PROCESS)
    WshEnv (QS_MODE) =

    Set WshShell = nothing
    Set WshEnv = nothing

    '---    ENDE  V2  ----

    Excel:
    Sub zaehler()
    Application.DisplayAlerts = False
    [a1] = [a1] + 1
    Sheets(1).Cells(Sheets(1).Cells(Sheets(1).Rows.Count, 1).End(xlUp).Row + 1, 1) = Environ(QS_MODE) & [a1]
    End Sub

    Ergebnis in Excel:
    13
    Variante 1 - angemeldet, nur Variable PROCESS gesetzt
    PROCESS2
    PROCESS3
    Variante 2 - angemeldet, alle Variablen nacheinander gesetzt und ausgelesen
    PROCESS4
    PROCESS5
    PROCESS6
    PROCESS7
    Variante 1 - abgemeldet, nur Variable PROCESS gesetzt
    SYSTEM8
    SYSTEM9
    Variante 2 - abgemeldet, alle Variablen nacheinander gesetzt und ausgelesen
    SYSTEM10
    SYSTEM11
    SYSTEM12
    SYSTEM13
     
  3. Ich denk mal die Antworten liegen in der Registry. Mit dem Programm RegShot (http://www.wintotal.de/softw/index.php?rb=30&id=888) kannst Du nach Unterschieden suchen (angemeldet/nicht angemeldet).
    Welches OS läuft, sieht man z.B. bei Win98 unter HKCU\Software\Liter\CurrentVersion. Wenn Dus bei NT x nicht dort findest, suche einfach mal im RegistryEditor nach der Builtnummer (unter Eigenschaften von System) des jeweiligen OS.
     
  4. Hallo Filtro,
    wie kann ich das denn fernsteuern? In den Releasenotes und der Readme steht dazu nix. Ich habe lediglich die Option -path gefunden. Wenn ich das Tool damit von der Kommandozeile aus starte habe ich den Pfad auch in der Auswahl. Dass nutzt mir aber nichts. Da ich den Zustand Abgemeldet und Angemeldet vergleichen will muss das Ding von meinem Script aus laufen, ich brauche also auch Optionen für den 1Shut, 2Shut, ... , da ist nix beschrieben. Wie geht das?
    Grüße, Andre
     
  5. Hi!

    Ich meinte was anderes! Du sollst das Tool benutzen, um vorher von Hand zu recherchieren, an welchen Registryeinträgen Du erkennen kannst, ob Du an- oder abgemeldet bist. Dein Skript soll nachher dann nur noch den entsprechenden Eintrag auswerten.
     
Die Seite wird geladen...

wsh und Environment Variablen setzen und in Excel abrufen - Ähnliche Themen

Forum Datum
Preinstallation Environment CD Windows XP Forum 16. Nov. 2006
J2SE Runtime Environment 5.0 Update 5 Software: Empfehlungen, Gesuche & Problemlösungen 26. Okt. 2005
Windows Preinstallation Environment Windows XP Forum 6. Juni 2005
Kann System-umgebungsvariablen nicht ändern Windows XP Forum 1. Dez. 2011
Problem mit Umgebungsvariablen Windows XP Forum 7. Sep. 2011