Archives For Command

So benissimo quello che stai pensando, che forse un rilascio a così stretto giro dall’altro (lo 0.2 è dello scorso 28 dicembre) è un tantino anomalo, e l’osservazione può anche starci. Il problema è che ho trovato un’anomalia strana per un programma di Microsoft (e più in generale per il suo sistema operativo), il bottone che scatena la macro per esportare i file PDF sul Desktop partendo da una o più mail da te selezionate, tiene conto della differenza tra “PDF” e “pdf, come stessimo parlando di case-sensitive.

SaveModule.bas 0.3 per Outlook 2016 (estrazione PDF dagli allegati)

Me ne sono accorto grazie alla segnalazione di un utente in ufficio, che riusciva a esportare correttamente file con estensione “pdf“, perdendo però per strada alcuni file che avevano come estensione un “.PDF” in maiuscolo. Pur faticando a credere a un case-sensitive prerogativa dei sistemi Unix-Like, ho modificato nuovamente lo script per adattarlo all’esigenza, e stavolta mi sono deciso a integrare il costrutto Case al suo interno, per sostituire l’If semplice che ha fatto fino a ora il suo dovere.

Cosa cambia?

Questo, nello specifico:

sFileType = LCase$(Right$(strFile, 4))

che dopo aver ottenuto il nome del file (strFile = sName & objAttachments.Item(i).FileName), va a estrapolarne le ultime 4 posizioni (in pratica il “.ext” dove ext è l’estensione del file) e fa partire un costrutto Case all’interno del quale si possono specificare più estensioni da portare fuori nella cartella degli Attachments:

Select Case sFileType
Case ".PDF", ".pdf"
 'Combine with the path to the Temp folder.
 strFile = strFolderpath & strFile
 'Save the attachment as a file.
 objAttachments.Item(i).SaveAsFile strFile
End Select

Il resto rimane, per evidenti motivi, invariato. Tu potrai tranquillamente aggiungere ulteriori estensioni di cui tenere conto ponendo un’ulteriore virgola dopo il “.pdf” e aggiungendo magari un formato immagine, per esempio Case ".PDF", ".pdf", ".png".

Ho già aggiornato gli script rilasciati via GitHub, compreso il modulo unico di salvataggio che integra la macro da attivare con il pulsante e la regola automatica di ingresso posta. Trovi qui il codice della macro con pulsante: gist.github.com/gioxx/b7b16bdd96d3541bdfb29b23ed1d7e1d, qui invece quello del modulo intero: gist.github.com/gioxx/1e703b56db11b6363e2d07f4b6617bd9. Ho aggiornato anche la cartella condivisa su Box nel caso tu voglia scaricare tutto il materiale in un solo colpo: app.box.com/s/5ksruqc3pi74fumkbt4wg3avb1f6tmzf.

Per modificare il comportamento del tuo Outlook, potrai semplicemente richiamare la combinazione ALT + F11 da tastiera (per aprire l’editor Visual Basic, nda), selezionare tutto il codice relativo al modulo di salvataggio, cancellarlo, copiare il nuovo codice da Gist e incollarlo, salvando poi la modifica. Il tutto sarà immediatamente operativo.

È giusto ricordare ancora una volta che anche in questa nuova versione del codice non posso fare nulla per le Shared Mailbox caricate in Auto-Mapping e senza copia cache locale su Outlook. Ciò vuol dire che se utilizzi le caselle di posta condivise collegandoti direttamente al server (basta togliere l’opzione “Scarica cartelle condivise” dalle opzioni avanzate del tuo account Exchange), non potrò salvare alcunché nella cartella sul tuo Desktop, perché in realtà quei PDF non esistono sul tuo hard disk, ma vengono scaricati secondo necessità quando fai doppio clic su di loro (o quando chiedi a Outlook di salvarli in una cartella specifica).

Al solito, l’area commenti è a tua totale disposizione per richiedere ulteriori informazioni o rispondere a qualche tuo dubbio. Puoi usare invece Gist per proporre modifiche o miglioramenti al codice.

Buon lavoro!


