Archives For Script

Nelle puntate precedenti: VBScript: rimuovere mappature verso le stampanti di rete (volendo c’era anche Mappare stampanti di rete con VBScript). Ci torno sopra perché lo script è stato riscritto e migliorato rispetto a quel vecchio standard che ci andava giù un pelo più pesante rispetto al dovuto, dove quel dovuto riguarda le code di stampa che non dovrebbero morire nel corso della modifica, faccio riferimento – per esempio – alla coda del PDF Creator o a quella di Microsoft Print to PDF, ma il ragionamento vale anche per le code create da una installazione professionale di Adobe e simili.

VBScript: rimozione stampanti e mappatura nuove code

source: unsplash.com / author: Bank Phrom

La sostanza rimane invariata in ogni caso: passano gli anni, cambiano le code di stampa (perché cambiano fondamentalmente i dispositivi utilizzati) e per quei rari casi in cui ti tocca lavorare con code molteplici anziché un gateway unico c’è bisogno di una mano nel banale mestiere del “togli e metti“. Un VBScript ci salverà tutti, evidentemente.

Rapidamente:

  • se hai bisogno di aggiungere code di stampa alle esclusioni (cioè al gruppo di quelle che verranno ignorate dallo script e lasciate lì in sacrosanta pace) dovrai inserire un riferimento in più in riga 20, per capirci: objPrinter.Name = "Contoso" dove Contoso è il nome della coda da ignorare e non rimuovere. Rispetta i vari “OR” e aggiungi quello che serve a te, altrimenti lo script smetterà di funzionare.
  • Sostituisci \\SERVERSTAMPANTI con l’indirizzo reale del tuo Print Server, medesima sorte per i nomi delle code di stampa (STAMPANTE01, 02 e 03).
  • Ho lasciato un MessageBox in chiusura di script che invita la persona a decidere la sua stampante predefinita in totale autonomia. Se tu volessi imporre invece la scelta, potrai utilizzare questo codice:
' Imposta stampante predefinita
'wshnet.SetDefaultPrinter "\\SERVERSTAMPANTI\NOME_STAMPANTE_PREDEFINITA"

Sostituendo chiaramente SERVERSTAMPANTI con l’indirizzo reale del tuo Print Server e NOME_STAMPANTE_PREDEFINITA con il nome reale della coda di stampa da tenere come predefinita sul sistema.

Lo script è praticamente pronto. Prova a lanciarlo con un doppio clic, salvo errori o sviste particolari dovresti poter godere del risultato in pochi secondi. Non dovrebbe essere necessario lanciarlo come amministratore ma questo dipende dal tuo ambiente e dalle policy restrittive che hai applicato ai tuoi utenti.

In caso di dubbi sai già che fare: l’area commenti è a tua disposizione (e non è necessario registrarsi).


immagine di copertina: unsplash.com / author: Bank Phrom
Condividi l'articolo con i tuoi contatti:

In seguito all’aggiornamento del pacchetto PHP 7 su Synology, mi sono accorto che il bot di Telegram non mi informava più riguardo il cambiamento di stato dell’Home Mode di casa. Ho dato un’occhiata al problema e scoperto che i moduli .so non erano più al loro posto. Ho quindi rimesso in ordine e tutto è tornato a funzionare come riportato nel mio vecchio articolo, questo di seguito:

Synology Surveillance Station: Home Mode automatico tramite WiFi

Per questo motivo ho deciso di scrivere qualche riga di codice che rendesse l’operazione più semplice nel caso in cui mi ricapiti lo stesso scenario. Ho poi condiviso con tutti lo script, caricandolo nel mio spazio GitHub all’interno del progetto (github.com/gioxx/AVM-FRITZ-Box-Synology-Surveillance-Home-Mode-Automation). Lo script si chiama molto banalmente php7ModEnabler.sh e ti posso rapidamente dire che:

  • Verifica l’esistenza del pacchetto PHP 7 sul NAS Synology, quindi:
    • Se non esiste il file /usr/local/lib/php70/modules/openssl.so lo recupera dal pacchetto PHP 7 (/volume1/@appstore/PHP7.0/usr/local/lib/php70/modules).
    • Fa la stessa cosa con /usr/local/lib/php70/modules/curl.so e /usr/local/lib/php70/modules/soap.so (che utilizzo anche per altro, e male non fa).
    • Modifica il php.ini di PHP 7 (/usr/local/etc/php70/php.ini) e “inietta” l’uso dei 3 moduli se questo non è stato precedentemente fatto (baso il mio controllo sull’esistenza della riga extension=openssl.so generalmente sotto extension_dir = "/usr/local/lib/php70/modules".
    • Riavvio PHP 7 (synoservicecfg -restart pkgctl-PHP7.0) per poter caricare correttamente il file php.ini modificato.

Ti basterà copiare lo script all’interno della tua home sul NAS, quindi renderlo eseguibile (chmod +x php7ModEnabler.sh) e lanciarlo con privilegi elevati (sudo ./php7ModEnabler.sh).

È una logica molto banale ma funzionante e utile per accelerare i tempi di configurazione del PHP 7 e relativi moduli su Synology. Ho modificato l’articolo originale per poter includere anche questa nuova possibilità. Ringrazio tutte le fonti utilizzate (quindi i relativi utenti che hanno fornito l’aiuto), tutte riportate all’interno dello script bash. Sentiti libero di suggerire delle alternative nei commenti o – se preferisci – di forkare direttamente il mio codice GitHub e proporre così possibili miglioramenti, correzioni o ulteriori controlli.

Buon lavoro.

Condividi l'articolo con i tuoi contatti:

Mi è già capitato in passato, TeamViewer è un ottimo programma ma può capitare che lasci dello “sporco in giro” (a cavallo tra cartelle sul disco e chiavi di Registro di Sistema), il quale andrebbe sempre invece pulito per permettere al software di funzionare al meglio e non avere problemi nella comunicazione con i server dell’azienda. A partire dalla versione 14 (quella a oggi “corrente“), nelle installazioni aziendali tramite pacchetto MSI, si perde l’uso di quello che un tempo era il TeamViewer Wrapper, concentrando tutto all’interno dell’installazione unica e completa chiamate “TeamViewer” (nel Pannello di Controllo di Windows).

Kace: TeamViewer Remote Host Switch 2

Ecco quindi che per poter operare al meglio sarà necessario pensare a:

  • disinstallazione dei Wrapper ancora in giro sulla rete aziendale (disinstallando il Wrapper, verrà disinstallato anche il prodotto principale, comodo per essere più rapidi nel rilascio);
  • disinstallazione di eventuali versioni di TeamViewer rimaste vive nonostante la cancellazione dei Wrapper;
  • rimozione delle chiavi di registro del programma;
  • installare la nuova versione di TeamViewer (sempre partendo dal pacchetto MSI) e caricare un eventuale file di impostazioni (TeamViewer_Settings.reg) precedentemente preparato.

Una base di partenza giusta la si può ereditare da questo thread sul forum di LANSweeper: lansweeper.com/forum/yaf_postsm51333findlastpost_TeamViewer-Silent-Remote-Uninstall.aspx#post56304, al resto ci pensa il solito prompt dei comandi e un file batch costruito ad-hoc.

:Disinstallazione
sc stop TeamViewer
taskkill /IM TeamViewer.exe /F
del /F /Q %TEMP%\TeamViewerSetup.log
wmic product where "name = 'Teamviewer 12 (MSI Wrapper)'" call uninstall /nointeractive
wmic product where "name = 'Teamviewer 13 (MSI Wrapper)'" call uninstall /nointeractive

:PuliziaRegistro
reg delete HKLM\SOFTWARE\TeamViewer /f
reg delete HKLM\SOFTWARE\WOW6432Node\TeamViewer /f
reg delete HKU\.DEFAULT\Software\Wow6432Node\TeamViewer /f
reg delete HKU\.DEFAULT\Software\TeamViewer /f
reg delete HKU\S-1-5-18\Software\TeamViewer /f
reg delete HKU\S-1-5-18\Software\Wow6432Node\TeamViewer /f
reg delete HKU\S-1-5-18\Software\TeamViewer /f

:NuovaInstallazione
start /wait msiexec.exe /i TeamViewer_Full.msi /qn IMPORTREGFILE=1 /l*v %TEMP%\TeamViewerSetup.log
ping 127.0.0.1 -n 5 > NUL
sc start teamviewer

Se nella tua rete esistono ancora dei TeamViewer 12 o 13, ti conviene integrare anche queste righe all’interno del blocco di disinstallazione:

wmic product where "name = 'Teamviewer 12'" call uninstall /nointeractive
wmic product where "name = 'Teamviewer 13'" call uninstall /nointeractive
wmic product where "name like '%TeamViewer%'" call uninstall /nointeractive

Senza di queste ho notato che talvolta il Wrapper (seppur apparentemente disinstallato in maniera corretta) tralascia qualcosa e manda in errore l’installazione del nuovo pacchetto. Se la macchina ha invece a bordo una versione antecedente di TeamViewer 14, questa verrà direttamente allineata all’ultima disponibile (quella del pacchetto MSI, chiaro).

Buon lavoro.


immagine di copertina: unsplash.com / author: Anas Alshanti

Condividi l'articolo con i tuoi contatti:

Ho voluto sperimentare un metodo alternativo di pubblicazione automatica su Twitter passando dal mio NAS anziché da IFTTT (che a dirla tutta non mi dava la possibilità di controllare una delle condizioni da me desiderate) o alternative già presenti sul mercato. Ho messo mano a PHP e Bash ancora una volta, lasciando che sia il NAS a fare il lavoro sporco programmato quotidianamente tramite utilità di pianificazione. Io ti racconto la mia esigenza e relativa esperienza, sta a te vederci un possibile utilizzo per qualcosa che ti riguarda.

Pubblicare su Twitter: farlo da Synology (e non solo)

L’esigenza

Dato un numero di giorni mancanti a una certa data (quindi in aggiornamento almeno una volta ogni 24h), ho bisogno di pubblicare un tweet quotidiano, come si trattasse di un conto alla rovescia. Scopro il servizio gratuito offerto da timercheck.io di Eric Hammond e decido di richiamarlo tramite PHP e l’aiuto della libreria twitteroauth di Abraham Williams, perché a vedere ciò che offre IFTTT e i trigger data/ora, Twitter e Webhooks non riesco a fare esattamente ciò che cerco.

Di cosa c’è bisogno

In realtà qualcosa è stato già dichiarato, ma ecco l’elenco della spesa:

  • Un NAS Synology o una qualsiasi macchina Linux-based (penso a un Raspberry, per dire), io comunque farò riferimento al primo citato.
  • PHP 7 (disponibile nel Synology Package Manager) con estensione openssl.
  • Te la ricordi l’utenza limitata che ho creato nell’articolo dedicato alla Surveillance Station? Ecco, ho riutilizzato la cartella del suo profilo (nell’esempio: /var/services/homes/api_user). Qui ho creato una cartella chiamata twitter-php-master all’interno della quale ho inserito gli script di cui ti parlerò dopo.
  • La libreria twitteroauth di Abraham Williams disponibile su GitHub.
  • Un account Twitter e relativa autorizzazione alla creazione / uso di applicazioni tramite apps.twitter.com (devi essere riconosciuto come sviluppatore).

Provo a dare per assodato che tu sappia ciò di cui stiamo parlando e salto a piè pari la creazione di un account Twitter e del profilo da sviluppatore, così come il modulo PHP 7 (ma ti parlerò dell’estensione relativa all’OpenSSL, tranquillo). Se qualcosa non ti è chiara o se non conosci un particolare passaggio non esitare a lasciare un commento in fondo all’articolo, proverò a darti una mano per quanto mi è possibile :-)

Detto ciò, partiamo.

Abilita il modulo OpenSSL su PHP 7

Collegati via SSH al tuo NAS (non sai come fare? Guarda qui), quindi passa all’utenza di root tramite un sudo -i seguito da invio, inserisci la password della tua utenza amministrativa e premi invio (non sai di cosa sto parlando? Guarda qui). Spostati ora in /usr/local/etc/php70 e modifica il file php.ini (esempio: vi php.ini). Ora:

  • cerca la stringa extension_dir = "/usr/local/lib/php70/modules"
  • Aggiungi subito sotto l’abilitazione di openssl:
    extension=openssl.so
  • Salva il file e chiudilo (tasto ESC, poi :wq seguito da invio).
  • Crea una copia del modulo openssl.so tramite un
cp /volume1/@appstore/PHP7.0/usr/local/lib/php70/modules/openssl.so /usr/local/lib/php70/modules/
  • Torna ora nel Gestore Pacchetti di Synology e riavvia PHP 7.

Tutto questo ti permetterà di evitare di incorrere nell’errore che qui di seguito ti mostro (da me ottenuto quando ho lanciato lo script di bash per la prima volta, dopo essermi dimenticato di abilitare SSL sul PHP del mio NAS):

Pubblicare su Twitter: farlo da Synology (e non solo) 1

Crea il conto alla rovescia tramite timercheck.io

Il funzionamento di questo semplicissimo servizio web è spiegato abbondantemente nell’articolo del suo stesso autore. Io sarò più breve: una giornata da 24 ore è composta da 86400 secondi (Google semplifica le cose), qui trovi un tool per il calcolo dei giorni tra due date, il gioco è praticamente fatto.

Trasforma il numero di giorni in secondi, quindi crea un URL univoco tramite timercheck.io che possa restituirti un output json contenente ciò che a te serve (il tempo che rimane) ogni volta che intendi visitare quell’URL tramite browser e non solo (nel mio caso lo richiamo proprio dallo script PHP di cui ti parlerò tra breve). Un esempio? timercheck.io/Test-Gioxx.org/60 crea un conto alla rovescia che dura un minuto, visitando semplicemente timercheck.io/Test-Gioxx.org e aggiornando la pagina noterai che il conto alla rovescia avanzerà portandosi sempre più verso lo zero (nel campo seconds_remaining), tutti i dati in json resteranno disponibili fino allo scadere di quel timer, e questo è proprio ciò che ti serve.

È caldamente consigliato creare un URL quanto più difficile da indovinare o replicare, questo perché in caso contrario chiunque potrà modificarlo o resettarlo al posto tuo, è un servizio totalmente aperto a tutti, senza gerarchie o complicati sistemi di autorizzazione. Accetti un’idea che credo possa tornarti utile? Genera un contatore nuovo con un nome qualsiasi e una durata di 10 secondi, copia il suo request_id e crea un nuovo contatore con il nome che ti interessa al quale farai seguire l’ID copiato (esempio: timercheck.io/Test-Gioxx.org-dc8a395c-10d7-11e9-b585-175833651ae5/60), questo è certamente un URL molto più univoco di quello da te precedentemente pensato.

Il tuo contatore è pronto, puoi procedere verso lo script PHP che si occuperà di lanciare il tuo tweet in rete.

post-tweets.php

Uno script PHP che troverà posto all’interno della cartella /var/services/homes/api_user/twitter-php-master e che conterrà le istruzioni necessarie per inviare il cinguettio sulla piattaforma. Prima però di dedicare la giusta attenzione a questo specifico script, devi scaricare una copia aggiornata della libreria twitteroauth di Abraham Williams, puoi farlo con un semplice clic qui. Scompatta il contenuto del file ZIP all’interno della cartella twitter-php-master (non ripeto la solita posizione completa, dai!), non toccare null’altro, non serve.

Torniamo a quello che per comodità chiamerò post-tweets.php, lo script che si occuperà di pubblicare il tweet. Ti mostro il contenuto del mio, rimuovendo i dettagli personali ma mantenendo l’esempio testuale:

Ciò che dovrai ritoccare riguarderà ovviamente i parametri personali e il testo da inviare online. Dovrai specificare CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN e ACCESS_TOKEN_SECRET dell’applicazione che potrà scrivere impersonando il tuo utente, aggiungere il timer da tenere d’occhio (nell’esempio ho mantenuto https://timercheck.io/Test-Gioxx.org/60, a te toccherà specificare qui il tuo timer) e modificare il testo da pubblicare in base alla condizione del countdown: se questo è attivo o se è terminato (lo posso fare monitorando uno dei valori output del json, in questo caso lo status).

Piccola nota di finezza è il round() applicato al calcolo dei giorni (numero dei secondi residui diviso 86400), così da evitare di far comparire dei decimali nel tweet.

Il risultato dovrebbe assomigliare a questo:

Programmare l’operazione

Hai terminato tutta la preparazione, non ti resta che automatizzare il processo tramite Utilità di pianificazione e un banalissimo script bash per rendere tutto più immediato:

Salva il file bash nella solita cartella (twitter-php-master), avvia l’utilità di pianificazione Synology e crea una nuova operazione programmata da far girare ogni giorno all’ora che preferisci (io ho scelto le 8:00):

Pubblicare su Twitter: farlo da NAS Synology (e non solo)

Ce l’hai fatta, salvo errori sei appena riuscito a programmare la pubblicazione di un tweet tramite il tuo account. Il mio è un esperimento per imparare qualcosa di nuovo, utile per arrivare a una data per me molto importante, e nel tuo caso qual è la giustificazione per aver avviato un nuovo contatore con pubblicazione su Twitter automatizzata? :-)

Buona giornata!


Credits: artisansweb.net/tweet-twitter-php

Condividi l'articolo con i tuoi contatti:

Ovvero: come sopperire a una mancanza banale del software che a oggi non permette di fare pulizia di quei software non più in giro, ma ancora presenti nel database, un po’ in barba a ciò che è invece possibile fare attraverso il MIA nella schermata relativa ai dispositivi registrati.

NotifyKace.vbs: nuova versione per gli agenti 8

Ammettilo: lo hai fatto almeno una volta nella tua vita, sei andato nella schermata software, li hai messi in ordine per numero di installazioni e hai cominciato a selezionare i checkbox lateralmente per poi andare a cancellarli dal database della tua appliance. L’ho fatto anche io, la cosa ha funzionato così per un paio di volte, poi mi ha stancato perché, nonostante le prime pagine fossero tutte a quantità 0, le altre contenevano un misto dal quale non volevo eliminare le voci con qualche installazione ancora presente nella rete controllata. Per questo motivo ho cercato una soluzione ufficiale che a quanto pare non c’è, passeggiando poi per un viale work-around che funziona egregiamente.

Per filtrare i software con zero installazioni in rete client gestita ti basterà andare in InventorySoftware, fare clic su Advanced Search e inserire questi parametri di ricerca:

  • File Size → = → 0
  • Devices → does not contain → (lascia vuoto l’ultimo box)
  • (opzionale) Publisher → does not contain → (compila con ciò che ti interessa)

Prima ti mostro la schermata catturata dal Kace che gestisco, poi ti spiego il perché dell’opzionale e del valore “GSolone” che ho assegnato nella mia ricerca:

Kace: filtrare facilmente i software con 0 installazioni

L’opzionale è presto detto, ci sono alcuni software “Home Made” che mi permettono di generare delle Custom Inventory Rules o di prevedere comportamenti di Kace che rispettano alcune procedure stabilite dal nostro team IT, talvolta potrebbe capitare di avere 0 dispositivi associati a quei Custom Software, vorrei evitare di perderli in qualche pulizia manuale alla quale non si pone sufficiente attenzione. Questo per dire che anche nel tuo caso puoi fare delle eccezioni da non far finire nel calderone, basando una parte di ricerca avanzata su un parametro ben preciso.

Scopo del gioco è quello di salvare la ricerca avanzata per poterla ripescare facilmente in seguito, per passare lì di tanto in tanto e fare piazza pulita di ciò che non ti interessa realmente più.

Buon lavoro!


Credits: itninja.com/question/k1000-kace-cleaning-up-software-inventory

Condividi l'articolo con i tuoi contatti: