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. Concara

Beiträge von Concara

  • Emailadressen auslesen aus Outlook Gesendete Objekte

    • Concara
    • 22. Juli 2021 um 17:34

    Hallo Water!

    Super danke!

    Hast du noch ein Idee wie man die Exchange internen Adressen in "richtige" Mailadressen umwandelt.

    /o=DOMAIN/ou=exchange administrative group (fydibohf23spdlt)/cn=recipients/cn=c273d1e9c0a74795a003759535e1fe7b-Mustermann Max

    Du hattest da ein Lösung für den Versender einer Email im Englischen Forum

    Spoiler anzeigen
    AutoIt
     Global $oOutlook = _OL_Open()
    Global $aOL_Item = _OL_ItemFind($oOutlook, "*\Gesendete Objekte", $olMail, "", "", "", "EntryID,@ItemObject")
    Local $oOL_Item = $oOutlook.Session.GetItemFromID($aOL_Item[284][0], Default)
    Local $oOL_Sender = $oOL_Item.Sender
    If $oOL_Sender.AddressEntryUserType = $olExchangeUserAddressEntry Or $oOL_Sender.AddressEntryUserType = $olExchangeRemoteUserAddressEntry Then
        Local $oExchangeUser = $oOL_Sender.GetExchangeUser
        MsgBox(0, "Mail", $oExchangeUser.PrimarySmtpAddress)
    Else
        MsgBox(0, "Mail", "Failed")
    EndIf
    _OL_Close($oOutlook)
    Alles anzeigen
  • Emailadressen auslesen aus Outlook Gesendete Objekte

    • Concara
    • 22. Juli 2021 um 13:54

    Hallo!

    Ich würde gerne die Emailadressen der Empfänger aus den Versendeten Emails (Gesendete Objekte) auslesen.

    Dazu verwende ich die Outlookex udf von water.

    Hier der code den ich bisher zusammen kopiert habe.

    Spoiler anzeigen
    AutoIt
    #include <Array.au3>
    #include <outlookEX.au3>
    Global $oOutlook = _OL_Open()
    If @error <> 0 Then Exit MsgBox(16, "OutlookEX UDF:", "Error connecting to Outlook. @error = " & @error & ", @extended: " & @extended)
    $aItems = _OL_ItemFind($oOutlook, "*\Gesendete Objekte", $olMail, "", "", "", "SenderName,To,CC,BCC,EntryID", "", 1)
    _ArrayDisplay($aItems)
    $Result = _OL_ItemRecipientGet($oOutlook, $aItems[284][4], Default)
    If @error <> 0 Then Exit MsgBox(16, "OutlookEX UDF: _OL_ItemRecipientGet Example Script", "Error getting member list. @error = " & @error & ", @extended = " & @extended)
    _ArrayDisplay($Result, "OutlookEX UDF: _OL_ItemRecipientGet Example Script", "", 0, "|", "Recipient object|Name|EntryID")
    Global $aOL_Properties = _OL_ItemGet($oOutlook, $Result[4][0])
    If @error <> 0 Then Exit MsgBox(16, "OutlookEX UDF: _OL_ItemGet Example Script", "Error accessing properties. @error = " & @error)
    _ArrayDisplay($aOL_Properties, "OutlookEX UDF: All properties of a contact item (name, value, datatype)", "", 0, "|", "Name|Value|Type")
    Alles anzeigen

    Wie geschrieben würde ich die Emailadresse im Format max.mustermann@musterfirma.com benötigen der Name wie ich es aus dem erster Array schon bekomme nützt mir nichts.

    Ich hatte gehofft, dass ich im dritten Array ($aOL_Properties) diese Information erhalte, aber dort wird mir nur

    ROW|Name|Value|Type

    Row1|0|3|

    angezeigt.

    Danke für eure Hilfe!

  • Outlook Kalender aus Öffentliche Ordner den Favoriten hinzufügen Outlook 64 Bit Version

    • Concara
    • 20. August 2020 um 11:06

    Hallo

    Mitlerweile muss Microsoft den Fehler in der 64 Bit Version behoben haben.

    Dieser Code funktioniert jetzt:

    Code
    #include <OutlookEx.au3>
    
    $oOutlook = _OL_Open()
    _OL_ErrorNotify(1)
    $Local_Folder = _OL_FolderAccess($oOutlook, "Öffentliche Ordner - Max.Mustermann@Musterland.at\Alle Öffentlichen Ordner\Mein Kalender", $olFolderCalendar)
    ConsoleWrite(@ScriptLineNumber - 1 & ": " & @error & "-" & @extended & @CRLF)
    $Local_Folder[1].AddToPFFavorites
    ConsoleWrite(@ScriptLineNumber - 1 & ": " & @error & "-" & @extended & @CRLF)
  • Eine Funktion mehrfach starten

    • Concara
    • 3. Mai 2019 um 11:53

    Hallo Lashandan!

    Ich verwende bei meinen Scripts auch Parallelisierung damit Scripte schneller abgearbeitet werden.

    Ich würde dir empfehlen jeden einzelnen PC als eigene Abfrage zu starten und die Ergebnise in eine Tempdatei zu schreiben.

    Wenn alle Abfragen abgeschloßen sind, ließt du die Tempdateien ein und erzeugst eine Gesamtdatei.

    (Damit ersparst du dir die Lockfile Problematik.)

    In der Startdatei gibt es eine Variable die $i_ProcessCount heißt. Dort kann man Angeben wieviele Abfragen gleichzeitig starten sollen. Die Anzahl hängt stark davon ab was man im Verarbeitungsscript alles macht.

    Deine Abfrage ist recht schnell abgearbeitet, somit könnte man die Anzahl stark erhöhen und somit wäre die Abfrage sehr schnell erledigt.

    Ich hatte noch einige Ideen wie man diese "gleichzeitigen" Starts dynamisch regeln könnte, habe diese aber noch nicht in das Script eingebaut.

    Man könnte die Speicherauslastung am System von dem man das Script startet, mit einbeziehen und sobald eine gewisse Speichermenge überschritten wird, wird die Anzahl der ausgeführten Scripte reduziert.

    Das gleiche könnte man auch mit der CPU Auslastung machen. Oder natürlich beides.

    Start Script:

    Spoiler anzeigen
    C
    #include <File.au3>
    Global $i_ProcessCount = 10 ; Angabe wieviele Abfragen "gleichzeitig" gestartet werden sollen
    Global $s_AusgabeDatei = "Ergebnis.txt"
    Local $count = 0, $searchfor, $aResult, $i, $ii, $i_Count = 0, $aTable[$i_ProcessCount + 1], $i_ProcessStatus_Retry, $i_ProcessStatus, $a_FileRead
    FileDelete(@ScriptDir & "\tempdir")
    DirCreate(@ScriptDir & "\tempdir")
    _FileReadToArray(@ScriptDir & "\PCListe.txt", $a_FileRead) ;Liste mit den PCs die abgefragt werden sollen
    
    Local $i_Countdown = UBound($a_FileRead) - 1
    
    For $i = 1 To UBound($a_FileRead) - 1
        Do
            If $i_Count = $i_ProcessCount Then
                $i_Count = 0
            EndIf
            $i_Count += 1
            Sleep(100)
        Until Not ProcessExists($aTable[$i_Count])
        $aTable[$i_Count] = Run('"' & @ScriptDir & '\Verarbeitungsprogramm.exe"' & " " & $a_FileRead[$i], @ScriptDir, @SW_HIDE, 4)
        ConsoleWrite($aTable[$i_Count] & @CRLF)
        $i_Count = 0
        $i_Countdown -= 1
        TraySetToolTip($i_Countdown & ": " & $a_FileRead[$i])
    Next
    ;---------------------------------------------------------------------------------------
    ;Schleife die wartet bis die letzt Abfrage abgearbeitet wurde. Wenn die Abfrage zulange dauert wird sie einfach beendet
    ;---------------------------------------------------------------------------------------
    Do
        Sleep(50)
        $i_ProcessStatus_Retry += 1
        $i_Count += 1
        If $i_Count > $i_ProcessCount Then
            $i_Count = 0
        EndIf
        If ProcessExists($aTable[$i_Count]) Then
            $i_ProcessStatus = 0
            ;FileWriteLine(@ScriptDir & "\processlog.txt", $i_ProcessStatus_Retry & " - " & $i & " - " & $i_ProcessStatus & @CRLF)
            If $i_ProcessStatus_Retry >= 3000 Then
                ProcessClose($aTable[$i_Count])
                $i_ProcessStatus_Retry = 0
                ContinueLoop
            Else
                $i_Count -= 1
                ContinueLoop
            EndIf
        Else
            $i_ProcessStatus = 1
            $i_ProcessStatus_Retry = 0
            ;FileWriteLine(@ScriptDir & "\processlog.txt", $i_ProcessStatus_Retry & " - " & $i & " - " & $i_ProcessStatus & @CRLF)
        EndIf
    Until $i_ProcessStatus = 1 And $i_Count = $i_ProcessCount
    ;---------------------------------------------------------------------------------------
    ;Ergebnise einlesen in eine Datei
    ;---------------------------------------------------------------------------------------
    $i_Countdown = UBound($a_FileRead) - 1
    Local $hOpenLFileOS = FileOpen($s_AusgabeDatei, $FO_Append)
    For $i = 1 To UBound($a_FileRead) - 1
        If FileExists(@ScriptDir & "\tempdir\" & $a_FileRead[$i] & ".txt") Then
            $aResult = FileReadToArray(@ScriptDir & "\tempdir\" & $a_FileRead[$i] & ".txt")
            If IsArray($aResult) Then
                For $ii = 0 To UBound($aResult) - 1
                    FileWriteLine($hOpenLFileOS, $aResult[$ii] & @CRLF)
                    ToolTip($i_Countdown & ": " & $a_FileRead[$i], 600, 1)
                Next
            EndIf
        EndIf
        $i_Countdown -= 1
    Next
    FileClose($hOpenLFileOS)
    Alles anzeigen

    Verarbeitundsprogramm:

    Spoiler anzeigen
    C
    #NoTrayIcon
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=action_go.ico
    #AutoIt3Wrapper_Change2CUI=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <FileConstants.au3>
    
    If $CMDLINE[0] = 1 Then
        Local $mem
        Local $sLogFileOS = @ScriptDir & "\tempdir\" & $CMDLINE[1] & ".txt"
        Local $sError1 = $CMDLINE[1] & ";Error 1;Host ist Offline" & @CRLF
        Local $sError2 = $CMDLINE[1] & ";Error 2;Host nicht erreichbar" & @CRLF
        Local $sError3 = $CMDLINE[1] & ";Error 3;Bad destination" & @CRLF
        Local $sError4 = $CMDLINE[1] & ";Error 4;Kein Zugriff" & @CRLF
        Local $hOpenLFileOS = FileOpen($sLogFileOS, $FO_Append)
    
        ConsoleWrite("Abfrage startet..." & @CRLF)
        $i_ping = Ping($CMDLINE[1], 500)
        If @error = 1 Then
            FileWriteLine($hOpenLFileOS, $sError1)
            ConsoleWrite($sError1)
        ElseIf @error = 2 Then
            FileWriteLine($hOpenLFileOS, $sError2)
            ConsoleWrite($sError2)
        ElseIf @error = 3 Then
            FileWriteLine($hOpenLFileOS, $sError3)
            ConsoleWrite($sError3)
        ElseIf @error = 4 Then
            FileWriteLine($hOpenLFileOS, $sError4)
            ConsoleWrite($sError4)
        Else
            $objWMIService = ObjGet("winmgmts:{impersonationLevel = impersonate}!\\" & $CMDLINE[1] & "\root\cimv2")
            If IsObj($objWMIService) Then
                $colItems = $objWMIService.ExecQuery("Select Capacity from Win32_PhysicalMemory", "WQL", 0x30)
                For $objItem In $colItems
                    $mem += $objItem.Capacity
                Next
                ConsoleWrite($CMDLINE[1] & " Arbeitsspeicher: " & Round($mem / 1024 ^ 3, 2) & " GB" & @CRLF)
                FileWriteLine($hOpenLFileOS, $CMDLINE[1] & ";Arbeitsspeicher:;" & Round($mem / 1024 ^ 3, 2) & ";GB" & @CRLF)
            Else
                ConsoleWrite($CMDLINE[1] & " Rechner nicht ABFRAGBAR" & @CRLF)
                FileWriteLine($hOpenLFileOS, $CMDLINE[1] & ";Rechner nicht ABFRAGBAR" & @CRLF)
            EndIf
        EndIf
        FileClose($hOpenLFileOS)
        ConsoleWrite("Abfrage ende!" & @CRLF)
    EndIf
    Alles anzeigen
  • Outlook Kalender aus Öffentliche Ordner den Favoriten hinzufügen Outlook 64 Bit Version

    • Concara
    • 25. März 2019 um 12:28

    Ich habe herausgefunden, dass es an der Officeversion liegt, weshalb das Script nicht funktioniert.

    Bei der 64 Bit Version hat die Funktion AddToPFFavorites einen Bug.

    Siehe https://officespdev.uservoice.com/forums/224641-…avorites-method

    Somit wird das nichts mit meinem Script.

    Schade aber danke für deine Hilfe Water!

    Edit:

    Ich kann es nicht lassen :)

    Habe noch etwas weiter im WWW gesucht und diesen Beitrag gefunden.

    https://social.msdn.microsoft.com/Forums/en-US/1…orum=outlookdev

    Water sagt dir RDOSession.Logon etwas?

    Kann man das mit deiner UDF (Script) verwenden?

    Und wenn ja wie?

  • Outlook Kalender aus Öffentliche Ordner den Favoriten hinzufügen Outlook 64 Bit Version

    • Concara
    • 22. März 2019 um 11:53

    Hallo Water!

    Leider funktioniert das nicht.

    Code
    #include <OutlookEx.au3>
    
    $oOutlook = _OL_Open()
    _OL_ErrorNotify(1)
    $Local_Folder = _OL_FolderAccess($oOutlook, "Öffentliche Ordner - Max.Mustermann@Musterland.at\Alle Öffentlichen Ordner\Mein Kalender", $olFolderCalendar)
    ConsoleWrite(@ScriptLineNumber - 1 & ": " & @error & "-" & @extended & @CRLF)
    $Local_Folder[1].AddToPFFavorites
    ConsoleWrite(@ScriptLineNumber - 1 & ": " & @error & "-" & @extended & @CRLF)

    Ich erhalte:

    Code
    COM Error Encountered in test2.au3
    OutlookEX UDF version = 1.3.5
    @AutoItVersion = 3.3.14.5
    @AutoItX64 = 0
    @Compiled = 0
    @OSArch = X64
    @OSVersion = WIN_7
    Scriptline = 7
    NumberHex = 80070057
    Number = -2147024809
    WinDescription = Falscher Parameter.
    Description = 
    Source = 
    HelpFile = 
    HelpContext = 
    LastDllError = 0
    ========================================================
    Alles anzeigen
  • Outlook Kalender aus Öffentliche Ordner den Favoriten hinzufügen Outlook 64 Bit Version

    • Concara
    • 22. März 2019 um 11:00

    Hallo Water!

    Ja dein Script funktioniert so. Aber das macht Outlook an und fürsich automatisch sobald man einen Ordner zu den Favoriten des öffentlichen Ordners hinzufügt.

    Zitat von water

    Falls ja, können wir in einem zweiten Schritt den oben beschriebenen händischen Prozess automatisieren.

    Genau das würde ich benötigen.

    Danke für deine Hilfe

  • Outlook Kalender aus Öffentliche Ordner den Favoriten hinzufügen Outlook 64 Bit Version

    • Concara
    • 21. März 2019 um 13:37

    Hallo Water!

    Zitat von water

    Hinweis: Es können nur öffentliche Ordner aus dem Favoriten Ordner dieses öffentlichen Ordners in die lokalen Favoriten übernommen werden.

    Das währe genau das was ich brauche, Favoriten von öffentliche Ordner im öffentlichen Ordner zu erstellen.

    Könntest du mir bitte dabei helfen!?

    Danke


    edit:

    Ich habe mich daran versucht aber bin bisher gescheitert.

    Spoiler anzeigen
    Code
    #include <OutlookEX.au3>
    ; https://docs.microsoft.com/en-us/office/vba/api/outlook.olgrouptype
    Global Const $olCustomFoldersGroup = 0 ; Identifies a user-defined navigation group, added using either the Outlook user interface or an add-in.
    Global Const $olFavoriteFoldersGroup = 4 ; Identifies the Favorite Folders navigation group. This navigation group exists only within the NavigationGroups collection of a MailModule object and cannot be created in or accessed from other modules.
    Global Const $olMyFoldersGroup = 1 ; Identifies a navigation group that, by default, contains any folders that are part of the local store.
    Global Const $olOtherFoldersGroup = 3 ; Identifies a navigation group that, by default, contains shared folders from sources other than that of other persons.
    Global Const $olPeopleFoldersGroup = 2 ; Identifies a navigation group that, by default, contains shared folders from other persons.
    Global Const $olReadOnlyGroup = 6 ; Identifies a navigation group that is, by default, read-only and no folders can be added or removed from that navigation group. This does not imply the folders themselves are read-only, and write access to the folders depends on how the folders are set up.
    Global Const $olRoomsGroup = 5 ; Identifies the Rooms navigation group in the Calendar navigation module.
    Global Const $olPublicFoldersAllPublicFolders = 18
    Global $oOL = _OL_Open()
    _OL_ErrorNotify(2)
    Global $aFolder = _OL_FolderAccess($oOL, "Öffentliche Ordner - Max.Mustermann@Musterland.at\Alle Öffentlichen Ordner\Mein Kalender")
    ConsoleWrite(@ScriptLineNumber - 1 & ": " & @error & "-" & @extended & @CRLF)
    $oNamespace = $oOL.Application.GetNamespace("MAPI")
    ConsoleWrite(@ScriptLineNumber - 1 & ": " & @error & "-" & @extended & @CRLF)
    $olkFolder = $oNamespace.GetDefaultFolder($olPublicFoldersAllPublicFolders)
    ConsoleWrite(@ScriptLineNumber - 1 & ": " & @error & "-" & @extended & @CRLF)
    $olkFolder = $olkFolder.Folders($aFolder[1])
    ConsoleWrite(@ScriptLineNumber - 1 & ": " & @error & "-" & @extended & @CRLF)
    $olkFolder.AddToPFFavorites
    ConsoleWrite(@ScriptLineNumber - 1 & ": " & @error & "-" & @extended & @CRLF)
    Alles anzeigen

    Dazu hatte ich diesen VB Code als Vorlage.

    Code
    Set olkApp = CreateObject("Outlook.Application")
    Set olkSes = olkApp.GetNameSpace("MAPI")
    Set olkFolder = olkSes.GetDefaultFolder(olPublicFoldersAllPublicFolders)
    Set olkFolder = olkFolder.Folders("Ordner1")
    olkFolder.AddToPFFavorites

    Quelle: https://administrator.de/forum/publicfo…ten-216099.html

    Den habe ich auch noch gefunden:

    Code
    Const olPublicFoldersAllPublicFolders = 18
    Dim olkApp, olkSes, olkFolder
    Set olkApp = CreateObject("Outlook.Application")
    Set olkSes = olkApp.GetNameSpace("MAPI")
    'Change the profile name on the next line'
    olkSes.Logon "Outlook"
    'Change the folder name on the next line.  Repeat the next two lines for each folder         
     you want to add.'
    Set olkFolder =     
    olkSes.GetDefaultFolder(olPublicFoldersAllPublicFolders).Folders("Public   
    calender").Folders("p cal")
    olkFolder.AddToPFFavorites
    'Change the folder name on the next line.  Repeat the next two lines for each folder     
    you want to add.'
    Set olkFolder = OpenOutlookFolder("Public Folders\Favorites\P cal")
    AddFavoriteFolder olkFolder
    olkSes.Logoff
    Set olkApp = Nothing
    Set olkSes = Nothing
    Set olkFolder = Nothing
    WScript.Quit
    
    Sub AddFavoriteFolder(olkFolder)
    ' Purpose: Add a folder to Favorite Folders.'
    ' Written: 5/2/2009'
    ' Author:  BlueDevilFan'
    ' Outlook: 2007'
    Const olModuleMail = 0
    Const olFavoriteFoldersGroup = 4
        Dim olkPane, olkModule, olkGroup
    Set olkPane = olkApp.ActiveExplorer.NavigationPane
    Set olkModule = olkPane.Modules.GetNavigationModule(olModuleMail)
    Set olkGroup =     
    olkModule.NavigationGroups.GetDefaultNavigationGroup(olFavoriteFoldersGroup)
    olkGroup.NavigationFolders.Add olkFolder
    Set olkPane = Nothing
    Set olkModule = Nothing
    Set olkGroup = Nothing
    End Sub
    
    Function OpenOutlookFolder(strFolderPath)
    ' Purpose: Opens an Outlook folder from a folder path.'
    ' Written: 4/24/2009'
    ' Author:  BlueDevilFan'
    ' Outlook: All versions'
    Dim arrFolders, varFolder, bolBeyondRoot
    On Error Resume Next
    If strFolderPath = "" Then
        Set OpenOutlookFolder = Nothing
    Else
        Do While Left(strFolderPath, 1) = "\"
            strFolderPath = Right(strFolderPath, Len(strFolderPath) - 1)
        Loop
        arrFolders = Split(strFolderPath, "\")
        For Each varFolder In arrFolders
            Select Case bolBeyondRoot
                Case False
                    Set OpenOutlookFolder = olkSes.Folders(varFolder)
                    bolBeyondRoot = True
                Case True
                    Set OpenOutlookFolder = OpenOutlookFolder.Folders(varFolder)
            End Select
            If Err.Number <> 0 Then
                Set OpenOutlookFolder = Nothing
                Exit For
            End If
        Next
    End If
    On Error GoTo 0
    End Function
    Alles anzeigen

    Quelle: https://stackoverflow.com/questions/7927…-folder-of-mail

  • Umbenannt: Installierte Drucker Remote auslesen

    • Concara
    • 20. März 2019 um 17:44

    Hi Lashandan!

    Sorry ich hatte etwas Stress in der Arbeit, deshalb erst jetzt meine Rückmeldung.

    Hier der Code der dir ID zum Username findet. Es ist eine wimc Abfrage. Leider Dauert die etwas.

    Spoiler anzeigen
    C
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=..\..\Program Files (x86)\AutoIt3\Aut2Exe\Icons\AutoIt_Old4.ico
    #AutoIt3Wrapper_UseX64=y
    #AutoIt3Wrapper_Res_requestedExecutionLevel=requireAdministrator
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <File.au3>
    #include <AutoItConstants.au3>
    Local $s_Computer = @ComputerName
    While 2
        Local $line = ""
        Local $commandline = ""
        Local $id = ""
        Local $s_clean_Name = ""
        Local $s_ProductName = ""
        Local $s_LastLoggedOnUser = ""
        Local $s_Printer = ""
        Local $standardprinter = ""
        Local $s_Print = ""
    
        $s_Computer = InputBox("PC Name", "Enter the Computername.", $s_Computer)
        If @error = 1 Then Exit
        If Not Ping($s_Computer, 500) Then ContinueLoop
        $s_ProductName = RegRead("\\" & $s_Computer & "\HKLM\Software\Microsoft\Windows NT\CurrentVersion\", "ProductName")
        If StringInStr($s_ProductName, "XP") Or StringInStr($s_ProductName, "2000") Or StringInStr($s_ProductName, "2003") Then
            $s_LastLoggedOnUser = RegRead("\\" & $s_Computer & "\HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\", "DefaultUserName")
        Else
            $s_LastLoggedOnUser = RegRead("\\" & $s_Computer & "\HKLM\Software\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\", "LastLoggedOnUser")
        EndIf
        $s_clean_Name = _Name_clean($s_LastLoggedOnUser)
        $s_clean_Name = StringLeft($s_clean_Name, 20)
    
        $line = ""
        $commandline = @ComSpec & ' /A /C "wmic useraccount where name="' & $s_clean_Name & '" get sid"'
        $id = Run($commandline, "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
        StdinWrite($id)
        While 1
            Local $stdoutread = StdoutRead($id)
            If @error Then ExitLoop
            If $stdoutread <> "" Then
                $line &= $stdoutread
            EndIf
        WEnd
        While 1
            Local $stderrread = StderrRead($id)
            If @error Then ExitLoop
            If $stderrread <> "" Then
                $line = ""
            EndIf
        WEnd
        If $line <> "" Then
            $line = StringStripWS($line, 7)
            $line = StringReplace($line, "SID ", "")
            If StringInStr($line, " ") Then
                $line = StringTrimRight($line, StringLen($line) - StringInStr($line, " "))
            EndIf
            $line = StringStripWS($line, 8)
        EndIf
    
        For $i = 1 To 100
            $reg = RegEnumVal("\\" & $s_Computer & "\" & "HKEY_USERS\" & $line & "\Software\Microsoft\Windows NT\CurrentVersion\Devices", $i)
            If @error = -1 Then ContinueLoop
            If $reg <> "" Then
                $s_Printer &= $reg & @CR
            EndIf
        Next
        $standardprinter = RegRead("\\" & $s_Computer & "\" & "HKEY_USERS\" & $line & "\Software\Microsoft\Windows NT\CurrentVersion\windows", "Device")
        $standardprinter = StringSplit($standardprinter, ",")
        $standardprinter = $standardprinter[1]
    
        $s_Print = "User: " & $s_clean_Name & @CR & "ID: " & $line & @CR & "PC: " & $s_Computer & @CR & "Standard: " & $standardprinter & @CR & "Drucker:" & @CR & $s_Printer
        MsgBox(0, "", $s_Print)
        $s_Print = StringReplace($s_Print, @CR, ";")
        _FileWriteLog(@ScriptDir & "\drucker.csv", $s_Print)
    WEnd
    Func _Name_clean($s_Name_dirty)
        Local $s_Name_clean
        If StringInStr($s_Name_dirty, "@") And StringInStr($s_Name_dirty, "\") Then
            $s_Name_clean = StringTrimLeft($s_Name_dirty, StringInStr($s_Name_dirty, "\"))
            $s_Name_clean = StringTrimRight($s_Name_clean, StringLen($s_Name_clean) - StringInStr($s_Name_clean, "@") + 1)
        ElseIf StringInStr($s_Name_dirty, "\") Then
            $s_Name_clean = StringTrimLeft($s_Name_dirty, StringInStr($s_Name_dirty, "\"))
        ElseIf StringInStr($s_Name_dirty, "@") Then
            $s_Name_clean = StringTrimRight($s_Name_dirty, StringLen($s_Name_dirty) - StringInStr($s_Name_dirty, "@") + 1)
        EndIf
        Return $s_Name_clean
    EndFunc   ;==>_Name_clean
    Alles anzeigen
  • Umbenannt: Installierte Drucker Remote auslesen

    • Concara
    • 18. März 2019 um 17:23

    Hallo Lashandan!

    Also ja es gibt noch den HKEY_USER Zweig in der Registry.

    Computer\HKEY_USERS\S-1-5-21-2320686219-2347650492-1140758951-1001\Software\Microsoft\Windows NT\CurrentVersion\Devices

    Ich habe in der Arbeit noch ein Script, das die Id zu einem User herausfindet. Ich werde morgen nachsehen, bin nicht mehr in der Arbeit.

    Ich nehme mal an du schreibst dieses Tool für eine kleine Firma.

    Deshalb habe ich auch das requireAdministrator eingefügt.

    Ist es eine AD Domaine?

    Eine Workgroup ?

    Ohne Administratorenrechte auf den Jeweiligen PCs kannst du rein garnichts auslesen, auch nicht mit den unten angegebenen VBS Scripts.

    Was genau willst du mit dem Programm eigentlich erreichen?

    Denn wenn es eine Firma ist, dann werdet ihr doch eher einen Printserver verwenden.

    Auf diesem werden dann die Standardeinstellungen vorgegeben.

    Wenn es eine AD Domaine ist, dann kann man auch per GPOs Einstellungen vornehmen.

    Oder habt ihr sehr viele Drucker die per USB am jeweiligen PC angeschlossen sind?

    Zum Managen der Drucker gibt es ab Windows 7 eventuell auch schon Vista diesen Ordner (C:\Windows\System32\Printing_Admin_Scripts\de-DE) mit VBS Scripten.

    Info unter https://docs.microsoft.com/de-de/windows-…ommands/prncnfg

  • Umbenannt: Installierte Drucker Remote auslesen

    • Concara
    • 15. März 2019 um 12:44

    So noch schnell vor dem Wochende!

    Hier meine quick and dirty Umsetzung.

    Der Code ist alles andere als getestet und eineiges ist noch zu machen.

    Aber es sollte eine Basis darstellen.

    Spoiler anzeigen
    C
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Res_Language=1031
    #AutoIt3Wrapper_Res_requestedExecutionLevel=requireAdministrator
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <GUIConstantsEx.au3>
    #include <MsgBoxConstants.au3>
    Local $computer = @ComputerName
    ;Global $computer = "WDEST"
    Local $hGUI = GUICreate("ServiceInfo", 550, 400)
    GUISetFont(9)
    $tab3 = GUICtrlCreateTab(-1, -1, 533, 350)
    $tab3a = GUICtrlCreateTabItem("Drucker")
    GUICtrlCreateLabel("Standarddrucker: ", 20, 60)
    $standardprinter = RegRead("\\" & @ComputerName & "\" & "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\windows", "Device")
    $standardprinter = StringSplit($standardprinter, ",")
    $standardprinter = $standardprinter[1]
    $l_standardprinter = GUICtrlCreateLabel($standardprinter, 220, 60)
    GUICtrlCreateLabel("Installierte Drucker: ", 20, 100)
    GUISetFont(9)
    $liste = GUICtrlCreateList("", 20, 120, 350, 200)
    $tabtestdruck = GUICtrlCreateButton("Testdruck", 400, 90, 100, 30)
    $tabdruckereinstellung = GUICtrlCreateButton("Einstellungen", 400, 140, 100, 30)
    $tabdruckereigenschaft = GUICtrlCreateButton("Eigenschaften", 400, 190, 100, 30)
    $tabdruckerfenster = GUICtrlCreateButton("Warteschlange", 400, 240, 100, 30)
    $tabdruckerordner = GUICtrlCreateButton("Druckerordner", 400, 290, 100, 30)
    $tabbeenden = GUICtrlCreateButton("Beenden", 164, 360, 100, 30)
    
    $sComputer = GUICtrlCreateInput($computer, 20, 25, 200, 30)
    $tabAbfragen = GUICtrlCreateButton("Abfragen", 220, 25, 100, 30)
    
    
    For $i = 1 To 1000
        $reg = RegEnumVal("\\" & @ComputerName & "\" & "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices", $i)
        If @error = -1 Then ExitLoop
        GUICtrlSetData($liste, $reg, $standardprinter)
    Next
    
    GUISetState(@SW_SHOW, $hGUI)
    
    Local $iMsg = 0
    While 1
        $iMsg = GUIGetMsg()
        Switch $iMsg
            Case $tabAbfragen
                printerInfo()
    
            Case $tabtestdruck
                Testdruck()
    
            Case $tabdruckereinstellung
                DruckerEinstellung()
    
            Case $tabdruckereigenschaft
                DruckerEigenschaft()
    
            Case $tabdruckerfenster
                DruckerFenster()
    
            Case $tabdruckerordner
                druckerordner()
    
            Case $tabbeenden
                ExitLoop
    
            Case $GUI_EVENT_CLOSE
                ;MsgBox($MB_SYSTEMMODAL, "GUI Event", "You selected the Close button. Exiting...")
                ExitLoop
        EndSwitch
    WEnd
    
    Func printerInfo()
        $standardprinter = RegRead("\\" & GUICtrlRead($sComputer) & "\" & "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\windows", "Device")
        $standardprinter = StringSplit($standardprinter, ",")
        $standardprinter = $standardprinter[1]
        GUICtrlSetData($liste, $l_standardprinter)
    
        For $i = 1 To 1000
            $reg = RegEnumVal("\\" & GUICtrlRead($sComputer) & "\" & "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices", $i)
            If @error = -1 Then ExitLoop
            GUICtrlSetData($liste, $reg, $standardprinter)
        Next
    EndFunc   ;==>printerInfo
    
    
    Func druckerordner()
        Run("rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL PrintersFolder")
    EndFunc   ;==>druckerordner
    Func Testdruck()
        $drucker = GUICtrlRead(8)
        $instring = StringInStr($drucker, "\\")
        If $drucker == "" Then
            MsgBox(16, "TestDruck", "Es wurde kein Drucker ausgewählt!")
        ElseIf $instring == 0 Then
            RunWait("rundll32 printui.dll,PrintUIEntry /n""\\" & GUICtrlRead($sComputer) & "\" & $drucker & """ /k")
            MsgBox(64, "TestDruck", "Der TestDruck wurde an den Drucker """ & $drucker & """ abgeschickt!" & @CRLF & "Bitte überprüfen Sie den Ausdruck.")
        Else
            RunWait("rundll32 printui.dll,PrintUIEntry /n " & $drucker & " /k")
            MsgBox(64, "TestDruck", "Der TestDruck wurde an den Drucker """ & $drucker & """ abgeschickt!" & @CRLF & "Bitte überprüfen Sie den Ausdruck.")
        EndIf
    EndFunc   ;==>Testdruck
    Func DruckerFenster()
        $drucker = GUICtrlRead(8)
        $instring = StringInStr($drucker, "\\")
        If $drucker == "" Then
            MsgBox(16, "Drucker-Warteschlange", "Es wurde kein Drucker ausgewählt!")
        ElseIf $instring = 0 Then
            RunWait("rundll32 printui.dll,PrintUIEntry /n""\\" & GUICtrlRead($sComputer) & "\" & $drucker & """ /o")
        Else
            RunWait("rundll32 printui.dll,PrintUIEntry /n " & $drucker & " /o")
        EndIf
    EndFunc   ;==>DruckerFenster
    Func DruckerEigenschaft()
        $drucker = GUICtrlRead(8)
        $instring = StringInStr($drucker, "\\")
        If $drucker == "" Then
            MsgBox(16, "Drucker-Eigenschaften", "Es wurde kein Drucker ausgewählt!")
        ElseIf $instring = 0 Then
            RunWait("rundll32 printui.dll,PrintUIEntry /n""\\" & GUICtrlRead($sComputer) & "\" & $drucker & """ /p")
        Else
            RunWait("rundll32 printui.dll,PrintUIEntry /n " & $drucker & " /p")
        EndIf
    EndFunc   ;==>DruckerEigenschaft
    Func DruckerEinstellung()
        $drucker = GUICtrlRead(8)
        $instring = StringInStr($drucker, "\\")
        If $drucker == "" Then
            MsgBox(16, "Drucker-Einstellungen", "Es wurde kein Drucker ausgewählt!")
        ElseIf $instring = 0 Then
            RunWait("rundll32 printui.dll,PrintUIEntry /n""\\" & GUICtrlRead($sComputer) & "\" & $drucker & """ /e")
        Else
            RunWait("rundll32 printui.dll,PrintUIEntry /n " & $drucker & " /e")
        EndIf
    EndFunc   ;==>DruckerEinstellung
    Func Abfragen()
        ;MsgBox(0, "", GUICtrlRead($sComputer))
        printerInfo()
    EndFunc   ;==>Abfragen
    Func CLOSEClicked()
        Exit
    EndFunc   ;==>CLOSEClicked
    Func Beenden()
        Exit
    EndFunc   ;==>Beenden
    
    GUIDelete($hGUI)
    Alles anzeigen

    edit : Was ich noch schreiben wollte ist, dass du HKEY_CURRENT_USER zwar remote auslesen kannst, aber soweit ich weiß ist das nicht der User der gerade an der Maschine angemeldet ist, sondern der mit dem du das Script aufgerufen hast.

  • Umbenannt: Installierte Drucker Remote auslesen

    • Concara
    • 15. März 2019 um 11:16

    Hallo Lashandan!

    Du musst dir in der Hilf noch einmal die Funktionsweise einer Gui anschauen.

    Und ich nenne es mal den eigentlichen Programm Code mit Funktionen zu mischen ist sehr unübersichtlich.

    Standard ist es die Funktionen unterhalb des Hauptcodes zu erstellen.

    Wenn du SciTE verwendest, dann bitte verwende das Tool --> Tidy Autoit Source.

    Dieses Tool bringt deinen Code in eine übersichtlichere Form.

    Das hilft ungemein.

    Dein Programm wird einmal abgearbeitet und bleibt dann in der While Schleife hängen. edit: das ist nicht ganz richtig, aber du verwendest den GUIOnEventMode und das ist soweit ich es beurteilen kann in diesem Fall nicht der richtige.

    Deshalb der Hinweis dir noch einmal die Funktionsweise einer Gui anzusehen.

  • Outlook Kalender aus Öffentliche Ordner den Favoriten hinzufügen Outlook 64 Bit Version

    • Concara
    • 14. März 2019 um 13:13

    Hallo Water!

    Zum Testen habe ich diese Version deines Scripts benützt.

    Spoiler anzeigen
    C
    #include <OutlookEX.au3>
    _OL_ErrorNotify(1)
    ; https://docs.microsoft.com/en-us/office/vba/api/outlook.olgrouptype
    Global Const $olCustomFoldersGroup = 0 ; Identifies a user-defined navigation group, added using either the Outlook user interface or an add-in.
    Global Const $olFavoriteFoldersGroup = 4 ; Identifies the Favorite Folders navigation group. This navigation group exists only within the NavigationGroups collection of a MailModule object and cannot be created in or accessed from other modules.
    Global Const $olMyFoldersGroup = 1 ; Identifies a navigation group that, by default, contains any folders that are part of the local store.
    Global Const $olOtherFoldersGroup = 3 ; Identifies a navigation group that, by default, contains shared folders from sources other than that of other persons.
    Global Const $olPeopleFoldersGroup = 2 ; Identifies a navigation group that, by default, contains shared folders from other persons.
    Global Const $olReadOnlyGroup = 6 ; Identifies a navigation group that is, by default, read-only and no folders can be added or removed from that navigation group. This does not imply the folders themselves are read-only, and write access to the folders depends on how the folders are set up.
    Global Const $olRoomsGroup = 5 ; Identifies the Rooms navigation group in the Calendar navigation module.
    Local $oOL = _OL_Open()
    $oNamespace = $oOL.Application.GetNamespace("MAPI")
    ConsoleWrite(@ScriptLineNumber - 1 & ": " & @error & "-" & @extended & " $oOL.Application.GetNamespace" & @CRLF & "========================================================" & @CRLF)
    $oPane = $oOL.Application.ActiveExplorer.NavigationPane
    ConsoleWrite(@ScriptLineNumber - 1 & ": " & @error & "-" & @extended & " $oOL.Application.ActiveExplorer.NavigationPane " & @CRLF & "========================================================" & @CRLF)
    $oModule = $oPane.Modules.GetNavigationModule($olModuleCalendar) ;$olModuleMail$olModuleCalendar
    ConsoleWrite(@ScriptLineNumber - 1 & ": " & @error & "-" & @extended & " $oPane.Modules.GetNavigationModule($olModuleCalendar)" & @CRLF & "========================================================" & @CRLF)
    $oGroup = $oModule.NavigationGroups.GetDefaultNavigationGroup($olFavoriteFoldersGroup)
    ConsoleWrite(@ScriptLineNumber - 1 & ": " & @error & "-" & @extended & " $oModule.NavigationGroups.GetDefaultNavigationGroup($olFavoriteFoldersGroup)" & @CRLF & "========================================================" & @CRLF)
    $aFolder = _OL_FolderAccess($oOL, "Öffentliche Ordner - Max.Mustermann@Musterland.com\Alle Öffentlichen Ordner\Mein Kalender") ;Max.Mustermann@Musterland.com\Kalender
    ConsoleWrite(@ScriptLineNumber - 1 & ": " & @error & "-" & @extended & ' _OL_FolderAccess($oOL, "Öffentliche Ordner - Max.Mustermann@Musterland.com\Alle Öffentlichen Ordner\Mein Kalender")' & @CRLF & "========================================================" & @CRLF) ;Mein Kalender
    $oNavFolder = $oGroup.NavigationFolders()
    ConsoleWrite(@ScriptLineNumber - 1 & ": " & @error & "-" & @extended & " $oGroup.NavigationFolders()" & @CRLF & "========================================================" & @CRLF)
    $oNavFolder.Add($aFolder[1])
    ConsoleWrite(@ScriptLineNumber - 1 & ": " & @error & "-" & @extended & " $oNavFolder.Add($aFolder[1])" & @CRLF & "========================================================" & @CRLF)
    Alles anzeigen

    Ergebnis:

    Spoiler anzeigen
    Code
    12: 0-1 $oOL.Application.GetNamespace
    ========================================================
    14: 0-0 $oOL.Application.ActiveExplorer.NavigationPane 
    ========================================================
    16: 0-0 $oPane.Modules.GetNavigationModule($olModuleCalendar)
    ========================================================
    COM Error Encountered in Outlook_Favoriten_hinzufuegen.au3
    OutlookEX UDF version = 1.3.4.1
    @AutoItVersion = 3.3.14.5
    @AutoItX64 = 0
    @Compiled = 0
    @OSArch = X64
    @OSVersion = WIN_7
    Scriptline = 18
    NumberHex = 80070057
    Number = -2147024809
    WinDescription = Falscher Parameter.
    Description = 
    Source = 
    HelpFile = 
    HelpContext = 
    LastDllError = 0
    ========================================================
    18: -2147024809-0 $oModule.NavigationGroups.GetDefaultNavigationGroup($olFavoriteFoldersGroup)
    ========================================================
    20: 0-0 _OL_FolderAccess($oOL, "Öffentliche Ordner - Max.Mustermann@Musterland.com\Alle Öffentlichen Ordner\Mein Kalender")
    ========================================================
    COM Error Encountered in Outlook_Favoriten_hinzufuegen.au3
    OutlookEX UDF version = 1.3.4.1
    @AutoItVersion = 3.3.14.5
    @AutoItX64 = 0
    @Compiled = 0
    @OSArch = X64
    @OSVersion = WIN_7
    Scriptline = 22
    NumberHex = 000000A9
    Number = 169
    WinDescription = Variable must be of type 'Object'.
    Description = 
    Source = 
    HelpFile = 
    HelpContext = 
    LastDllError = 0
    ========================================================
    22: 1-0 $oGroup.NavigationFolders()
    ========================================================
    COM Error Encountered in Outlook_Favoriten_hinzufuegen.au3
    OutlookEX UDF version = 1.3.4.1
    @AutoItVersion = 3.3.14.5
    @AutoItX64 = 0
    @Compiled = 0
    @OSArch = X64
    @OSVersion = WIN_7
    Scriptline = 24
    NumberHex = 000000A9
    Number = 169
    WinDescription = Variable must be of type 'Object'.
    Description = 
    Source = 
    HelpFile = 
    HelpContext = 
    LastDllError = 0
    ========================================================
    24: 1-0 $oNavFolder.Add($aFolder[1])
    ========================================================
    Alles anzeigen
  • Outlook Kalender aus Öffentliche Ordner den Favoriten hinzufügen Outlook 64 Bit Version

    • Concara
    • 13. März 2019 um 09:30

    Hallo Water!

    Ich habe es noch einmal getestet.

    Mit Mailordner funktioniert es solange es ein lokaler Mailordner ist und keiner der im öffentlichen Ordner vorhanden ist.

    Verwendet man Kalender funktioniert es weder mit lokalen Kalendern noch mit denen die im öffentlichen Ordner vorhanden sind.

    Hier die Rückgabewerte von Consolewrite, wenn man einen Kalender aus dem öffentlichen Ordner verwendet:

    Code
    0-1 $oOL.Application.GetNamespace
    0-0 $oOL.Application.ActiveExplorer.NavigationPane
    0-0 $oPane.Modules.GetNavigationModule($olModuleCalendar)
    -2147024809-0 $oModule.NavigationGroups.GetDefaultNavigationGroup($olFavoriteFoldersGroup)
    0-0 _OL_FolderAccess($oOL, "Öffentliche Ordner - Max.Mustermann@Musterland.com\Alle Öffentlichen Ordner\Mein Kalender")
    1-0 $oGroup.NavigationFolders()
    1-0 $oNavFolder.Add($aFolder[1])
  • Outlook Kalender aus Öffentliche Ordner den Favoriten hinzufügen Outlook 64 Bit Version

    • Concara
    • 12. März 2019 um 13:55

    Hallo!

    Ich richte mich mit diesem Post eigentlich direkt an Water, bin aber über jede Hilfe dankbar.

    Ich möchte per Script einen öffentlichen Kalender den Favoriten hinzufügen, damit der Kalender direkt im Outlook unter Kalender aufscheint.

    Dazu habe ich das Web durchsucht und bin auf einen Forumseintrag von Water im englischen Forum gestoßen.

    Spoiler anzeigen

    Dort hat er geschrieben


    Posted February 23, 2017


    There will be a _OL_NavigationFolderSet in the - hopefully - near future

    water

    • ?
    • [Blockierte Grafik: https://www.autoitscript.com/forum/uploads/monthly_2018_12/5c1f96ccbb10a_Adi_Bachinger_Eiswrfel.thumb.jpg.1196e2eeb95aa8e87ba2201da7b75dcc.jpg]
    • MVPs
    • [Blockierte Grafik: https://www.autoitscript.com/forum/uploads/monthly_2015_07/team_mvp.png.06ed2c34c6eb9c9c23af5b7693950853.png]
    • 1,996
    • 23,957 posts

    Leider ist diese Funktion (_OL_NavigationFolderSet) noch nicht in der OutlookEX integriert.

    Water hat dem Suchenden im englischen Forum diesen Code gegeben:

    C
    #include "..\OutlookEX.au3"
    $oNamespace = $oOL.Application.GetNamespace("MAPI")
    $oPane = $oOL.Application.ActiveExplorer.NavigationPane
    $oModule = $oPane.Modules.GetNavigationModule(0)
    $oGroup = $oModule.NavigationGroups.GetDefaultNavigationGroup(4)
    $aFolder = _OL_FolderAccess($oOL, "*\Outlook-UDF-Test")
    $oNavFolder = $oGroup.NavigationFolders()
    $oNavFolder.Add($aFolder[1])

    Je nachdem was ich bei GetNavigationModule und GetDefaultNavigationGroup eintrage erhalte ich entweder @error 1 oder -2147352567

    Hier noch mein Testcode:

    Spoiler anzeigen
    C
    #include <OutlookEX.au3>
    
    ; *****************************************************************************
    ; Create test environment
    ; *****************************************************************************
    Global $oOutlook = _OL_Open()
    If @error <> 0 Then Exit MsgBox(16, "OutlookEX UDF", "Error creating a connection to Outlook. @error = " & @error & ", @extended = " & @extended)
    
    ; *****************************************************************************
    ; Example 1
    ; Get a list of all groups in the mail navigation module
    ; *****************************************************************************
    Global $aModules = _OL_NavigationFolderGet($oOutlook, $olModuleCalendar)
    If @error <> 0 Then Exit MsgBox(16, "OutlookEX UDF: _OL_NavigationFolderGet Example Script", "Error getting groups of the mail navigation module. @error = " & @error & ", @extended = " & @extended)
    _ArrayDisplay($aModules, "OutlookEX UDF: _OL_NavigationFolderGet Example Script", "", 0, "|", "Navigation group|Folder name|Folder path|IsSelected?|IsRemovable?|IsSideBySide?|Position")
    _OL_Close($oOutlook)
    
    _OL_ErrorNotify(3)
    ;#include "..\OutlookEX.au3"
    Global $oOL = _OL_Open()
    
    $oNamespace = $oOL.Application.GetNamespace("MAPI")
    $oPane = $oOL.Application.ActiveExplorer.NavigationPane
    $oModule = $oPane.Modules.GetNavigationModule(1)
    $oGroup = $oModule.NavigationGroups.GetDefaultNavigationGroup(2)
    $aFolder = _OL_FolderAccess($oOL, "Öffentliche Ordner - Max.Mustermann@Musterland.com\Alle Öffentlichen Ordner\Mein Kalender")
    _ArrayDisplay($aFolder)
    $oNavFolder = $oGroup.NavigationFolders()
    $oNavFolder.Add($aFolder[1])
    If @error Then ConsoleWrite(@error & @CR)
    
    _OL_Close($oOL)
    Alles anzeigen

    Danke für eure Hilfe.

  • Problem mit OutlookEX - Kalenderdaten sollen innerhalb eines bestimmten Zeitraums in einen anderen Kalender kopiert werden

    • Concara
    • 4. März 2019 um 17:00

    @Musashi Danke für den Hinweis.

    water

    Danke für die Unterstützung!

    Ich habe mein Script, nach ein paar weiteren Schwierigkeiten, fertig stellen können und es funktioniert bis her stabil.

  • Problem mit OutlookEX - Kalenderdaten sollen innerhalb eines bestimmten Zeitraums in einen anderen Kalender kopiert werden

    • Concara
    • 1. März 2019 um 12:26

    Hallo Water!

    Ich habe es geteste und es funktioniert einwandfrei, wenn man diese Zeile auskommentiert.

    Array ist vollständig auch wenn ich meinen Exchangekalender verwende.

    Zur _OL_ItemCopy:

    Deine Funktion erstellt ja vom Ursprünglichen Eintrag eine Kopie im Quellordner und versucht dann diese Kopie in den Zielordner zu verschieben.

    Wenn kein Fehler auftritt alles ok.

    So jetzt schafft es die verschieben Funktion (_OL_ItemMove) nicht diesen kopierten Eintrag in den Zielordner zu verschieben.

    Ergebnis Original Eintrag plus kopierten Eintrag sind im Quellordner vorhanden.

    So wenn man das noch mal ausführen würde und es wieder nicht funktioniert erhält man vier Einträge. (exponential)

    Deshalb meine Anregung bei einem Fehler der verschieben Funktion die Kopie des Eintrags im Quellverzeichnis zu löschen.

    Der Ursprüngliche Eintrag ist dann ja immer noch vorhanden.

    In der Funktion steht es ja als Kommentar ja auch drinnen.

    ; Move the copied item to another folder


    Code
    Func _OL_ItemCopy($oOL, $vItem, $sStoreID = Default, $vTargetFolder = "")
    
        If Not IsObj($vItem) Then
            If StringStripWS($vItem, 3) = "" Then Return SetError(1, 0, 0)
            $vItem = $oOL.Session.GetItemFromID($vItem, $sStoreID)
            If @error Then Return SetError(1, @error, 0)
        EndIf
        Local $oSourceFolder = $vItem.Parent
        If Not IsObj($vTargetFolder) Then
            If StringStripWS($vTargetFolder, 3) = "" Or $vTargetFolder = Default Then
                $vTargetFolder = $oSourceFolder
            Else
                Local $aTemp = _OL_FolderAccess($oOL, $vTargetFolder)
                If @error Then Return SetError(2, @error, 0)
                $vTargetFolder = $aTemp[1]
            EndIf
        EndIf
        If $oSourceFolder.DefaultItemType <> $vTargetFolder.DefaultItemType Then Return SetError(3, 0, 0)
        Local $vItemCopied = $vItem.Copy
        $vItemCopied.Save()
        ; Move the copied item to another folder
        If $oSourceFolder <> $vTargetFolder Then
            $vItemCopied = _OL_ItemMove($oOL, $vItemCopied, $sStoreID, $vTargetFolder)
            If @error Then Return SetError(4, @error, 0)
        EndIf
        Return $vItemCopied
    
    EndFunc   ;==>_OL_ItemCopy
    Alles anzeigen

    P.S. wie kann man syntax highlighting im Forum erstellen? Mit Code funktioniert das nicht!?

  • Problem mit OutlookEX - Kalenderdaten sollen innerhalb eines bestimmten Zeitraums in einen anderen Kalender kopiert werden

    • Concara
    • 28. Februar 2019 um 17:00

    Hallo Water!

    Danke für die Rückmeldung!

    Wenn man im Script _OL_ErrorNotify(3) setzt, erhält man auch den Fehler warum das passiert, nur habe ich noch keine Lösung gefunden es zu umgehen.

    Spoiler anzeigen

    ========================================================

    2019.02.28 16:15:45

    -------------------

    COM Error Encountered in Kalenderabfragen_test.au3

    OutlookEX UDF version = 1.3.4.1

    @AutoItVersion = 3.3.14.5

    @AutoItX64 = 0

    @Compiled = 0

    @OSArch = X64

    @OSVersion = WIN_7

    Scriptline = 623

    NumberHex = 80020009

    Number = -2147352567

    WinDescription = Ausnahmefehler aufgetreten.

    Description = Die Anzahl der Elemente, die gleichzeitig geöffnet werden können, wurde vom Serveradministrator begrenzt. Schließen Sie zunächst geöffnete Nachrichten, oder entfernen Sie Anhänge und Bilder von ungesendeten Nachrichten, die Sie gerade verfassen.

    Source = Microsoft Outlook

    HelpFile =

    HelpContext = 0

    LastDllError = 0

    ========================================================

    Diese Verhalten ist also im Zusammenspiel mit einem EXchangeserver "normal".

    Verwendet man einen lokalen Kalender (PST File) dann ist da Array vollständig.

    Mein Lösungsansatz war dann dass ich nicht so viele Kalenderelmente auf einmal auslese, dazu habe ich den Abfragezeitraum in meherer Teile unterteilt.

    Aber leider geht dort beim kopieren trotzdem etwas nicht in Ordnung.

    Was sehr stöhrend bei deiner kopieren UDF (_OL_ItemCopy) ist, dass wenn das Object nicht in den Zielkalender verschoben werden kann, es trotzdem im Quellkalender verbleibt. (doppelte Einträge)

    Hier ein Vorschlag wie man diese eventuell anpassen kann. Die Zeilen die ich verändert habe, habe ich mit einem ? am Anfang der Zeile markiert.

    Spoiler anzeigen
    Code
    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _OL_ItemCopy
    ; Description ...: Copies an item (contact, appointment ...) using the specified EntryID and StoreID.
    ; Syntax.........: _OL_ItemCopy($oOL, $vItem[, $sStoreID = Default[, $vTargetFolder = ""]])
    ; Parameters ....: $oOL           - Outlook object returned by a preceding call to _OL_Open()
    ;                  $vItem         - EntryID or object of the item to copy
    ;                  $sStoreID      - Optional: StoreID of the source store as returned by _OL_FolderAccess (default = users mailbox)
    ;                  $vTargetFolder - Optional: Target folder (object) as returned by _OL_FolderAccess or full name of folder
    ; Return values .: Success - Item object of the copied item
    ;                  Failure - Returns 0 and sets @error:
    ;                  |1 - No or an invalid item has been specified
    ;                  |2 - Error accessing the specified target folder. See @extended for errorcode returned by _OL_FolderAccess
    ;                  |3 - Source and target folder are of different types
    ?;                  |4 - Error returned by _OL_ItemDelete. @extended is set to the error as returned by _OL_ItemDelete
    ?;                  |5 - Error moving the copied item to the target folder. @extended is set to the COM error
    ; Author ........: water
    ; Modified ......:
    ; Remarks .......: If $vTargetFolder is omitted the copy is created in the same folder as the source item
    ; Related .......:
    ; Link ..........:
    ; Example .......: Yes
    ; ===============================================================================================================================
    Func _OL_ItemCopy($oOL, $vItem, $sStoreID = Default, $vTargetFolder = "")
    
        If Not IsObj($vItem) Then
            If StringStripWS($vItem, 3) = "" Then Return SetError(1, 0, 0)
            $vItem = $oOL.Session.GetItemFromID($vItem, $sStoreID)
            If @error Then Return SetError(1, @error, 0)
        EndIf
        Local $oSourceFolder = $vItem.Parent
        If Not IsObj($vTargetFolder) Then
            If StringStripWS($vTargetFolder, 3) = "" Or $vTargetFolder = Default Then
                $vTargetFolder = $oSourceFolder
            Else
                Local $aTemp = _OL_FolderAccess($oOL, $vTargetFolder)
                If @error Then Return SetError(2, @error, 0)
                $vTargetFolder = $aTemp[1]
            EndIf
        EndIf
        If $oSourceFolder.DefaultItemType <> $vTargetFolder.DefaultItemType Then Return SetError(3, 0, 0)
        Local $vItemCopied = $vItem.Copy
        $vItemCopied.Save()
        ; Move the copied item to another folder
        If $oSourceFolder <> $vTargetFolder Then
            $vItemCopied = _OL_ItemMove($oOL, $vItemCopied, $sStoreID, $vTargetFolder)
            If @error Then
    ?            Local $sError = @error
    ?            _OL_ItemDelete($oOL, $vItemCopied, $sStoreID, True)
    ?            If @error Then Return SetError(4, @error, 0)
    ?            Return SetError(5, $sError, 0)
    ?        EndIf
        EndIf
        Return $vItemCopied
    
    EndFunc   ;==>_OL_ItemCopy
    Alles anzeigen
  • Problem mit OutlookEX - Kalenderdaten sollen innerhalb eines bestimmten Zeitraums in einen anderen Kalender kopiert werden

    • Concara
    • 12. Februar 2019 um 11:53

    Hi!

    So jetzt wird es mir zu Bund. Ich kann dem Verhalten meines Systems nicht mehr folgen.

    Ich habe die Abfrage ob Col1 ein Objekt ist eingbaut und bei jedem Arrayeintrag ist ein Wahr herausgekommen.

    Also gut statt der EntryId wird jetzt das Objekt an die Kopierfunktion übergeben.

    Ergebins die drei Kalendereinträge die bis jetzt schon nicht kopiert wurden, wurden auch so nicht kopiert.

    Fehler 3 Source and target folder are of different types, kann nicht sein aber ok.

    Dann dachte ich mir "alles neu", Kalendereinträge im Zielordner gelöscht und von vorne.

    Gleicher Zeitraum eingestellt und es wurde rein garnichts kopiert, zumindest nicht in den Zielkalender.

    Im Quellkalender wurden immer mehr Einträge erstellt. Fehler 4 erweitert 6 (4 - Error moving the copied item to the target folder. @extended is set to the COM error)

    Einträge wo die EntryId nicht ausgelesen wurde erhalten den Fehler 3 (Source and target folder are of different types)

    Gut dann halt Zielkalender komplett gelöscht und wieder neu angelegt.

    Gleiches Verhalten.

    Einen Schritt zurück Backup in den Quellkalender eingespielt.

    Die EntryId wird wieder an die Kopierfunktion übergeben.

    Aber die Kalendereinträge werden wieder "nur" im Quellkalender erstellt und können nicht in den Zielkalender verschoben werden. (Fehler 4)

    Was gestern noch funktioniert hat geht jetzt nicht mehr!?

    Hat eventull jemand einen anderen Weg wie ich Kalenderdaten von einem Kalender in einen anderen Kalender bekomme, innerhalb eines bestimmten Zeitraums?

    Also Eingabe eines Von- und Bisdatum und dann kopieren.

    Es soll für einen Endanwender möglichst einfach sein.

  • Problem mit OutlookEX - Kalenderdaten sollen innerhalb eines bestimmten Zeitraums in einen anderen Kalender kopiert werden

    • Concara
    • 11. Februar 2019 um 12:45

    Hallo Water!

    Wie geschrieben verwende ich Outlook 2010 hier die genaue Versionsnummer: 14.0.7227.5000 SP2 MSO 14.0.7228.5001

    es ist eine 64 Bit Version. Verbunden bin ich mit einem Exchange 2010 im Online Modus (kein Cache).

    Die Anhänge zeigen Problem 2.)

    Beim ersten Versuch ist der Zeitraum 30.12.2018 bis 30.09.2020 gewählt und ab Row 141 wird die EntryId nicht mehr ausgelesen!? (Fehler_beim_Auslesen.jpg)

    Gebe ich dann den Zeitraum ab dem der Fehler auftritt ein 10.06.2020 bis 30.09.2020 wird die EntryId ausgelesen.

    (Der_Zeitraum_ohne_Fehler.jpg)


    Fehler_beim_Auslesen.jpgDer_Zeitraum_ohne_Fehler.jpg

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™