Visualizzazione post con etichetta cartelle. Mostra tutti i post
Visualizzazione post con etichetta cartelle. Mostra tutti i post

mercoledì 19 gennaio 2022

MS Outlook: Macro per stampare un elenco di cartelle di un file di dati

In alcune circostanze può essere utile ottenere l'elenco delle sottocartelle presenti all'interno di un file di dati di Outlook. Di seguito viene mostrata una macro VBA adatta allo scopo. La macro ottiene un elenco dei nomi delle sottocartelle presenti in un file di dati a partire dalla cartella selezionata. L'elenco viene inserito in un nuovo messaggio pronto per essere inviato.

 ' strFoldersList è una stringa multiriga contenente i nomi delle cartelle   
  Public strFoldersList As String   
  ' lCountFolders andrà a contenere il numero di cartelle elaborate   
  Public lCountFolders As Long   
     
     
  Public Sub GetFolderNames()   
   Dim olApp As Outlook.Application   
   Dim olSession As Outlook.NameSpace   
   Dim olStartFolder As Outlook.MAPIFolder   
      
   lCountFolders = 0   
      
   Set olApp = New Outlook.Application   
   Set olSession = olApp.GetNamespace("MAPI")     
     
   'Consente all'utente di selezionare la cartella da cui iniziare la ricerca   
   Set olStartFolder = olSession.PickFolder   
      
   'Verifica se l'utente ha selezionato una cartella da cui partire   
   If Not (olStartFolder Is Nothing) Then   
    ' Se è stata selezionata una cartella, avvia il processo di ricerca.   
    ProcessFolder olStartFolder   
      
    strFoldersList = strFoldersList & vbCrLf & "Totale cartelle elaborate:" & vbTab & lCountFolders   
    ' Crea un nuovo messaggio email contenente l'elenco delle cartelle   
    Set ListFolders = Application.CreateItem(olMailItem)   
    ListFolders.Body = strFoldersList   
    ListFolders.Display     
   End If   
  ' Resetta il contenuto della stringa per una nuova ricerca   
  strFoldersList = ""   
  End Sub   
     
     
  Sub ProcessFolder(CurrentFolder As Outlook.MAPIFolder)   
       
   Dim i As Long   
   Dim olNewFolder As Outlook.MAPIFolder   
   Dim olTempFolder As Outlook.MAPIFolder   
   Dim olTempFolderPath As String   
   Dim lItemsInFolder As Long   
      
   lItemsInFolder = 0   
   ' Esegue un loop sulle cartelle.   
   For i = 1 To CurrentFolder.Folders.Count   
       
    Set olTempFolder = CurrentFolder.Folders(i)   
       
    olTempFolderPath = olTempFolder.FolderPath   
     
   ' Verifica il numero di elementi contenuti nella cartella   
    lItemsInFolder = olTempFolder.Items.Count   
       
       
    ' Crea una stringa multiriga con i nomi delle cartelle.    
    ' olTempFolder contiente il nome della cartella   
    strFoldersList = strFoldersList & vbCrLf & olTempFolderPath & vbTab & "(Items:" & lItemsInFolder & ")"   
       
    lCountFolders = lCountFolders + 1   
       
   Next   
   ' Esegue la ricerca anche nelle sottocartelle della cartella corrente   
   For Each olNewFolder In CurrentFolder.Folders   
     ProcessFolder olNewFolder   
   Next   
      
      
  End Sub   

La macro è molto semplice e i commenti consentono di capire come funziona.  La procedura principale è GetFolderNames() che consente all'utente di selezionare la cartella su cui operare. Successivamente viene richiamata la procedura ProcessFolder che, partendo dalla cartella selezionata dall'utente, elabora tutte le sottocartelle.


Come utilizzare la macro

  • Per utilizzare la macro avviare la finestra Microsoft Visual Basic, Application Edition premendo, dalla finestra principale di Outlook, la combinazione di tasti ALT+F11.
  • Cliccare, con il tasto destro del mouse, su Progetto1 quindi cliccare su Inserisci e selezionare Modulo.
    VBA, Inserisci modulo
    FIG 1 - VBA, Inserisci modulo

  • Copiare il codice sopra riportato e incollarlo nella nuova finestra. Per salvare il codice cliccare sull'icona del dischetto o premere la combinazione di tasti CTRL+S
    VBA, Modulo (codice)
    FIG 2 - VBA, Modulo (codice)

  • Per eseguire la macro cliccare sul tasto play (o premere F5), selezionare la cartella desiderata e premere OK
    Seleziona cartella
    FIG 3 - Seleziona cartella

  • Verrà creato un nuovo messaggio contenente l'elenco delle cartelle. Per ciascuna cartella verrà visualizzato il numero di elementi contenuti e, alla fine dell'elenco, verrà riportato il numero di cartelle elaborato.
    Messaggio contenente l'elenco cartelle
    FIG 4 - Messaggio contenente l'elenco cartelle



Visualizzare la dimensione di ciascuna cartella

Per visualizzare la dimensione di ciascuna cartella basta apportare una semplice modifica al codice della procedura ProcessFolder come mostrato di seguito. Apportando tale modifica bisogna considerare che il tempo di elaborazione della macro può aumentare notevolmente con l'aumentare delle cartelle e item da elaborare.
 Sub ProcessFolder(CurrentFolder As Outlook.MAPIFolder)   
       
   Dim i As Long   
   Dim olNewFolder As Outlook.MAPIFolder   
   Dim olTempFolder As Outlook.MAPIFolder   
   Dim olTempFolderPath As String   
   Dim lItemsInFolder As Long   
    Dim intSize As Long   
   Dim objItems As Items   
   Dim objItem As Object      
      
   lItemsInFolder = 0   
   ' Esegue un loop sulle cartelle.   
   For i = 1 To CurrentFolder.Folders.Count   
       
    Set olTempFolder = CurrentFolder.Folders(i)   
       
    olTempFolderPath = olTempFolder.FolderPath   
     
   ' Verifica il numero di elementi contenuti nella cartella   
    lItemsInFolder = olTempFolder.Items.Count   
     
       Set objItems = olTempFolder.Items   
       
       intSize = 0   
   ' Somma la dimensione di ogni item presente nella cartella   
   For Each objItem In objItems   
    ' Debug.Print olcount, objItem.Subject, objItem.Size   
     intSize = intSize + objItem.Size   
    Next   
       
       
    ' Crea una stringa multiriga con i nomi delle cartelle.    
    ' olTempFolder contiente il nome della cartella   
    strFoldersList = strFoldersList & vbCrLf & olTempFolderPath & vbTab & "(Items:" & lItemsInFolder & ") (Dimensione:" & Int(intSize / 1024) & " KB)"   
       
    lCountFolders = lCountFolders + 1   
       
   Next   
   ' Esegue la ricerca anche nelle sottocartelle della cartella corrente   
   For Each olNewFolder In CurrentFolder.Folders   
     ProcessFolder olNewFolder   
   Next   
      
      
  End Sub   


Esportare l'elenco in un file CSV

Se al posto di creare un nuovo messaggio di posta si intende salvare l'elenco delle cartelle all'interno di un file CSV modificare la procedura GetFolderNames() come indicato di seguito.
 Public Sub GetFolderNames()   
   Dim olApp As Outlook.Application   
   Dim olSession As Outlook.NameSpace   
   Dim olStartFolder As Outlook.MAPIFolder   
      
   lCountFolders = 0   
      
   Set olApp = New Outlook.Application   
   Set olSession = olApp.GetNamespace("MAPI")   
      
   'Consente all'utente di selezionare la cartella da cui iniziare la ricerca   
   Set olStartFolder = olSession.PickFolder   
      
   'Verifica se l'utente ha selezionato una cartella da cui partire   
   If Not (olStartFolder Is Nothing) Then   
   ' Se è stata selezionata una cartella, avvia il processo di ricerca.   
   ProcessFolder olStartFolder   
      
   ' Crea un file CSV nel percorso specificato   
  strPath = Environ("USERPROFILE") & "\Documents\ElencoCartelleOutlook.csv"   
   Set fso = CreateObject("Scripting.FileSystemObject")   
   Set Fileout = fso.CreateTextFile(strPath, True, False)   
   Fileout.WriteLine strFoldersList   
   End If   
  ' Resetta il contenuto della stringa per una nuova ricerca   
  strFoldersList = ""   
  End Sub   




lunedì 17 gennaio 2022

Windows Quick Tip: Creare più cartelle dal Prompt dei comandi

Il Prompt dei comandi viene considerato erroneamente obsoleto ma in realtà rappresenta, ancora oggi, un'ottimo strumento per velocizzare operazioni che con la GUI richiederebbero più tempo; una di queste operazioni è la creazione contemporanea di molte cartelle. Tramite l'interfaccia grafica di Esplora file, le cartelle andrebbero create manualmente una alla volta mentre, agendo tramite il Prompt dei comandi, l'obiettivo può essere raggiunto in una frazione del tempo.
Per creare più cartelle dal Prompt dei comandi:
  • Aprire il Prompt dei comandi (WIN+R e digitare CMD seguito da invio) e posizionarsi nella cartella radice in cui creare le cartelle utilizzando il comando CD. Ad esempio, per posizionarsi all'interno della cartella Documenti digitare il comando
    cd %userprofile%\Documents
  • A questo punto basta far seguire al comando MD i nomi delle cartelle da creare (nel caso nei nomi siano presenti spazi è necessario delimitarli con i doppi apici). Ad esempio, volendo creare una cartella per ogni mese dell'anno il comando è 
    md Gennaio Febbraio Marzo Aprile Maggio Giugno Luglio Agosto Settembre Ottobre Novembre Dicembre 
    Per fare in modo che la sequenza venga visualizzata nell'ordine corretto è possibile creare le cartelle aggiungendo un numero prima del nome della cartella come nella seguente sintassi 
    md "01 - Gennaio" "02 - Febbraio" "03 - Marzo" "04 - Aprile" "05 - Maggio" "06 - Giugno" "07 - Luglio" "08 - Agosto" "09 - Settembre" "10 - Ottobre" "11 - Novembre" "12 - Dicembre"

    Creazione cartelle dal prompt dei comandi
    FIG 1 - Creazione cartelle dal prompt dei comandi







venerdì 29 marzo 2019

MS Exchange: Visualizzare i permessi di una cartella presente sulla mailbox tramite EMS

Chi gestisce un'infrastruttura di posta elettronica può trovarsi spesso nella situazione di dover verificare permessi assegnati ad una particolare cartella presente in una mailbox. In ambiente MS Exchange Server tale operazione può essere eseguita con l'ausilio del cmdlet Get-MailboxFolderPermission tramite EMS (Exchange Management Shell).

Get-MailboxFolderPermission  [-Identity] <MailboxFolderIdParameter> [-DomainController <Fqdn>]   [-User <MailboxFolderUserIdParameter>]    [-GroupMailbox]   [<CommonParameters>]


Parametri

-DomainController
Il parametro consente di specificare il Domain Controller a cui far riferimento per reperire dati dall'Active Directory. Il dominio va specificato nel formato FQDN (Fully Qualified Domain Name) ad es. dc02.contoso.com

-GroupMailbox
Il parametro è utilizzato per includere nei risultati i gruppi di Office 365.

-Identity
Tale parametro specifica la mailbox e la cartella su cui si intendono verificare le abilitazioni. La sintassi è del tipo  <Mailbox>:\<Folder>. Per <Mailbox> può essere specificato un qualsiasi valore che identifica la mailbox in maniera univoca come:
GUID
Distinguished name (DN)
Dominio\Account
Nome dell'entità utente
LegacyExchangeDN
SamAccountName
Indirizzo SMTP
Alias 

-User
Il parametro User filtra i risultati visualizzando solo le abilitazioni dell'utente indicato. Anche in questo caso è possibile utilizzare qualsiasi valore che permetta l'identificazione univoca dell'utente/gruppo come:
Nome
Display name
Alias
Distinguished name (DN)
Canonical DN
Indirizzo email
GUID




Esempi


Esempio 1
Get-MailboxFolderPermission  -identity GLUBRANO
Per visualizzare i permessi sulla root della mailbox.


Esempio 2
Get-MailboxFolderPermission  -identity GLUBRANO:\Calendario
o per maggiori dettagli
Get-MailboxFolderPermission  -identity GLUBRANO:\Calendario |FL
Visualizza i permessi sulla cartella Calendario della casella dell'utente GLUBRANO
Get-MailboxFolderPermission
FIG 1 - Get-MailboxFolderPermission

Esempio 3
Get-MailboxFolderPermission  -identity GLUBRANO:\Calendario -User DDUCK
Visualizza i permessi che l'utente DDUCK dispone sulla cartella Calendario presente nella mailbox dell'utente GLUBRANO.




martedì 3 gennaio 2017

Outlook Quick Tip: Copiare la struttura di cartelle e sottocartelle presenti in un file PST all'interno di un altro file

In ambiente di lavoro potremmo avere la necessità di creare un nuovo file archivio (.PST) con la stessa struttura di cartelle/sottocartelle presente in un altro file.
Outlook non permette di copiare solo la struttura delle cartelle escludendo le email in queste contenute tuttavia, con un piccolo trucco, possiamo raggiungere il nostro obiettivo.

Vediamo come fare in Outlook 2016 e versioni precedenti.
  • Avviare Outlook e assicurarsi che il file PST da utilizzare come modello sia connesso;
  • Dal menu File selezionare Informazioni;
  • Cliccare sul pulsante  Strumenti (Strumenti pulizia per Outlook 2013 e antecedenti) quindi selezionare Pulisci vecchi elementi... (Archivio in Outlook 2013 e antecedenti);
    Outlook, Pulisci vecchi elementi...
    FIG 1 - Outlook, Pulisci vecchi elementi...
  • Nella nuova finestra selezionare l'opzione Archivia la cartella e tutte le sottocartelle e, nel riquadro sottostante, selezionare il file PST da utilizzare come modello;
  • In Archivia elementi antecedenti inseriamo una data sicuramente antecedente alla prima email archiviata nel file (ad es. 01/01/1995);
  • In File archivio impostare il percorso e il nome del nuovo file che si intende creare (o selezionare un file PST su cui si intende copiare la struttura), quindi cliccare su OK e attendere il termine dell'operazione.

    Outlook, archiviazione elementi
    FIG 2 - Outlook, archiviazione elementi

A questo punto avremo il nostro file con la stessa struttura di quello esistente ma privo di email.