Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[vbs] AutoArchive: deze instellingen nu op alle mappen toepa

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo!


Ons upper-management heeft, tegen ons advies in, besloten om voor alle gebruikers op het netwerk een archiefbestand aan te maken.
Deze moet op een NAS geplaatst worden.

Nu heb ik het wel voor elkaar gekregen om de autoarchive locatie in te stellen, echter worden nog niet alle mappen meegenomen in het archief.
In Outlook 2013 is er een optie, deze heet "Deze instellingen nu op alle mappen toepassen". Deze staat onder "Bestand -> Opties -> Geavanceerd -> Instellingen voor AutoArchiveren..."

Ik ben nu op zoek naar een manier om het voor elkaar te krijgen dat dit automatisch gebeurd, het liefst via VBS zodat ik het als loginscript kan gebruiken.

Kan iemand mij hierbij helpen?


Alvast bedankt!
MooFz

  • Tribits
  • Registratie: Augustus 2011
  • Laatst online: 02:56

Tribits

Onkruid vergaat niet

Dat moet volgens mij wel mogelijk zijn via VBS, helaas is de API om deze settings aan te passen niet echt geweldig gedocumenteerd.

Ik heb wel een programmeervoorbeeld in VBA gevonden om de autoarchive settings aan te passen. In principe is PR_AGING_DEFAULT de enige settings die voor jou van belang is. De waarde 3 voor deze setting komt overeen met default autoarchive locatie. Ik heb er zelf even mee zitten spelen maar kreeg het idee dat de code niet helemaal lekker werkt omdat deze instelling alleen goed over wordt genomen als de rest van de settings voor de folder ook over wordt genomen. Vandaar de code als volgt aangepast:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Function ChangeAgingProperties(oFolder As outlook.Folder, _
                                AgeFolder As Boolean, DeleteItems As Boolean, _
                                FileName As String, Granularity As Integer, _
                                Period As Integer, Default As Integer) As Boolean
    
    Dim oStorage As StorageItem
    Dim oPA As PropertyAccessor
    
    Debug.Print "Updating " + oFolder.Name
    
    'Valid Period 1-999
    'Valid Granularity 0=Months, 1=Weeks, 2=Days
    If (oFolder Is Nothing) Or _
    (Granularity < 0 Or Granularity > 2) Or _
    (Period < 1 Or Period > 999) Then
        ChangeAgingProperties = False
    End If
        
    On Error GoTo Aging_ErrTrap
    
    'Create or get solution storage in given folder by message class
    Set oStorage = oFolder.GetStorage( _
        "IPC.MS.Outlook.AgingProperties", olIdentifyByMessageClass)
    Set oPA = oStorage.PropertyAccessor
    
    oPA.SetProperty strPR_AGING_DEFAULT, Default
    If Not (AgeFolder) And Default = 0 Then
        oPA.SetProperty strPR_AGING_AGE_FOLDER, False
    Else
        'Set the 5 aging properties in the solution storage
        oPA.SetProperty strPR_AGING_AGE_FOLDER, True
        oPA.SetProperty strPR_AGING_GRANULARITY, Granularity
        oPA.SetProperty strPR_AGING_DELETE_ITEMS, DeleteItems
        oPA.SetProperty strPR_AGING_PERIOD, Period
        If FileName <> "" Then
            oPA.SetProperty strPR_AGING_FILE_NAME_AFTER9, FileName
        End If
    End If
    'Save changes as hidden messages to the associated portion of the folder
    oStorage.Save
    ChangeAgingProperties = True
    Exit Function
    
Aging_ErrTrap:
    Debug.Print Err.Number, Err.Description
    ChangeAgingProperties = False
End Function


Verder UpdateFolderTreeArchiveSettings aangepast om de settings van de InBox over te nemen en deze op alle folders (ook die niet onder de InBox) over te nemen. Je moet zelf maar bepalen of dat inderdaad de bedoeling is of dat je alleen de instellingen van de folders onder de InBox wilt overschrijven.

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub UpdateFolderTreeArchiveSettings(o As outlook.Application)
    Dim ns As Namespace
    Dim oRootFolder As Folder
    Dim oDefaultFolder As Folder
    
    Dim AgeFolder As Boolean, DeleteItems As Boolean, _
        FileName As String, Granularity As Integer, _
        Period As Integer, Default As Integer
    
    Set ns = o.GetNamespace("MAPI")
    'Set oRootFolder = ns.PickFolder
    Set oDefaultFolder = ns.GetDefaultFolder(outlook.olFolderInbox) ' Get default settings from InBox
    Dim getCurrent As Boolean
    getCurrent = GetCurrentAgingProperties(oDefaultFolder, AgeFolder, DeleteItems, FileName, Granularity, Period, Default)
    If getCurrent Then
        Set oRootFolder = ns.GetDefaultFolder(olFolderInbox).Parent ' Use parent to get to root of pst
        RecursivelyApplyChanges oRootFolder, AgeFolder, DeleteItems, FileName, Granularity, Period, Default
    End If
End Sub


Tevens nog een VBS voorbeeld gevonden. Het probleem dat daarin omschreven wordt trad bij mij in eerste instantie ook op maar later kon ik het niet meer reproduceren.

Ik denk in ieder geval dat dit je wel een aardig eind op weg moet helpen.

Master of questionable victories and sheer glorious defeats


Verwijderd

Topicstarter
Tribits, bedankt voor je reactie!

Dus wat dit in princiepe doet is:
Het zet een nieuw ageing-record voor de Inbox, vervolgens neemt hij deze over op de onderliggende mappen?
Als het werkt en de gebruiker hoeft niets te doen, ben ik helemaal blij! :)

Morgen maar even testen.

  • Tribits
  • Registratie: Augustus 2011
  • Laatst online: 02:56

Tribits

Onkruid vergaat niet

Verwijderd schreef op dinsdag 03 juni 2014 @ 22:41:
Tribits, bedankt voor je reactie!

Dus wat dit in princiepe doet is:
Het zet een nieuw ageing-record voor de Inbox, vervolgens neemt hij deze over op de onderliggende mappen?
Als het werkt en de gebruiker hoeft niets te doen, ben ik helemaal blij! :)

Morgen maar even testen.
Het originele voorbeeld waar ik naar link geeft een pop-up waarin je een folder selecteert. De autoarchive instellingen van de geselecteerde folder worden daarna naar alle onderliggende folders gekopieerd.

Met de aanpassingen in mijn eerdere post wordt in plaats van de popup (regel 11 van UpdateFolderTreeArchiveSettings) de InBox genomen als default en gekopieerd naar alle folders binnen het PST bestand. Je kan eventueel ook de aanroep op regel 14 naar GetCurrentAgingProperties vervangen door een paar regels waarin je zelf de default instellingen definieert.

Let wel op dat het instellen van autoarchiveren op alle folders in een pst bestand ook geldt voor verzonden items en dergelijke.

Dat VB Script waar ik eerder naar linkte stelt overigens niet zoveel voor, het is niet compleet maar geeft wel een idee van hoe iets dergelijks in VBS werkt. Conversie van VBA naar VBS is niet zo gek ingewikkeld voor dit voorbeeld. Voornamelijk even opletten dat je de benodigde constanten uit de Outlook typelib definieert en daarnaast is de error handling in VBS wat anders dan in VBA.

[ Voor 15% gewijzigd door Tribits op 04-06-2014 01:57 ]

Master of questionable victories and sheer glorious defeats