1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. MCTAST245

Beiträge von MCTAST245

  • SCCM Task-Sequenz Variable + Wert erstellen

    • MCTAST245
    • 27. August 2018 um 22:57

    Hallo geschätzte AutoIt Profis,

    Bisher habe ich lediglich einen Wert aus einer vorhandenen Task-Sequenz Variable gelesen. Das war erfolgreich.

    Hier der Codeschnipsel:

    __RetrieveObjectVars('_SMSTSBootImageID')

    Func __RetrieveObjectVars($f_Arg)

    Local $f_Var = $f_Arg

    $SCCM = ObjCreate("Microsoft.SMS.TSEnvironment")

    Local $VarResult = $SCCM.Value($f_Var)

    __WriteLogInfo('Read successful "' & $SCCM.Value($f_Var) & '" with value "' & $VarResult & '"')

    Return $VarResult

    EndFunc ;==>__RetrieveObjectVars

    Ich würde nun gerne eine neue Task-Sequenz Variable mit einem neuen Wert schreiben.

    Kann mir jemand von Euch hierbei helfen?

    Viele Grüße

    Axel

  • Boottime von PC in Registry schreiben

    • MCTAST245
    • 1. Juli 2009 um 22:09

    Hallo AutoIt Leihe,

    Ok, meine Script ist länger, aber sofern du die genaue Boottime benötigst. ;)

    Spoiler anzeigen
    [autoit]


    Dim $BootTime
    Dim $TDYear, $TDMonth, $TDDay, $TDHour, $TDMinute, $TDSeconds
    Dim $Min5Var

    [/autoit] [autoit][/autoit] [autoit]

    ; Einstellunen------------------------------------------------------------
    AutoItSetOption('TrayIconHide')
    $Debug=1
    $ExecutionTime=5
    ; ------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    ; Rufe BootTime Function auf - Hier wird über WMI die BootTime abgefragt.-
    BootTime()
    ; ------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    ; Teile den BootTime String in Jahr Monat Tag Stunde Minute Sekunde auf --
    $Year=StringLeft($BootTime, 4)
    $Month=StringMid($BootTime, 5, 2)
    $Day=StringMid($BootTime, 7, 2)
    $Hour=StringMid($BootTime, 9, 2)
    $Minute=StringMid($BootTime, 11, 2)
    $Seconds=StringMid($BootTime, 13, 2)
    ; ------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    ; Schreibe die aus WMI geholte Zeit in die Console -----------------------
    ConsoleWrite('> Last Boot Up Time : ' & $BootTime & @CRLF)
    ; ------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    ; Gebe dieser Variable dasselbe Aussehen für die jetzige Zeit ------------
    ; und schreibe den Wert in die Console -----------------------------------
    ; Ist damits in der Console schöner aussieht -----------------------------
    $TimeNow=@YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC
    ConsoleWrite('> Jetziger Zeitstempel : ' & $TimeNow & @CRLF)
    ; ------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    ; Teile den TimeNow String in Jahr Monat Tag Stunde Minute Sekunde auf ---
    ; und berechne die Differenz des einzelnen Arguments ---------------------
    ; Entscheide ausserdem ob Maschine mehr als $ExecutionTime läuft ---------
    GetTimeDifferenz()
    ; ------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    ; Zeige entsprechende Meldung in der Console an. -------------------------
    ; Hier kann man auch etwas anderes ausführenn lassen ---------------------
    If $Min5Var Then
    ConsoleWrite('> Der Rechner läuft : ' & $TDDay & ' Jahre ' & $TDMonth & ' Monate ' & $TDDay & ' Tage ' & $TDHour & ' Stunden ' & $TDMinute & ' Minuten ' & $TDSeconds & ' Sekunden.' & @CRLF)
    ConsoleWrite('> Der Rechner läuft länger als ' & $ExecutionTime & ' Minuten.' & @CRLF)
    $ExitCode=0
    Else
    ConsoleWrite('> Der Rechner läuft : ' & $TDDay & ' Jahre ' & $TDMonth & ' Monate ' & $TDDay & ' Tage ' & $TDHour & ' Stunden ' & $TDMinute & ' Minuten ' & $TDSeconds & ' Sekunden.' & @CRLF)
    ConsoleWrite('> Der Rechner läuft nicht länger als ' & $ExecutionTime & ' Minuten.' & @CRLF)
    $ExitCode=-1
    EndIf
    ; ------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    ; Hiermit wird das Programm beendet sowie ein ErrorCode ausgegeben. ------
    Terminate ($Exitcode)
    ; ------------------------------------------------------------------------

    [/autoit] [autoit][/autoit] [autoit]

    Func Terminate($Exitcode)
    Exit ($Exitcode)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func BootTime()
    $COMPUTERNAME=EnvGet("COMPUTERNAME")
    Local $ProductCode, $ProductName, $Val
    Local $objItems
    Local $objWMI

    [/autoit] [autoit][/autoit] [autoit]

    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20

    [/autoit] [autoit][/autoit] [autoit]

    $objWMI = ObjGet("winmgmts:\\" & $COMPUTERNAME & "\root\CIMV2")
    $objItems = $objWMI.ExecQuery('Select * from Win32_OperatingSystem', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    If IsObj($objItems) Then
    For $objItem In $objItems
    $oBootTime = $objItem.LastBootUptime
    Next
    EndIf
    $BootTimeArray=StringSplit($oBootTime,".",1) ; Entferne alle Zahlen nach dem . damit es in der Console schöner aussieht.
    $BootTime=$BootTimeArray[1]; Gib mir den Teil des Arrays links vom . (Punkt)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func GetTimeDifferenz()
    If @YEAR < $Year Then $TDYear=(@YEAR-$Year)*-1
    If @YEAR = $Year Then $TDYear=0
    If @YEAR > $Year Then $TDYear=@YEAR-$Year
    If $Debug Then ConsoleWrite('> Time Differenz Year = ' & $TDYear & @CRLF)

    [/autoit] [autoit][/autoit] [autoit]

    If @MON < $Month Then $TDMonth=(@MON-$Month)*-1
    If @MON = $Month Then $TDMonth=0
    If @MON > $Month Then $TDMonth=@MON-$Month
    If $Debug Then ConsoleWrite('> Time Differenz Month = ' & $TDMonth & @CRLF)

    [/autoit] [autoit][/autoit] [autoit]

    If @MDAY < $Day Then $TDDay=(@MDAY-$Day)*-1
    If @MDAY = $Day Then $TDDay=0
    If @MDAY > $Day Then $TDDay=@MDAY-$Day
    If $Debug Then ConsoleWrite('> Time Differenz Day = ' & $TDDay & @CRLF)

    [/autoit] [autoit][/autoit] [autoit]

    If @HOUR < $Hour Then $TDHour=(@HOUR-$Hour)*-1
    If @HOUR = $Hour Then $TDHour=0
    If @HOUR > $Hour Then $TDHour=@HOUR-$Hour
    If $Debug Then ConsoleWrite('> Time Differenz Hour = ' & $TDHour & @CRLF)

    [/autoit] [autoit][/autoit] [autoit]

    If @MIN < $Minute Then $TDMinute=(@MIN-$Minute)*-1
    If @MIN = $Minute Then $TDMinute=0
    If @MIN > $Minute Then $TDMinute=@MIN-$Minute
    If $Debug Then ConsoleWrite('> Time Differenz Minute = ' & $TDMinute & @CRLF)

    [/autoit] [autoit][/autoit] [autoit]

    If @SEC < $Seconds Then $TDSeconds=(@SEC-$Seconds)*-1
    If @SEC = $Seconds Then $TDSeconds=0
    If @SEC > $Seconds Then $TDSeconds=@SEC-$Seconds
    If $Debug Then ConsoleWrite('> Time Differenz Seconds = ' & $TDSeconds & @CRLF)

    If $TDYear >= 1 Then
    $Min5Var=True
    Return $Min5Var
    ElseIf $TDMonth >= 1 Then
    $Min5Var=True
    Return $Min5Var
    ElseIf $TDDay >= 1 Then
    $Min5Var=True
    Return $Min5Var
    ElseIf $TDHour >= 1 Then
    $Min5Var=True
    Return $Min5Var
    ElseIf $TDMinute >= $ExecutionTime Then
    $Min5Var=True
    Return $Min5Var
    EndIf
    $Min5Var=False
    Return
    EndFunc

    [/autoit]

    TrayIcon wird nicht angezeigt.

    Schönen Abend.

  • Boottime von PC in Registry schreiben

    • MCTAST245
    • 1. Juli 2009 um 11:59

    Hallo AutoIt Leihe,

    ich weiß nicht genau ob ich dazu heute komme, jedoch werde ich mal schauen welche die Lösung implementiert werden kann.

    Gruß,
    Axel

  • Boottime von PC in Registry schreiben

    • MCTAST245
    • 1. Juli 2009 um 10:50

    Hallo AutoIt-Leihe,

    ich habe dir doch ein Script zur Verfügung gestellt. Das macht dasselbe wie BGInfo und schreibt zusätzlich die Boottime in die Registrierung. 8)
    Was und wie in die Registrierung geschrieben wird, kannst du doch nach deinen Wünschen anpassen. :rolleyes:
    Ich verstehe ehrlich gesagt nicht, warum du dieses Script nicht verwendest. ?(

    Und jetzt fragst du bei anderen Scripten, ob das wirklich die Boottime ist. :wacko:
    NEIN ist es nicht.

    Was benötigst du denn genau?

    Viele Grüße,
    Axel

  • Prozess mit Leerzeichen ?!

    • MCTAST245
    • 30. Juni 2009 um 14:33

    Hallo BitBoy,

    hat es geklappt. Wäre schön, wenn du eine Rückmeldung geben könntest.

    Denn genau so ein Tool suche ich auch. :)

    Vielen Dank an die beiden Autoren. :thumbup:

    Viele Grüße,
    Axel

  • Dateien unter einem anderen Benutzer kopieren

    • MCTAST245
    • 30. Juni 2009 um 14:16

    Hallo Llewellyen,

    welcher benutzer soll installieren. Administrator?

    Viele Grüße,
    Axel

  • Code-Frage

    • MCTAST245
    • 30. Juni 2009 um 13:54

    Hallo HansWurst,

    Idee schon, aber die hat nicht unbedingt etwas mit AutoIt zu tun.

    Wenn ich dich richtig verstehe, könntest du die AdLib Function verwenden. Mal in der AutoIt Hilfe suchen.
    In der AdLib Function baust du dann das WinWait für die Fehlermdlung ein und was so danach kommt.
    Ansonsten läuft das Script mit der WinWait Erfolgsmeldung durch.

    Wenn das nicht geht, dann würde ich dir vorschlagen
    1.) Silent Hersteller Setup zu verwenden
    oder
    2.) Das Hersteller Setup zu repaketieren

    Dann hast du die Probleme nicht mehr. :D

    Gruß,
    Axel

  • Boottime von PC in Registry schreiben

    • MCTAST245
    • 30. Juni 2009 um 13:29

    Hallo,

    So geht es. Ist dasselbe was BGInfo macht, nur halt AutoIt.
    Was du testen müsstest ist, ob es auch morgens bei einstelligen Stunden Werten funktioniert. ;)
    Die Ausgabewerte kannst du dir natürlich so zusammenbasteln wie du Sie benötigst.

    Es wäre schön, wenn du deinen Namen in deinen Postings erwähnen würdest.
    Oder gibt es da Einschränkungen von deiner Seite?

    Gruß,
    Axel


    Spoiler anzeigen
    [autoit]


    Dim $BootTime
    $COMPUTERNAME=EnvGet("COMPUTERNAME")
    BootTime()

    [/autoit] [autoit][/autoit] [autoit]

    $Year=StringLeft($BootTime, 4)
    $Month=StringMid($BootTime, 5, 2)
    $Day=StringMid($BootTime, 7, 2)
    $Hour=StringMid($BootTime, 9, 2)
    $Minute=StringMid($BootTime, 11, 2)
    $Seconds=StringMid($BootTime, 13, 2)
    ConsoleWrite('> Letzer Boot Zeitstempel : ' & $Hour & ':' & $Minute & ':' & $Seconds & ' am ' & $Day & '.' & $Month & '.' & $Year & @CRLF)
    RegWrite('HKLM\Software\Irgendwas', 'Boottime', 'REG_SZ', $Hour & ':' & $Minute & ':' & $Seconds & ' - ' & $Day & '.' & $Month & '.' & $Year)
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Func BootTime()
    Local $objItems
    Local $objWMI

    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20

    $objWMI = ObjGet("winmgmts:\\" & $COMPUTERNAME & "\root\CIMV2")
    $objItems = $objWMI.ExecQuery('Select * from Win32_OperatingSystem', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    If IsObj($objItems) Then
    For $objItem In $objItems
    $BootTime = $objItem.LastBootUptime
    ConsoleWrite('> Last Boot Up Time : ' & $BootTime & @CRLF)
    Next
    EndIf
    EndFunc

    [/autoit]
  • Problem mit VBS Übersetzung in AutoIt

    • MCTAST245
    • 30. Juni 2009 um 09:25

    Hallo BugFix,

    nur keine Hektik.
    Ich finde es echt Klasse das du mir hilfst. :rock:
    Ohne die Hilfe würde ich ganz schön im Regen stehen. :huh:
    Vielen Dank auch auch an alle anderen Leute die sich beteiligen. :thumbup:

    Schönen Tag.

    Viele grüße,
    Axel

  • Problem mit VBS Übersetzung in AutoIt

    • MCTAST245
    • 30. Juni 2009 um 08:29

    Guten Morgen BugFix,

    hoffe du hast usgeschlafen. ;)

    Wow, das ist ein tolles Script.
    Ich habe dem Script jetz einfach nur die Zeilen

    [autoit]


    $strProductCode='{8EDD2192-A0FF-485D-862F-C692DE378B9B}'
    $strUserSid='s-1-1-0'
    $dwContext='MSIINSTALLCONTEXT_MACHINE'
    $dwIndex='0'

    [/autoit][autoit][/autoit][autoit]

    MsiEnumProductsEx($strProductCode, $strUserSid, $dwContext, $dwIndex)

    [/autoit]


    Vorangestellt.

    Ist das so korrekt? Denn ich bekomme beim ausführen einen Fehler. F:\MsiEnumProductsEx.au3 (30) : ==> Subscript used with non-Array variable.:
    Evtl. habe ich mir das ja zu einfach vorgestellt. Ehrlich gesagt verstehe ich das Ganze nicht 100%tig.

    Viele Grüße,
    Axel

  • Problem mit VBS Übersetzung in AutoIt

    • MCTAST245
    • 29. Juni 2009 um 19:52

    Hallo Bugfix,

    danke für dein Script.
    Bis Zeile 12 ist alles ok. Super. Er filtert genau den ProductCode heraus und gibt über die Variable $IsInstalled wieder, ob das MSI bereits installiert ist oder nicht.

    Aber der Rest funktioniert nicht.
    Ich habe das Script mit einem installiertem MSI ProductCode, welches ich selber repaketiert habe, versucht.
    Daher weiß ich, dass bei der Installation das MSI Property ALLUSERS=1 war.

    Es kommt immer die Message Box, da der Wert von $oProducts.Count immer 1 ist, egal ob das MSI mit ALLUSERS=1 oder ALLUSERS=2 installiert wurde.

    Habe aber gerade einen interessanten Link gefunden.
    http://msdn.microsoft.com/en-gb/library/aa369461(VS.85).aspx
    und
    http://msdn.microsoft.com/en-gb/library/aa371120(VS.85).aspx

    Evtl. kannst du ja etwas damit anfangen.

    Schönen Abend,
    Axel

  • Problem mit VBS Übersetzung in AutoIt

    • MCTAST245
    • 29. Juni 2009 um 09:48

    Hallo Bugfix,

    uuupps. Hab ich übersehen. :S

    Set oMSI = CreateObject("WindowsInstaller.Installer")

    Schon mal vielen Dank für deine Mühe.

    Viele Grüße,
    Axel

  • Problem mit VBS Übersetzung in AutoIt

    • MCTAST245
    • 29. Juni 2009 um 00:52

    Hallo Axel (Namensvetter) :huh:

    vielen Dank für deine Antwort.
    Jedoch ist eine Aufgabe meines Scriptes herauszufinden, ob das installierte Product mit dem Property ALLUSERS=1 installiert wurde oder nicht.
    Darum verwende ich auch das WMI Object "Win32_Property". Da kann ich den Status auslesen.
    Leider ist dein Script in meiner Situation unbrauchbar, sorry.

    Aber vielen Dank für deine Mühe. ;)

    Viele Grüße,
    Axel

  • Problem mit VBS Übersetzung in AutoIt

    • MCTAST245
    • 28. Juni 2009 um 21:59

    Guten Abend liebe Leute,

    Ich würde gerne via WMI überprüfen, ob ein bestimmtes MSI Product (Property "ProductCode") bereits auf der Maschine installiert ist und welcher Wert das Property "ALLUSERS" hat.

    Dazu habe ich nachfolgendes Script erstellt. Aber es dauert im günstigsten Fall 7,8 im ungünstigsten Fall 9,8 Sec. :sleeping:
    Evtl. ist es ja möglich diese Routine zu optimieren? :huh:

    [autoit]


    $COMPUTERNAME = EnvGet ("COMPUTERNAME")
    InstalledProduct()
    Exit

    [/autoit][autoit][/autoit][autoit]

    Func InstalledProduct()

    [/autoit][autoit][/autoit][autoit]

    Local $ProductCode, $ProductName ,$Val
    Local $objItems
    Local $objWMI

    [/autoit][autoit][/autoit][autoit]

    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20

    [/autoit][autoit][/autoit][autoit]

    $objWMI = ObjGet("winmgmts:\\" & $COMPUTERNAME & "\root\CIMV2")
    ;$objItems = $objWMI.ExecQuery('Select * from Win32_Property Where Name = {2C1B3E20-EE87-4E70-A0CD-5FCFD0F2D9B4}', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    $objItems = $objWMI.ExecQuery('Select * from Win32_Property', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    If IsObj($objItems) Then
    For $objItem In $objItems
    $Caption = $objItem.Caption
    $ProductCode = $objItem.ProductCode
    $Val = $objItem.Value
    If $ProductCode = "{2C1B3E20-EE87-4E70-A0CD-5FCFD0F2D9B4}" And $Caption = "ALLUSERS" Then ConsoleWrite("> Product Code : " & $ProductCode & @CRLF & "> ALLUSERS State : " & $Val & @CRLF)
    Next
    EndIf
    EndFunc

    [/autoit]

    Auf der anderen Seite habe ich ein VBS. Evtl. kann man ja das in AutoIt umsetzen?
    Hier wird das ProductEx Object verwendet. Um dies korrekt verwenden zu können muss bei Euch der Windows Installer 3.1 installiert sein.
    Ist ja bei mir der Fall, allerdings funktioniert das ansteuern dieses Object in AutoIt bei mir nicht.

    [autoit]


    Set oMSI = CreateObject("WindowsInstaller.Installer")

    [/autoit][autoit][/autoit][autoit]

    Function IsProductInstalled(strProductCode)
    Dim oProducts
    Dim strTemp
    IsProductInstalled = False
    On Error Resume Next
    Err.Clear
    Set oProducts = oMsi.ProductsEx(strProductCode,"",4) ' list only Products that installed in machine context
    If Err.Number <> 0 Then
    On Error Goto 0
    ' Your Windows Installer Version does not support the ProductsEx property!
    Set oProducts = oMsi.Products
    For Each strTemp In oProducts
    If UCase(strTemp) = UCase(strProductCode) Then
    IsProductInstalled = True
    End If
    Next
    Else
    On Error Goto 0
    If oProducts.Count > 0 Then
    IsProductInstalled = True
    Else
    Set oProducts = oMsi.ProductsEx(strProductCode,"s-1-1-0",1+2+4) ' list all products
    If oProducts.Count > 0 Then
    ' WARNING: The Product is not installed using ALLUSERS = 1
    End If
    End If
    End If
    Set oProducts = Nothing
    End Function

    [/autoit]

    Im VBS ist es vertretbar schnell.

    Kann mir jemand helfen? Ich sitze jetzt schon 1 Woche daran. ;(

    Viele Grüße,
    Axel

  • Alle Werte von einem zweidimensonalen Array mit allen Werten eines eindimensionalen Arrays vergleichen

    • MCTAST245
    • 21. Juni 2009 um 02:45

    Hallo Bugfix,

    Vielen Dank für die Erklärung.

    Ichdenke auch, dass ich demnächst die UBound Variante wähle, da Sie auch näher am VBS hängt. :D
    Dann können das die "transparenten" VBS Menschen ebenfalls besser nachvollziehen. :rofl:
    Ooooh. Die Bemerkung nehme ich zurück. Ich habe nur laut gedacht......

    Schnell weg.....

    Gruß,
    Axel aus'm Pott

  • Alle Werte von einem zweidimensonalen Array mit allen Werten eines eindimensionalen Arrays vergleichen

    • MCTAST245
    • 20. Juni 2009 um 12:47

    Hallo zusammen,

    vielen Dank für Eure beiden Antworten.
    Selbstverständlich hab ich die diversen Befehle ausporbiert und mit der Autoit Hilfe gearbeitet, bevor ich hier gepostet habe. ;)
    Das sollte doch die erste Quelle sein.

    XovoxKingdom: Danke, _ArraySearch hatte ich ebenfalls in meinem ersten (nicht veröffentlichten Script) in Betracht gezogen.
    Hat bei mir nicht funktioniert. Deshalb habe ich die Case Switch Funktion probiert. :wacko:

    funkey: Durch dein Besipiel habe ich meinen Fehler in meinem ersten Script (nicht veröffentlichten Script) mit _ArraySearch erkannt. 8o

    _ArraySearch($aPersonen, $MandatoryIniArray[$i]) --> Als erstes Argument muss natürlich das komplette Array angegeben werden.
    Ich hatte es mit _ArraySearch($aPersonen[0][0], $MandatoryIniArray[$i]) probiert. ;(
    Ist ja eigentlich logisch, wenn man nicht gerade auf'm Schlauch steht.

    Eine Frage hat sich allerdings innerhalb deiner Antwort für mich ergeben.

    Wo besteht der Unterschied/Vorteil bei Verwendung von???
    For $i = 0 To UBound($MandatoryIniArray) -1
    zu der Schleife
    For $i = 0 To $MandatoryIniArray[0]

    Wenn ich das richtig verstehe, kann ich UBound bei Arrays verwendet, die die Größe nicht automatisch mit [0] zürückgeben, oder?

    Jedenfalls nochmals danke an Euch beiden, dass Ihr mir die Augen geöffnet habt.
    Jetzt klappt alles super! :thumbup:

    Viele Grüße,
    Axel aus'm Pott

  • Alle Werte von einem zweidimensonalen Array mit allen Werten eines eindimensionalen Arrays vergleichen

    • MCTAST245
    • 19. Juni 2009 um 15:50

    Hallo zusammen,

    Ich stelle das Script hier einfach mal rein.

    Ziel des Scriptes ist es, daß eine Fehlermeldung ausgegeben wird, wenn eine oder mehrere Personen im Array $MandatoryIniKeys vorhanden sind, aber NICHT in der INI Datei vorhanden sind.

    [autoit]


    #include <Array.au3>
    Const $MandatoryIniKeys = "Axel-Peter-Yvonne-Willi"
    $scriptIni = "AnwesendePersonen.ini"
    Dim $i, $a
    $Debug=1

    [/autoit][autoit][/autoit][autoit]

    $SectionNames=IniReadSectionNames(@ScriptDir & "\" & $scriptIni) ;Lese die Anzahl und die einzelnen Sectionsnamen in ein array ein.
    $MandatoryIniArray = StringSplit ($MandatoryIniKeys, "-",1); Splitte die als Konstante angegebenen zwingenden Personen $MandatoryIniKeys in ein eindimensionales Array.
    If $Debug <> 0 Then _ArrayDisplay($MandatoryIniArray, "Liste der zwingend anwesenden Personen. ")

    [/autoit][autoit][/autoit][autoit]

    For $i = 1 To $SectionNames[0]; Geht die INI Datei vom ersten bis zum letzten Sectionsnamen durch.
    If $SectionNames[$i]="PERSONEN" Then ; Wenn der Sectionsname [PERSONEN] lautet, überprüfe mit nachfolgender SuchFunktion ob alle Werte ($SectionNames) von PERSONEN in der Liste des $MandatoryIniArray's sind.
    $SectionValues=IniReadSection(@ScriptDir & "\" & $scriptIni, $SectionNames[$i]) ;Lese die Anzahl der einzelnen Schlüssel des Sectionsnamenms in ein zweidimensionales array ein.

    For $a = 1 To $SectionValues[0][0]
    If $Debug <> 0 Then _ArrayDisplay($SectionValues, "2D List for the " & $SectionNames[$i])
    Switch $SectionValues[$a][0]
    Case $MandatoryIniArray[1] To $MandatoryIniArray[0]
    If $Debug <> 0 Then MsgBox (0, "Gefunden", "Der Key " & $SectionValues[$a][0] & " der INI Datei mit dem Wert " & $SectionValues[$a][1] & " gefunden.")
    Case Else
    If $Debug <> 0 Then MsgBox (0, "Nicht Gefunden", "Der Key " & $SectionValues[$a][0] & " der INI Datei mit dem Wert " & $SectionValues[$a][1] & " NICHT gefunden.")
    EndSwitch
    Next

    EndIf
    Next

    [/autoit][autoit][/autoit][autoit][/autoit]

    Hier die Werte der INI Datei (oder die angehängte Datei download)
    [PERSONEN]
    Axel = Ganztägig
    Heinz = Ganztägig
    peter = Ganztägig
    Yvonne = Ganztägig
    Frank = Ganztägig
    Willi = Ganztägig

    [Themen]
    Axel = thema1
    Willi = thema1
    Frank = thema1
    Yvonne = thema1
    Peter = thema1
    Heinz = thema1

    Warum funktioniert das Script nicht? ?(
    Was habe ich falsch gemacht? ;(
    Hätte ich das Script anders aufbauen müssen :?:

    Vielen Dank im Voraus für Eure Mühe.

    Schönes Wochenende
    Axel

  • $oProc.GetOwner

    • MCTAST245
    • 18. Juni 2009 um 01:47

    Hallo Greenhorn,

    habe zuviel versprochen.
    Wie setze ich den Thread auf gelöst? ;(

    Es ist schon spät und ich habe den ganzen Abend programmiert. :pinch:

    Also Gute Nacht und noch Mal Danke.

    Axel

  • $oProc.GetOwner

    • MCTAST245
    • 17. Juni 2009 um 19:51

    Hallo Greenhorn,

    vielen Dank für die Info. ^^

    Wo ist der Vorteil wenn ich ein Array erstelle?
    Ausser das es professioneller aussieht. Auch hierfür danke.

    Wo ist der Unterschied zu deiner Abfrage in Zeile 25.
    Deins --> $nOwner = $objItem.GetOwner($sUserName, $sUserDomain)
    Meins --> $nOwner = $objItem.GetOwner

    Bisher dachte ich, das man nur ein ganzes Objekt Item abfragen kann.
    Gehe ich aufgrund deines Scriptes recht in der Annahme, dass man auch einzelne Werte abfragen kann?

    Weisst du zufällig ob man irgendwo eine Referenz dazu findet?
    Im Scriptomatic2 von Microsoft habe ich viel gefunden, allerdings nichts über objItem.GetOwner.

    Habe dein Script gerade ausprobiert.
    That's it :thumbup:

    Sollte ich das den Thread auf gelöst setzen, wenn ich evtl. später noch Fragen dazu habe?

    Danke und schönen Abend.
    Axel aus'm Pott

  • $oProc.GetOwner

    • MCTAST245
    • 15. Juni 2009 um 20:22

    Guten Abend zusammen,


    ich habe ein Problem mit einer Funktion, die ich implementieren möchte.

    Über WMI soll die ProcessID, der Processname und der Processowner ausgelesen werden.
    Processname und ProcessID wird zurückgegeben, jedoch für den Owner wird mir der Wert 0 (Null) zurückgegeben.
    Was mache ich falsch?
    Kann mir jemand bei der Lösung helfen?

    Vielen Dank im Voraus.
    Axel

    Hier mein Quellcode:

    [autoit]


    Func MyPID()
    $COMPUTERNAME = EnvGet ("COMPUTERNAME")
    $sUsername=EnvGet ("USERNAME")
    $sUserDomain=EnvGet ("USERDOMAIN")
    Dim $nPID, $nName, $nOwner
    Dim $objItems
    Dim $objWMI

    [/autoit][autoit][/autoit][autoit]

    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20

    $objWMI = ObjGet("winmgmts:\\" & $COMPUTERNAME & "\root\CIMV2")
    $objItems = $objWMI.ExecQuery('Select * from Win32_Process Where Name = "ALG.exe" Or Name = "' & @ScriptName & '"', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    If IsObj($objItems) Then
    For $objItem In $objItems
    $nPID = $objItem.ProcessId
    $nName = $objItem.Name
    $nOwner = $objItem.GetOwner
    ConsoleWrite("PID: " & $objItem.ProcessId & @CRLF)
    ConsoleWrite("PROCESS: " & $objItem.Name & @CRLF)
    ConsoleWrite("OWNER: " & $nOwner & @CRLF)
    Next
    EndIf
    Return $nPID
    Return $nName
    Return $nOwner
    EndFunc

    [/autoit]

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™