Immagine di copertina: Caspar Rubin on Unsplash
Condividi l'articolo con i tuoi contatti:

Ho ormai terminato di lavorare sulla nuova versione dello script USMT (te lo ricordi?), che ora integra in un solo batch tutto il necessario per migrare i dati utente su sistemi 7 e 10 (volendo anche 8, ma l’ho tenuto fuori dai giochi), presto condividerò il lavoro fatto. Nel frattempo però ti parlo di un piccolo particolare riguardante un pacchetto di installazione che ho creato utilizzando 7-Zip e un comando da prompt, utile per te o per chiunque abbia necessità di raccogliere un po’ di file sotto lo stesso tetto e distribuire un unico eseguibile per portare a termine un’installazione di un programma (per esempio).

Utilizzare 7-Zip per creare pacchetti di installazione

Quello che ho fatto io è estremamente basilare, avevo necessità di isolare solo i CAB / MSI essenziali per l’installazione del set di file ed eseguibili USMT di Microsoft (ufficiali) portati fuori dal Assessment and Deployment Kit di Windows 8.0 (parlo di questo: microsoft.com/en-eg/download/details.aspx?id=30652). Ho creato un file 7z contenente i file di cui ti ho appena parlato, e ho aggiunto un piccolo batch con all’interno la stringa per l’installazione di un MSI (msiexec /i NOMEFILEMSI).

Crea ora il tuo file d’archivio 7z, inserisci al suo interno i file che intendi distribuire (o il software che intendi installare), per questa cosa dovresti essere assolutamente autonomo e non credo tu abbia necessità di istruzioni particolari. Quello che può mancarti è ciò che accade adesso. Inserisci nella stessa cartella del file 7z i file 7zS.sfx e config.txt. Il primo lo puoi scaricare direttamente facendo clic qui, il secondo lo puoi creare tu con qualsiasi editor di test (io ti consiglio sempre Notepad++), questo è un esempio pratico:

;!@Install@!UTF-8!
Title="User State Migration Tool (WINKIT8.0)"
BeginPrompt="Do you want to install USMT 5?"
RunProgram="start.cmd"
;!@InstallEnd@!

Per tua comodità, ho caricato persino il file testuale su box (lo trovi qui). Come funziona è facile intuirlo:

  • Title: Il titolo da dare alla finestra che comparirà per richiedere se procedere con l’installazione del software.
  • BeginPrompt: il messaggio da far comparire a video per richiedere di procedere.
  • RunProgram: l’eseguibile da lanciare dopo aver scompattato il file e aver ottenuto conferma dall’utente.

Utilizzare 7-Zip per creare pacchetti di installazione 1

Creare il pacchetto

Dato che è tutto pronto, lancia un prompt dei comandi e spostati nella cartella dove hai appoggiato tutti i file necessari per creare il tuo pacchetto. La stringa che dovrai inserire è questa:

copy /b 7zS.sfx + config.txt + ARCHIVIO.7z ARCHIVIO.exe

sostituisci “ARCHIVIO.7z” con il nome del pacchetto che tu hai creato, e “ARCHIVIO.exe” con il nome che vuoi realmente dare all’eseguibile. Premi invio e attendi qualche istante affinché l’operazione termini. Dovresti ora poter vedere il tuo file eseguibile pronto per essere distribuito, file che -se aperto tramite 7-Zip- mostrerà chiaramente il suo contenuto:

Utilizzare 7-Zip per creare pacchetti di installazione 2

L’opera dovrebbe ora essere completa :-)


Credits: stackoverflow.com/questions/27904532/how-do-i-make-a-self-extract-and-running-installer

Immagine di copertina: Taduuda on Unsplash
Condividi l'articolo con i tuoi contatti:

Ammesso che l’argomento abbia solleticato il tuo interesse, il SaveModule.bas è quel file di cui ti ho parlato qualche tempo fa in un articolo dedicato all’estrazione di file PDF dagli allegati delle tue email in Outlook 2016:

Outlook 2016: scaricare insieme gli allegati da diverse mail (PDF)

A seguito di un problema nato da mail (tante) inviate con un allegato sempre diverso (nel contenuto) ma sempre con lo stesso nome (!!!), ho optato per mettere una pezza alla mancanza dello scorso ottobre riguardo l’estrazione e sovrascrittura di file con nome uguale, non pensavo sarebbe stato necessario “e invece“. Ho quindi modificato i due file .bas precedentemente rilasciati (SavePDF_Rule e SavePDF_Button) per integrare il nuovo controllo e correggere (solo per il bottone) una dimenticanza che non inficiava comunque sul risultato finale.

Cosa è cambiato

Nello specifico? Questo:

dtDate = objMsg.SentOn
sName = Format(dtDate, "ddmmyyyy", vbUseSystemDayOfWeek, vbUseSystem) & "_" & Format(dtDate, "hhnnss", vbUseSystemDayOfWeek, vbUseSystem) & "-"

e quindi:

strFile = sName & objAttachments.Item(i).FileName

Che tradotto in parole povere vuol dire che vado a ricavarmi la data e l’ora di ricezione della email contenente il PDF allegato, quindi antepongo a quel PDF il dato appena ricavato, nella modalità ddmmyyyy (due cifre per il giorno, due per il mese, quattro per l’anno, inserendo gli zeri quando e dove necessario), facendo seguire poi l’ora nella modalità hhnnss (due cifre per l’ora, due per i minuti, due per i secondi). Il risultato ti permette di avere più file con lo stesso nome –in origine– ma diverso nella loro destinazione (la cartella “Attachments” sul tuo Desktop, ricordi?).

Puoi tranquillamente copiare l’intero nuovo codice e andarlo a sostituire nel tuo Outlook che esegue già il vecchio, ho aggiornato anche i file già a tua disposizione nella cartella su box.com: app.box.com/s/5ksruqc3pi74fumkbt4wg3avb1f6tmzf. Una volta copiato e incollato il codice (sovrascrivendo quello già presente) ricordati di salvare la modifica (nell’editor Visual Basic di Outlook), sarà immediatamente operativa. Il resto non cambia.

Ricordati che

Rimane ancora lì presente la possibilità di integrare nello script fornito anche ulteriori formati da scaricare dagli allegati mail, come detto in precedenza:

Salvo errori nel processo di “installazione” (se così posso chiamarlo), tutto dovrebbe funzionarti alla perfezione, permettendoti di catturare i file PDF che vengono allegati alle mail che ricevi e portarli nella cartella Attachments sul tuo Desktop. Nessuno però ti impedisce di modificare lo script e fargli verificare l’esistenza di altre estensioni, come doc, docx, xlsx e chi più ne ha più ne metta. Trovi diversi riferimenti in merito nel sito web che più mi ha aiutato a plasmare il risultato di cui avevo necessità (slipstick.com/developer/save-attachments-to-the-hard-drive).

e che anche in questa nuova versione del codice non posso fare nulla per le Shared Mailbox caricate in Auto-Mapping e senza copia cache locale su Outlook. Ciò vuol dire che se utilizzi le caselle di posta condivise collegandoti direttamente al server (basta togliere l’opzione “Scarica cartelle condivise” dalle opzioni avanzate del tuo account Exchange), non potrò salvare alcunché nella cartella sul tuo Desktop, perché in realtà quei PDF non esistono sul tuo hard disk, ma vengono scaricati secondo necessità quando fai doppio clic su di loro (o quando chiedi a Outlook di salvarli in una cartella specifica).

Mi sembra ci sia tutto, anche per stavolta passo e chiudo :-)

Buon lavoro!


Photo by Kevin on Unsplash
Condividi l'articolo con i tuoi contatti:

Un passo indietro: nei primi giorni di novembre ho pubblicato un articolo dedicato a un nuovo VBScript sviluppato per tenere d’occhio le installazioni degli agenti Kace nella rete aziendale, così da ricevere delle notifiche (mail) in caso di mancate installazioni o inventari non aggiornati. Trovi tutto qui:

Kace: un alert in caso di client mancante o inventario troppo vecchio

Cosa è cambiato rispetto al mese scorso? Quest (società separatasi da Dell nel 2016) ha rilasciato l’aggiornamento di Kace 8.0.318, il quale porta con sé anche il bundle di agenti 8.0.152. Questi ultimi, contrariamente al passato, si installeranno nella cartella %ProgramFiles%\Quest (%ProgramFiles(x86)%\Quest sui sistemi a 64 bit) anziché %ProgramFiles%\Dell. Il mio script, se distribuito sul tuo dominio, inizierà a inviarti delle notifiche per mancata installazione client, poiché anche il percorso nella %ProgramData% è variato (da %ProgramData%\Dell\KACE a %ProgramData%\Quest\KACE).

NotifyKace.vbs: nuova versione per gli agenti 8

Nello script pubblicato tra i miei Gist, avevo già previsto una banale variabile contenente la directory da monitorare, basterà variare quella per tornare a far funzionare il meccanismo, senza ulteriori falsi positivi (ne avrai ancora, di falsi positivi, se il client non avrà ancora ricevuto l’aggiornamento dell’agent alla versione 8.0.152, mettiti il cuore in pace). Ho lasciato stare il vecchio script (che si ferma così alla versione 0.2rev1) e ne ho salvato un altro (la 0.3), che trovi qui:

Per tutto il resto c’è MasterCard puoi consultare il vecchio articolo, tenendo presente che tutto resta identico ad eccezione delle cartelle del software (modifica Dell con Quest e il gioco è sempre fatto).

Buon lavoro!

Condividi l'articolo con i tuoi contatti:

Pillole

Le pillole sono articoli di veloce lettura dedicati a notizie, script o qualsiasi altra cosa possa essere "divorata e messa in pratica" con poco. Uno spazio del blog riservato ai post "a bruciapelo"!

Te lo ricordi quell’articolo in cui ti parlavo dell’utility di Pulizia Disco per Windows 2008? Se non lo ricordi ti aiuto io, è questo:

Windows 2008: dove trovare l’utility di Pulizia Disco

Ora, dato che cambia il sistema ma non la sostanza, riporto un riferimento alla possibilità di installazione del medesimo tool su Windows 2012, può sempre tornarmi utile in futuro (e forse torna utile anche a te che mi stai leggendo adesso). Anche stavolta le posizioni cambiano in base al fatto che si stia lavorando su Windows 2012 standard o R2, occhio.

Win10Clean.ps1: uno script PowerShell per fare pulizia su Windows 10 1

Windows 2012

Per utilizzare Clean Manager su Windows 2012 devi copiare i file cleanmgr.exe e cleanmgr.exe.mui che trovi rispettivamente in:

  • C:\Windows\WinSxS\amd64_microsoft-windows-cleanmgr_31bf3856ad364e35_6.2.9200.16384_none_c60dddc5e750072a\cleanmgr.exe
  • C:\Windows\WinSxS\amd64_microsoft-windows-cleanmgr.resources_31bf3856ad364e35_6.2.9200.16384_en-us_b6a01752226afbb3\cleanmgr.exe.mui

all’interno delle cartelle:

  • %systemroot%\System32 (cleanmgr.exe)
  • %systemroot%\System32\en-US (cleanmgr.exe.mui)

Occhio, vale il solito discorso per i sistemi operativi localizzati in italiano (qui li usiamo esclusivamente in inglese, ma capisco che tu potresti trovarti in una diversa situazione). Se utilizzi Windows 2012 in italiano, dovrai copiare cleanmgr.exe.mui nella cartella %systemroot%\System32\it-IT.

Windows 2012 R2

Le cose cambiano per la versione R2, che necessita del pacchetto Desktop Experience senza alternativa alcuna (così pare). Puoi installare il componente anche da PowerShell, ti basterà lanciarlo in modalità amministrativa ed eseguire un Install-WindowsFeature Desktop-Experience

L’operazione richiederà un riavvio del server.


fonte: support.appliedi.net/kb/a110/how-to-enable-the-disk-cleanup-tool-on-windows-server-2008-r2.aspx

Condividi l'articolo con i tuoi contatti: