Archives For Batch

Articolo “appunti“, come sporadicamente capita qui sopra. Ho avuto la necessità di rimuovere delle mappature verso stampanti di rete non più raggiungibili (cambio server remoto di stampa, nda), tutte queste non controllate da GPO (erano state aggiunte manualmente dagli utenti). Ho aggirato l’ostacolo con alcune righe di VBScript. Le ritrovi qui di seguito nel caso in cui dovessero servirti.

VBScript: rimuovere mappature stampanti (Coding)

Pulizia completa (da server)

Ti ricordo che il VBScript può essere eseguito manualmente, o inserito in un più complesso (e completo) script di Logon, o magari puoi pensare di lanciarlo su altre macchine passando per PSExec o qualsiasi altro strumento di gestione postazioni come Kace (o equivalenti).

Dim objWMIService, objNetwork, colInstalledPrinters, objPrinter
strComputer = "."
i = 0
PrintServer = "NOME-VECCHIO-SERVER"
Set objWMIService = GetObject("winmgmts:" _
 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colInstalledPrinters = objWMIService.ExecQuery _
 ("Select * from Win32_Printer")
 For Each objPrinter in colInstalledPrinters
 ReDim Preserve arrPrinterName(i)
 arrPrinterName(i) = objPrinter.Name
 If InStr(arrPrinterName(i), PrintServer) Then
 Set objNetwork = WScript.CreateObject("WScript.Network")
 objNetwork.RemovePrinterConnection arrPrinterName(i)
 i=i+1 
 Else
 End If
Next

Il nome del server viene dichiarato come variabile PrintServer (facile intuirlo, eh?), devi praticamente sostituire quell’unica cosa lasciando invariato il resto.

e qualcosina da locale

Sì, perché potrebbe anche capitare che –contestualmente– ci sia qualcosa installato in locale sulla macchina (e non solo figlio del tasto destro → connetti), anch’esso non più utile alla quotidianità dell’utente. A questo punto però, contrariamente alla porzione di script di prima, ricorda che per quella di seguito servirà essere amministratori del PC (quindi bisognerà lanciare lo script come tali, o trovare un’alternativa):

arrDeletePrinters = Array("STAMPANTE1","STAMPANTE2","STAMPANTE3")
For Each objPrinter in colInstalledPrinters
 For Each strPrinter in arrDeletePrinters
 If Not InStr(1, objPrinter.DeviceID, strPrinter, 1) = 0 Then
 objPrinter.Delete_ 
 End If
 Next
Next

dove al posto di STAMPANTE1, STAMPANTE2, STAMPANTE3(volendo puoi dichiararne ancora, o toglierne, se necessario), dovrai inserire quelle che realmente vuoi eliminare, basta il nome con il quale è stata dichiarata (ogni singola stampante) sul sistema, ammesso che qualcuno non abbia avuto la malsana idea di nominarle in maniera differente ogni volta.

Ovviamente non è detto che tu abbia necessità di entrambe le soluzioni, puoi quindi limitarti a riportare la prima parte dello script in un tuo file (.vbs) da salvare dove più ritieni opportuno (in modo tale che sia raggiungibile dalle tue postazioni, chiaramente), o magari solo la seconda, stando però attento a includergli in testa il blocco relativo alla preparazione variabili e funzioni da richiamare (Dim objWMIService, objNetwork, colInstalledPrinters, objPrinter, la parte relativa a strComputer e il Set objWMIService = GetObject(“winmgmts:” _& “{impersonationLevel=impersonate}!\\” & strComputer & “\root\cimv2”)).

Un grande grazie alle fonti che hanno permesso di “pacchettizzare” una soluzione rapida per aggirare un banale ostacolo:

Buon lavoro!

Condividi l'articolo con i tuoi contatti:

Di strada da quell’articolo del 2011 se n’è fatta tanta, e anche Mozilla ha modificato il comportamento del suo Session Restore integrato nel browser. In realtà le cose sono state modificate nel 2014, ma non ho mai avuto la reale necessità di cambiare il comportamento di SessionStoreBackup, almeno fino a oggi.

Firefox: disabilitare scansione antivirus nel download manager integrato

Perché proprio oggi?

Perché se anche tu utilizzi le versioni non stabili del browser Mozilla (le Nightly), ti sarai già accorto che di tanto in tanto qualcosa di spiacevole può accadere. Tutto risolvibile, sia chiaro, ma bisogna stare accorti, sempre pronti sul pezzo e con le dovute armi a propria disposizione per evitare di perdere dati che ci servono, ai quali teniamo particolarmente, come (nel mio caso) le tab aperte di sessione in sessione. Io utilizzo –da sempre– l’opzione che riapre ciò che ho lasciato aperto l’ultima volta che ho utilizzato il browser, delegando così un compito importante al file sessionstore.js, solitamente presente nella cartella del profilo (ormai dovresti saperlo), ma che può corrompersi ed essere sovrascritto, facendoti perdere così la tua sessione di navigazione salvata.

Per ovviare al problema, il mio SessionStoreBackup ha sempre lavorato portando a casa il risultato, ma l’ho modificato per tenere al sicuro il file di recovery previsto da Mozilla (recovery.js), così da evitare di incorrere in possibili rogne. Dato che l’ho riaperto, ho guardato sotto al cofano e deciso di cambiare metodo, di non salvarne più copie, ma di tenerne sempre una, quella più aggiornata, confrontandola di volta in volta con quella che vive nella cartella del profilo di Firefox, quella vera, quella creata dal browser (e non clonata da me).

Questo è il “nuovo” script (il solito in realtà, ma un po’ rivisto):

Rimane invariato il modo di dichiarare il nome della cartella del tuo profilo (devi sostituire TUOPROFILO.default in riga 5 con ciò che trovi accedendo a about:support, quindi facendo clic sul pulsante Apri cartella vicino la voce Cartella del profilo). Da quella riga in poi, non c’è più bisogno di toccare alcunché, il piccolo batch farà tutto il resto. Ricorda poi che il software può essere lanciato manualmente con il classico doppio clic o (decisamente consigliato) programmato tramite le operazioni pianificate di Windows, così da “potertene dimenticare“.

Fallo girare ogni ora circa, così da tenere sempre aggiornato il tuo recovery.js, tornerà parecchio utile quando le tue sessioni risulteranno essere perse a causa di un crash di Firefox (non solo di Nightly eh).

Recupero manuale della sessione

Manuale ma semplice, te lo assicuro. Il batch si occupa della prima parte del lavoro, quella del backup, quella che generalmente ci si dimentica di fare e che è quindi importante programmare e lasciare fare a lui per evitare possibili errori. A te tocca, solo in caso di necessità, prendere il file di backup e andare a fare un rapido lavoro di taglio e cucito con Firefox chiuso, così da permettergli di riprendere la giusta sessione di lavoro alla sua riapertura.

Nella cartella del tuo profilo dovranno esistere due cartelle. La prima è quella del mio batch, si chiama SessionStoreBackup (che fantasia eh?) e dovrebbe contenere esclusivamente un file, il recovery.js. La seconda cartella è invece quella ufficiale di Mozilla, la sessionstore-backups, dovrebbe contenere questi file:

  • recovery.js – Contiene lo stato di Firefox aggiornato a 15 secondi prima di una chiusura o di un crash.
  • recovery.bak – Come sopra, ma lo stato è quello aggiornato a 30 secondi prima dell’accaduto.
  • previous.js – Contiene lo stato di Firefox relativo a due chiusure di programma fa (volute o per crash improvviso).
  • upgrade.js-[build id] – Contiene lo stato di Firefox a prima di un aggiornamento a nuova versione, il “build-id” ovviamente corrisponderà alla data di upgrade (per esempio: 20170619030208).

Saltando a piè pari questa cartella, puoi utilizzare il recovery.js generato dal batch:

  • taglialo e incollalo nella cartella del tuo profilo.
  • Cerca (ammesso che esista) il file sessionstore.js. Se esiste, cancellalo.
  • Ora rinomina il file recovery.js in sessionstore.js
  • Avvia Firefox, dovresti poter rivedere ogni tab lasciata precedentemente aperta :-)

Puoi fare la stessa identica cosa con i file generati da Mozilla, ma capita talvolta che più crash (dovuti magari a qualche instabilità o incompatibilità con un componente aggiuntivo, per esempio) vadano a rendere inutilizzabili i vari js. SessionStoreBackup cerca di evitare tutto questo mettendoti a disposizione un file teoricamente sempre valido (il “teoricamente” è inevitabile, perché se nel frattempo parte il batch e scopre che il file è cambiato, andrà a sovrascrivere la tua copia, invalidandola), il tutto a meno di modificare ulteriormente il software e fargli creare più versioni del recovery.js.

Cosa ne pensi?

Condividi l'articolo con i tuoi contatti:

Argomento delicato. La telemetria viene vista spesso con occhio sospetto, scambiata facilmente come invasione della privacy. Senza di lei però i programmi continuerebbero a rimanere potenzialmente instabili e pachidermici, appesantiti da codice che in alcuni casi non viene più utilizzato, o che è possibile ottimizzare in base ad architetture in continua evoluzione, che possono quindi premiare tutti gli utilizzatori nel corso del tempo, occupando loro meno risorse. La telemetria viene utilizzata da Mozilla (tanto per citare una società che ci tiene parecchio alla privacy altrui) ma è anche alla base dei prodotti principali di Microsoft, Windows e Office in primis.

Microsoft Windows and Office Banner

A calcare la mano però ci pensa proprio Microsoft, con consumi che di tanto in tanto (fortunatamente) sforano alla grande rispetto a quello che dovrebbe ricadere in qualcosa di simile alla “cortesia” (mi fai sapere come vanno i miei programmi? Ma certo, eccoti i dettagli della telemetria), andando così a impattare sul lavoro che è necessario portare a termine nei tempi richiesti. Agevolo screenshot:

Windows & Office un taglio alla Telemetria 1

Ora, appurato che anche Symantec ci mette del suo nel momento più sbagliato, non può comunque passare inosservato quel doppio processo che va a consumare poco più del 50% di CPU. Nello specifico dello screenshot si è trattato di telemetria di Office, ma anche quella di Windows non scherza. La prima citata gira tramite un paio di processi schedulati (entrambi fanno riferimento allo stesso eseguibile e una serie di parametri da riga di comando), la seconda tramite un servizio sempre attivo sulla macchina.

Il servizio si può fermare e disabilitare (così che non parta all’avvio del sistema), i due processi schedulati possono essere disabilitati (e basterà un semplice riavvio per mettere subito in atto la modifica). Se l’operazione manuale non ti alletta, ho messo mano al solito file di testo che è presto diventato un batch e poi un eseguibile (per entrambe le cose, separatamente, così rimane a te la scelta di cosa fermare e cosa no).

Trovi gli eseguibili agli indirizzi:

Entrambi i programmi devono essere eseguiti come amministratore. Ti permetteranno di modificare lo stato del tuo sistema o di tornare indietro in qualsiasi momento (ho inserito ambo le possibilità, così da ripristinare uno stato originale in qualsiasi momento). Per entrambi i batch ho cercato di rimanere quanto più generico possibile, così da provare a mantenere una piena compatibilità con i sistemi operativi più recenti, strizzando l’occhio anche al vecchio ma sempreverde Windows 7.

I test sono stati eseguiti su Windows 10 1703 (la Creators Update), ho fatto girare il tutto anche su un Windows 7 Pro Sp1, funzionante anche in questo caso. Se noti problemi nell’utilizzo, ti prego di farmelo sapere, l’area commenti è a tua totale disposizione! :-)

grazie ai contributi di:
computerstepbystep.com/base_filtering_engine_service.html
stackoverflow.com/questions/17412150/batch-regex-the-output-of-reg-query-command-to-a-variable
windowsitpro.com/windows-10/how-turn-telemetry-windows-7-8-and-windows-10
itechtics.com/disable-telemetry-data-collection-windows-10
technet.microsoft.com/en-us/library/cc766529(v=ws.11).aspx

Condividi l'articolo con i tuoi contatti:

È un problema che ho affrontato qualche tempo fa e che inizialmente mi ha dato un po’ di grattacapi, salvo poi trovare casi molti simili che mi hanno aiutato a risolvere l’anomalia. Il disco di un PC si satura e la colpa è della cartella C:\Windows\Temp, invasa da file senza estensione, dal nome che comincia sempre per cab_. Perché accade? Il problema viene generato da una installazione di alcuni aggiornamenti (da Windows Update) evidentemente non andata a buon fine, non del tutto almeno, nonostante la schermata preposta di Microsoft dica che tutto va bene.

Windows: l'invasione dei CBSPersist e dei cab_ (C:WindowsTemp)

Facendo un po’ più di attenzione, si scopre che in realtà di cartella che occupa spazio ce n’è un’altra. Teoricamente dovresti trovare anomala anche la C:\Windows\Logs\CBS, all’interno della quale dovresti trovare dei file CAB veri, e un file di log dalla dimensione decisamente robusta (CBS.log). L’anomalia parte proprio da qui. Partiamo con le opportune presentazioni (recuperate con una semplice ricerca):

CBS stands for “Component-Based Servicing” and it basically is the way components get installed and uninstalled during updates. It is the reason you see “Stage 1”, “Stage 2”, and “Stage 3” during the Service Pack 1 install (for example). “Stage 2” and “Stage 3” exists for the registry keys and files that are normally locked during regular operation.

Tutto chiaro? Un log in cui ogni aggiornamento di Microsoft va a scrivere e tiene traccia di ogni movimento. Un log destinato –per forza– a crescere, e che per un comportamento assolutamente standard va a ruotare, sospendendo la scrittura, finendo in un CAB che ne riduce (di parecchio) la dimensione, e infine ne prepara uno nuovo in cui tornare a scrivere, per poi ricominciare il giro ancora e ancora.

Se per qualsivoglia motivo questo procedimento non fila liscio, il CBS.log diventa più grande del previsto, ingestibile e –soprattutto– impossibile da mettere in un CAB nei tempi previsti. Il risultato? Cartella Temp di Windows piena di tentativi falliti di comprimere quel log, cartella CBS che si ingigantisce.

Diverse le fonti dove ho trovati informazioni in merito e persone capitate nello stesso vortice, ne ho selezionate tre che mi hanno aiutato:

Riepilogando, tutto questo può accadere in qualsiasi momento e -in base alla capacità del disco e lo spazio libero da poter sfruttare- potresti accorgertene a mesi (o forse anni) di distanza. Io ho scoperto di essere soggetto al problema solo perché un utente ha lamentato poco spazio libero e mi ha fatto scoprire l’anomalia. Le operazioni da affrontare per resettare il procedimento di scrittura e archiviazione del CBS.log è questo:

  • Fermare il servizio Windows Update.
  • Rinominare la cartella della Software Distribution (C:\Windows\SoftwareDistribution).
  • Cancellare ogni file in C:\Windows\Temp (ovviamente ignorando quelli in uso e che faranno comparire il classico errore a video di impossibilità di cancellazione, nda).
  • Riavviare il servizio di Windows Update.
  • Cancellare ora la cartella SoftwareDistribution precedentemente rinominata, non serve più, Windows Update provvederà a crearne una nuova in totale autonomia (dovrebbe già averlo fatto in fase di avvio del servizio, come da passaggio precedente).
  • Fermare il servizio Trusted Installer.
  • Cancellare ogni file in C:\Windows\Logs\CBS.
  • Riavviare il servizio Trusted Installer.
  • Forzare una ricerca aggiornamenti di Windows Update (direttamente via prompt).

Visto che questa cosa potrebbe capitare ad altri client in futuro, ho pensato di tradurla in codice batch, da dare in pasto anche al Kace di Dell (tanto per fare un esempio). Il tutto intervallando alcuni secondi di pausa prima di poter eseguire l’operazione successiva (dando così modo al client di non saltare alcun passaggio fondamentale):

sc stop wuauserv
ping 127.0.0.1 -n 7 > NUL
cd \Windows\
move SoftwareDistribution SoftwareDistribution_old
del /S C:\Windows\Temp\* /Q
FOR /D %%p IN ("C:\Windows\Temp\*.*") DO rmdir "%%p" /s /q
sc start wuauserv
rd /S /Q C:\Windows\SoftwareDistribution_old
sc stop TrustedInstaller
ping 127.0.0.1 -n 7 > NUL
del /S C:\Windows\Logs\CBS* /Q
sc start TrustedInstaller
ping 127.0.0.1 -n 5 > NUL
wuauclt.exe /detectnow

Così facendo ho risolto il problema e liberato spazio sul disco. Ho fatto queste modifiche al sistema mesi fa e il problema non si è più presentato (a me, ma anche ad altri utenti che nel frattempo ho rilevato nella nostra rete).

Facile (soprattutto se si ha un aiuto nella software distribution) fare un’analisi all’interno della rete aziendale e cercare le macchine che soffrono la stessa anomalia ma che ancora non hanno saturato il disco, basterà cercare nella cartella C:\Windows\Temp una forte presenza di cab_, così da portarsi avanti ed evitare che il problema si presenti agli occhi dell’utente.

Estote parati (cit.).

G

Update

Ho aggiunto il passaggio relativo alla cancellazione della cartella SoftwareDistribution rinominata (nella lista delle operazioni manuali da compiere), come da commento di GDB, che ringrazio per avermelo fatto notare.

Condividi l'articolo con i tuoi contatti:

Uno di quei problemi che, a lanciare una ricerca nei forum di Microsoft, escono quasi più risultati di una equivalente azione mirata a conoscere le misure di una showgirl. In seguito all’aggiornamento a Office 2016 (anche se non immediato), in ufficio abbiamo iniziato a notare una quantità di richieste di login superiore al dovuto.

Ora, che ogni tanto scada l’accesso al proprio account Office 365, ci può assolutamente stare. Che questo diventi però un’abitudine a ciascuna chiusura e riapertura programma (anche a distanza di pochi secondi) non è normale.

Office 2016: prima di partire e primi passi con ...

Ho provato a fare un reset dell’installazione, ho provato a cambiare profilo, ho cercato riferimenti in merito, nulla di fatto. Nei forum Technet c’è molta confusione, troppe informazioni spesso sbagliate. Sono arrivato a qualcosa di concreto, ho trovato finalmente un articolo che riproduce l’errore e lo risolve (questo: meyermed.com/2014/02/fixing-the-error-onenote-needs-a-password-to-sync-this-notebook-click-here-to-enter-your-password) e ho risolto l’anomalia sulla mia postazione, memorizzando le credenziali di Outlook ancora una volta e lasciando che OneNote tenesse la cache dell’autenticazione nel Gestore Credenziali di Windows.

Office 365: continue richieste di login da OneNote (e non solo) 1

Per poter replicare rapidamente la soluzione su più postazioni, ho scritto qualche riga di batch così da poterla dare in pasto al Kace di Dell e lanciarla agilmente ogni volta che ne ho bisogno. Funziona su Windows 7, 8.1 e anche 10:

cmdkey.exe /list > "%TEMP%\CredMan.txt"
findstr.exe MS.Outlook* "%TEMP%\CredMan.txt" > "%TEMP%\CredMan_Tokens.txt"
findstr.exe MicrosoftOffice15_* "%TEMP%\CredMan.txt" >> "%TEMP%\CredMan_Tokens.txt"
findstr.exe MicrosoftOffice16_* "%TEMP%\CredMan.txt" >> "%TEMP%\CredMan_Tokens.txt"
FOR /F "tokens=1,2 delims= " %%G IN (%TEMP%\CredMan_Tokens.txt) DO cmdkey.exe /delete:%%H
del "%TEMP%\CredMan.txt" /s /f /q
del "%TEMP%\CredMan_Tokens.txt" /s /f /q

Traducendolo in soldoni, il batch esporta le credenziali attualmente presenti nel Gestore Credenziali di sistema, ricerca tutto ciò che riguarda Office 2013 (15), 2016 (16) e Outlook. Per ciascuna corrispondenza andrà a rimuovere quel riferimento in Windows. Al termine –ovviamente– cancellerà l’esportazione precedentemente eseguita.

Ho creato un pacchetto eseguibile del batch sopra riportato e l’ho caricato sul mio spazio Box, nel caso tu voglia scaricarlo direttamente: app.box.com/s/siespaz9aqi3vzowetsjnovnw15z5eoi.

Dopo aver eseguito la pulizia, come già detto, dovrai autenticarti nuovamente su Outlook ma anche su OneNote se fai uso di Notebooks salvati su OneDrive personale o business (non servirà farlo su Excel o Word, hai già attivato la suite Office, non serve fare altro). Salvo errori, se l’autenticazione andrà a buon fine, ricompariranno le voci relative alle credenziali Office 16 nel gestore Windows, queste possono (e devono) essere lasciate lì.

Cheers.

Condividi l'articolo con i tuoi contatti: