Archives For Sysinternals

Ciao, questa è una pillola più che rapida dedicata agli strumenti Sysinternals che sono certo avrai utilizzato almeno una volta nella tua vita (o forse no? Vabbè, mal che vada questa è una lettura andata a vuoto). Pur trattandosi di utilità più che preziose, soffrono tutte di un tallone d’Achille che riguarda l’accettazione di licenza in fase di primo avvio. Se stai lanciando un comando per la prima volta su una macchina remota, il popup di licenza EULA potrebbe presentarsi davanti agli occhi dell’utilizzatore, cosa affatto consigliata se non lo si vuole allarmare.

Windows 2012 R2: mostrare l'icona This PC senza Desktop Experience

Per questo motivo è possibile –prima di partire o a monte, tramite GPO per esempio– creare o modificare due chiavi di registro per accettare automaticamente la licenza e proseguire dritti con la funzionalità del tool che si intende utilizzare. Per la precisione, parliamo di questo rapido processo:

reg.exe ADD HKCU\Software\Sysinternals /v EulaAccepted /t REG_DWORD /d 1 /f
reg.exe ADD HKU\.DEFAULT\Software\Sysinternals /v EulaAccepted /t REG_DWORD /d 1 /f

Due comandi da poter lanciare via prompt, Kace o altro metodo (a te la scelta secondo necessità), che ti permetteranno di saltare a piè pari l’incidente di percorso. Questo sostituisce in un solo colpo l’accettazione EULA per ciascun software, come riportato nell’articolo originale di Peter Hahndorf (peter.hahndorf.eu/blog/post/2010/03/07/WorkAroundSysinternalsLicensePopups).

Buon lavoro.

×

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"!
Condividi l'articolo con i tuoi contatti:

È uno di quei consigli che non bisognerebbe mai dare a nessuno perché è un po’ come dare l’utente di root di una macchina Linux a cuor leggero: i danni potrebbero essere dietro l’angolo pronti ad aspettarvi e senza neanche la prova d’appello. L’utente “SYSTEM” è quello che vedete all’interno del Task Manager di una macchina Windows:

Windows7-TaskManager

Quell’utente ha privilegi anche superiori all’administrator locale e può quello che generalmente nessun utente dovrebbe potere. In rari (rarissimi) casi ho avuto la necessità di fingermi quell’utente per andare a risolvere situazioni delicate o cancellare file / chiavi di registro diversamente inaccessibili. Sia chiaro: non si dovrebbe mai utilizzarlo, mi pare di aver ribadito il concetto abbastanza spesso, e non c’è cura alla stupidità nel caso ne si abusi.

Il metodo per salire ulteriormente di livello esiste, funziona e si ottiene tramite un banale PsExec sui sistemi più recenti (non serve per Xp o 2000, saltate già al prossimo passaggio): technet.microsoft.com/it-it/sysinternals/bb897553.aspx. Una volta scaricato il pacchetto sul vostro PC scompattatelo, lanciate un prompt dei comandi come amministratore (almeno locale, se non addirittura di dominio), quindi utilizzate una stringa ad-hoc (che varia da sistema x86 a x64):

SYSTEM-psexecoperation

Su Windows Xp (e inferiori, fino a Windows 2000 personalmente testato) occorrerà creare un’operazione schedulata che potrete poi in seguito lanciare manualmente, il codice è molto semplice (e si, a qualcuno ricorderà il funzionamento di Conficker, lo so bene):

SYSTEM-atoperation

Seguito poi dall’apertura delle Operazioni Pianificate (Start / Esegui / “control schedtasks” senza virgolette, ndr) e classico clic destro sull’operazione creata / Esegui ora.

In entrambi i casi vi comparirà a video una nuova finestra, un nuovo prompt dei comandi che starà girando come utente SYSTEM, non chiudete la finestra DOS aperta precedentemente per evitare che si chiuda anche quella generata, in pratica un risultato molto simile al seguente:

SYSTEMcmd-Started

Occhio: da ora in poi qualsiasi comando, operazione o eseguibile richiamato da questo prompt dei comandi passerà sotto utenza SYSTEM, dovrebbe essere abbastanza chiaro il concetto, tutto risponderà ai vostri comandi, anche ciò che in altri casi (magari con un utente amministrativo) si rifiuta di farlo.

Buon lavoro :-)

Condividi l'articolo con i tuoi contatti:

Quando si prova a eseguire un comando con utente e password da remoto la risposta è un “Access Denied” nonostante la bontà delle credenziali passate con il solito “-u -p”? Il problema è noto ed è decisamente seccante quando si parte da un’utenza non amministrativa sul dominio.

SysInternalsAggirarlo è sufficientemente semplice. A partire da Windows Vista Microsoft ha introdotto il CMDKey che permette di gestire le credenziali di accesso salvate nel sistema: technet.microsoft.com/en-us/library/cc754243%28v=ws.10%29.aspx.

Partendo da questo presupposto si potrà utilizzare questo trucco che ho reperito sul forum di SysInternals:

forum.sysinternals.com/psexec-access-denied-when-using-explicit-logon_topic17497_post90220.html#90220

Il risultato, “eleganza della soluzione” a parte, funziona perfettamente. In un batch (o in un VBScript che presto pubblicherò sul blog) richiamare il CMDKey per salvare temporaneamente le chiavi di accesso al sistema per poi lanciare l’operazione in PsExec e cancellarle come nulla fosse è un attimo.

E anche questa è andata.

Condividi l'articolo con i tuoi contatti:

Sto per tirarvi fuori il solito post “viaggio mentale” che spiega un metodo valido e funzionante (provato su strada) per aggiornare in modo massivo la versione di UltraVNC utilizzata magari nella vostra rete LAN, inserendo di default alcune impostazioni del programma, ivi compresi gruppi di dominio autorizzati a fare assistenza remota!

# conoscere il campo

La casistica affrontata riguarda una rete aziendale con dominio Microsoft, tutte macchine XP regolarmente aggiornate (e qualche Vista), utenti non amministratori del proprio PC, installazioni di UltraVNC (diverse versioni mai allineate) e RealVNC 4 miste. Tutti i computer montano diverse unità di rete all’avvio, tra queste si trovano la cartella personale ed una cartella generica per le installazioni software. Proprio grazie a quest’ultima –e qualche trucco batch– sarà possibile distribuire l’ultima versione dell’UltraVNC in modo totalmente automatizzato.

# cosa serve per partire

Basterà installare su una qualsiasi macchina (la prima, una cavia) l’UltraVNC (ultima release disponibile sul sito web ufficiale) configurandolo esattamente come vogliamo diventi su tutte le macchine della rete. Si parte avviando una piccola utility fornita nelle ultime release di UltraVNC:

uvnc_settings.exe” generalmente in C:ProgrammiUltraVNC (o Program Files per Windows Vista)

Questa permette di modificare e salvare (in un file .ini, ndr) tutte le impostazioni della parte server installata sulla macchina. Un file che –volendolo trasportare altrove con il giusto metodo– imposta già il comportamento di una nuova installazione UltraVNC:

Fatte le dovute modifiche, il file ultravnc.ini sarà esportabile altrove. Un consiglio? Create sul desktop (o una posizione a scelta) una cartella nella quale raccogliere tutti i file necessari alla migrazione, compresi gli script che andremo a creare tra breve, è nettamente più comodo.

Tocca ora ai gruppi di dominio autorizzati a collegarsi in VNC sulla macchina. Una volta inseriti a mano sul “PC Cavia“, UltraVNC salverà le informazioni in una chiave di registro che si trova in:

[HKEY_LOCAL_MACHINESOFTWAREORL]

il tutto codificato in HEX. Non preoccupatevi del contenuto ed esportate il .reg nella cartella precedentemente creata. Dovrebbe contenere una sola sottochiave ([HKEY_LOCAL_MACHINESOFTWAREORLWinVNC3]), dovrebbe assomigliare a qualcosa del genere:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESOFTWAREORL]

[HKEY_LOCAL_MACHINESOFTWAREORLWinVNC3]
"ACL"=hex:02,00,50,00,02,00,00,00,00,00,24,00,03,00,00,00,01,05,00,00,00,00,00,
 05,15,00,00,00,6f,20,**,******,********0,00,24,00,
 **,****,*****,00,00,00,05,15,0*,**,00,6f,20,c3,5a,ff,1a,ef,4c,bf,
 7d,f7,6d,69,35,00,00

(chiaramente gli asterischi sono stati messi a random per offuscare il contenuto del .reg da me utilizzato).

Approfittate di questo momento per inserire nella solita cartella anche PSKill, tool della SysInternals (Microsoft) facente parte della suite PSTools, disponibile gratuitamente sul sito Microsoft:

technet.microsoft.com/en-us/sysinternals/bb896649.aspx

Servirà per terminare in modo sicuro il servizio winvnc eventualmente già aperto sulla macchina. Funziona allo stesso modo del taskman / taskkill via DOS ma in casi un pò più “recividi” con processi particolarmente rognosi da buttare giù, funziona decisamente meglio. L’unico problema è che l’applicativo, aperto per la prima volta sulla macchina, chiederà se accettare o meno la licenza di utilizzo, il tutto facilmente aggirabile tramite file di registro da avviare sulla macchina ospite:

Windows Registry Editor Version 5.00

[HKEY_USERSS-1-5-21-1522737263-1290738431-1844936127-13971SoftwareSysinternalsPsKill]

"EulaAccepted"=dword:00000001

Ultimo passaggio di “preparazione” è il file di informazioni di installazione *.inf, contenente le indicazioni su ciò che verrà installato sulla macchina, tutto abbastanza comprensibile con un minimo di impegno ;)

[Setup]
Lang=en
Dir=C:ProgrammiUltraVNC
Group=UltraVNC
NoIcons=0
SetupType=full
Components=ultravnc_server,ultravnc_viewer
Tasks=installservice,startservice

in sintesi: verrà installato UltraVNC nella directory predefinita (C:ProgrammiUltraVNC calcolando che stiamo parlando di client XP italiani), interfaccia in lingua inglese, senza icone sul Desktop, con componenti Server e Viewer tenendo conto che il servizio ultravnc_server verrà inserito tra quelli riconosciuti da Windows (Pannello di Controllo / Strumenti di amministrazione / Servizi) ed avviato da subito.

Basterà incollare quanto sopra riportato su un nuovo file Blocco Note (o editor di testo equivalente) e salvare il tutto come ultravnc.inf nella cartella della migrazione.

# contenuto finale della cartella

Se avete seguito alla lettera l’articolo (fino ad ora, chiaramente) dovreste trovarvi davanti ad una cartella così composta (grosso modo):

Andiamo ora a vedere come creare quel file install.bat che si occuperà di:

  • rilevare ed eventualmente disinstallare versioni di RealVNC 4 o precedenti
  • rilevare ed eventualmente disinstallare vecchie versioni di UltraVNC
  • installare l’ultima versione disponibile di UltraVNC caricata nella cartella dell’update con le impostazioni dettate dal file di informazioni d’installazione
  • impostare automaticamente le opzioni dell’UltraVNC appena installato con il file di configurazione precedentemente generato
  • aggiungere i gruppi autorizzati alla connessione sulla macchina che chiede assistenza e che ha appena “subìto” l’aggiornamento forzato

Mani ad un editor di testo, si parte.

# install.bat

Una veloce occhiata alle procedura permetterà di capire come strutturare poi uno script batch finale che controllerà dapprima la presenza degli applicativi per azionare in seguito le funzioni necessarie all’upgrade.

Stop dei servizi, è necessario

Lo stop dei servizi è chiaramente necessario per poter lavorare, a patto che siano effettivamente avviati. Per sicurezza è meglio provare a chiuderli a prescindere dal loro stato, giusto no? :)

echo *** Stop Servizi ***
echo.

net stop "uvnc_service"
net stop "VNC server"

Chi c’è c’è, gli altri si disinstallano

Ciò che va controllato è sicuramente la presenza del RealVNC 4 e di eventuali altre versioni di UltraVNC non pari all’ultima da noi scelta. Per questo motivo sarà necessario imporre al programma di effettuare da subito un “paio di ricerche incrociate“:

if exist %programfiles%RealVNCVNC4 goto REALVNC
if not exist %programfiles%UltraVNC goto INSTALL

A cosa corrispondono quei GOTO? Lo scopriamo subito :)

Rilevare e disinstallare RealVNC 4

Tutto molto semplice e, come ogni programma che si rispetti, prevede un parametro silent che si occuperà di fare il tutto senza che l’utente si accorga di nulla, peculiarità fondamentale in casi come questo:

:REALVNC
echo *** Rimozione RealVNC ***
"%programfiles%RealVNCVNC4unins000.exe" /verysilent /norestart
cd %programfiles%RealVNC
rmdir VNC4 /s /q
cd ..
rmdir RealVNC /s /q
echo.
echo Fatto, procedo.
goto CONTROLLO

Prevista chiaramente la distruzione delle cartelle riguardanti l’applicativo, proprio nelle ultime righe “rmdir“.

Rilevare e disinstallare vecchie versioni di UltraVNC

Anche in questo caso il programma si assicurerà che esista un’installazione di UltraVNC procedendo poi con una disinstallazione silente attraverso il precedente utilizzo di PSKILL per terminare il file eseguibile molto probabilmente ancora aperto:

:CONTROLLO
echo.
echo *** Rimozione vecchia versione UltraVNC ***
echo.

if exist %programfiles%UltraVNC "%programfiles%UltraVNCunins000.exe" /verysilent /norestart
if exist %programfiles%UltraVNC regedit /s \POSIZIONECARTELLAUPDATEpskill.reg
if exist %programfiles%UltraVNC \POSIZIONECARTELLAUPDATEpskill winvnc.exe
if exist %programfiles%UltraVNC rd %programfiles%UltraVNC /s /q
goto INSTALL

Prima di lanciare il PSKILL noterete l’associazione forzata del file di registro che permetterà di saltare la fase di accettazione licenza di utilizzo dell’applicativo. Inutile specificare che al posto di “POSIZIONECARTELLAUPDATE” dovrete sostituire la cartella esatta sul server che sta ospitando gli script ed i file di aggiornamento.

Installazione e configurazione automatica UltraVNC

Ultimo passo per concludere la procedura automatizzata. La funzione si occuperà di installare l’UltraVNC passandogli tutti i parametri decisi in precedenza, comprese password, gruppi di dominio e quant’altro ancora. Lo script non è neanche così complicato, i comandi diretti e le variabili utilizzate sono opera di Stefano (grazie!), ormai fondamentale quando si parla di scriptare in batch qui in ufficio :) Io non ho fatto altro che dare una veloce occhiata e mettere a posto qualche “piccola gaffe“:

:INSTALL
echo.
echo *** Installazione nuova versione UltraVNC ***
echo.
if not exist %programfiles%UltraVNC mkdir %programfiles%UltraVNC
copy \POSIZIONECARTELLAUPDATEultravnc.ini "%programfiles%UltraVNC"
regedit /s \POSIZIONECARTELLAUPDATEuvnc.reg
"\POSIZIONECARTELLAUPDATEUltraVNC_1.0.5.3_Setup.exe" /verysilent /loadinf=\POSIZIONECARTELLAUPDATEultravnc.inf
goto FINE

:FINE
echo Processo di aggiornamento terminato

Una volta creata la directory nella quale si andrà ad installare l’applicativo, si copia il file di impostazioni e si associa quel .reg precedentemente creato forzando il tutto da shell (regedit /s). Ora si potrà finalmente lanciare il setup, rigorosamente in silent, facendogli recuperare le informazioni che avevamo stabilito inizialmente (/loadinf=…).

Il gioco è fatto, UltraVNC si installerà e avvierà il servizio server al quale noi potremo “chiedere udienza” dopo poco per la prima volta, a conferma del corretto funzionamento dello script batch!

# avvertenze

La buona riuscita dell’installazione (o dell’aggiornamento) richiede l’essere puntigliosi nel controllare i puntamenti ai giusti server, le autorizzazioni in lettura per gli utenti di dominio, la presenza di tutti i file descritti. Ricordatevi che lo script va lanciato come amministratore di dominio o almeno della macchina locale (e qui può aiutarvi un psexec anche da remoto). Nel caso in cui vi dia problemi provate a segnalarmelo nei commenti per ottenere supporto.

Una versione completa del codice sorgente è disponibile su /dev:

dev.gxware.org/?15

chiaramente copiabile e modificabile a patto che, torno a ripetere, anche tutti gli altri file risiedano nella stessa cartella del batch che andrete a lanciare.

In un articolo che spero di poter scrivere e pubblicare a breve vi spiegherò come, attraverso l’ennesimo script, potrete lanciare a ripetizione il comando di psexec su tutte le macchine di una lista PC precedentemente generata, così da avviare anche questo script di mass-update senza il minimo sforzo.

Buon lavoro :)

Condividi l'articolo con i tuoi contatti: