Archives For VBScript

sourcecode-vbscriptSai già come funziona, di tanto in tanto apro il cassetto degli attrezzi, utilizzo uno script e poi penso che potrebbe essere interessante per qualcun altro sul web, quindi decido di condividerlo con te che sei dall’altra parte del monitor e che stai forse svolgendo un mestiere simile al mio.

Qualche tempo fa ho rimaneggiato un po’ di codice per realizzare un piccolo VBScript che fosse in grado di ritoccare la descrizione di un PC da remoto, senza che l’utente si accorga di nulla, collegandomi in maniera amministrativa grazie alla rete di dominio.

Da un’idea e realizzazione originale di Rob Dunn (il suo sito web non esiste più, nda), il codice qui di seguito mostra un popup a video che legge l’attuale descrizione di un PC (raggiunto tramite hostname o IP) e permette contestualmente di modificarla.

' PC Description Changer per Windows Xp+
' GSolone 2015 v 0.3
' Basato su script originale di Rob.Dunn (www.theitoolbox.com)
' Ultima modifica 17122015
'
' - accetta da prompt dei comandi il nome macchina (o IP) da raggiungere (es. PCDescription.vbs 127.0.0.1)
' - Windows XP e 2003 richiedono un riavvio macchina per poter mostrare poi la description corretta.
' - il servizio di remote registry deve essere attivo e occorre anche avere le permission WMI)
' - lo script tronca oltre i 48 caratteri forniti come testo della descrizione PC
'
' LO SCRIPT VA ESEGUITO COME AMMINISTRATORE MACCHINA O DI DOMINIO!

Dim strDescription, strComputer, reg, objRegistry
Dim ret, msg, ValueName 

Const HKLM = &H80000002

if WScript.Arguments.Count = 0 then
    'Richiesta IP o hostname macchina da modificare
    strComputer = InputBox("PC Description Changer (Win Xp +)" & vbCR & vbCR & "VA ESEGUITO COME ADMIN LOCALI O DI DOMINIO!" & vbCR & vbCR & "Inserisci il nome macchina o indirizzo IP da raggiungere (vuoto o clic su Annulla per uscire dallo script)" & vbCR, "PC Description Changer", "W7-TEST")
else
    'Se l'indirizzo IP / Hostname mi è stato passato da riga di comando, posso procedere direttamente
    strComputer = Wscript.Arguments(0)
end if

if strComputer = "" then wscript.quit

on error resume next

Set reg = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")

if err.number <> 0 then 
  msgbox "Problemi di connessione al database WMI di " & strComputer & ".  Verifica che il PC sia acceso e che tu abbia tutti i permessi per poter effettuare l'operazione",16,"Errore di connessione a '" & strComputer & "'" 
  wscript.quit  
end if

on error goto 0 

Set objRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2").ExecQuery("Select Description FROM Win32_OperatingSystem")


For Each object In objRegistry
    strDescription = object.Description 
Next 

value = inputbox("Inserisci una nuova descrizione per '" & strComputer & "' (o fai clic su Annulla per terminare lo script):","PC Description Changer",strDescription)

If value = strDescription then wscript.quit

key = "SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters"
ValueName = "srvcomment"

If Len(Value) > 48 Then Value = Left(Value, 48)
ret = reg.SetStringValue(HKLM, key, ValueName, value)

if ret <> 0 then msgbox "Aggiornamento remoto fallito."

All’interno del codice c’è anche qualche rapida istruzione (in parte riproposta a video) per guidarti all’uso o a capire cosa può andare storto. Ricorda che il servizio di Remote Registry deve essere attivo sulla macchina di destinazione (e l’account che lancia lo script deve avere i permessi per amministrarla, vale quindi lanciarlo da un prompt dei comandi elevato), altrimenti si incorre in popup di errore come questo:

VBS: cambiare la descrizione di un PC da remoto

Tutti i test sono stati condotti su Windows 7, 8.1 e 10. In passato l’ho usato anche per macchine XP senza battere ciglio, spero però per te che tu non abbia più quel SO in giro ;-)

Per dubbi o chiarimenti, citofonare nell’area commenti.

Cheers.

Da quando esiste Microsoft Office, esiste anche la possibilità di rimuoverlo dalla macchina in maniera più efficace, forzata, nel caso in cui i file necessari a una disinstallazione regolare da Pannello di Controllo vengano a mancare o risultino danneggiati per qualsivoglia motivo. Sai dove mettere mano o come muoverti in caso di emergenza? No? Poco male, posso suggerirti che tool scaricare, senza la necessità di prodotti di terze parti, perché Microsoft mette già a disposizione di amministratori di sistemi e semplici utenti casalinghi script sempre aggiornati e che difficilmente falliscono anche nelle situazioni peggiori.

Disinstallazione Office 365 (2016): OffScrub16 e OffScrubc2r

Per evitare errori, Microsoft propone da tempo delle soluzioni eseguibili che, una volta avviate, lanciano autonomamente operazioni ben precise sulla macchina, consegnando poi il risultato finale a video, così che tu possa verificarlo e accertarti che tutto sia andato liscio. Quegli eseguibili in realtà, nascondono dei file VBScript molto complessi che possono essere facilmente recuperati. Ancora oggi il metodo è perfettamente funzionante e ho imparato a capire come muovermi semplicemente leggendo qualche articolo online, uno tra tanti (ben realizzato) è ancora disponibile all’indirizzo blogs.technet.microsoft.com/odsupport/2011/04/08/how-to-obtain-and-use-offscrub-to-automate-the-uninstallation-of-office-products.

Sulla base di questo, è facile crearsi una piccola cartella da tenere su chiave USB (o altrove) per recuperare al momento opportuno ciò che più ti è utile. Ho caricato ogni VBS online, così che tu possa scaricarli facilmente, li trovi (aggiornati alle release Click2Run e Office 2016 anche con abbonamento 365) all’indirizzo app.box.com/s/lufdy9nqb7ebr8j53asbn9rkdrbd9smr. Utilizzarli è semplice, puoi fare riferimento al primo blog Technet che ti ho riportato qualche riga fa, gli script permettono di lavorare su Office dalla sua versione 2003 alla più recente 2016 (come già detto).

Se sei solo curioso e non vuoi scaricare alcunché, puoi trovare una copia di OffScrub16.vbs su Gist. Sempre lì trovi anche una copia di OffScrubc2r.vbs, per la pulizia dei prodotti Click2Run (più generico, in grado di spazzare via anche le ultime versioni dei prodotti Microsoft per l’ufficio, compresi Project o Visio, tanto per dire).

Vecchia scuola

Se vuoi provare a disinstallare un prodotto in maniera regolare (o manualmente), devi sapere che Microsoft propone un documento estremamente chiaro all’indirizzo support.office.com/en-us/article/Uninstall-Office-2013-Office-2016-or-Office-365-from-a-PC-9dd49b83-264a-477a-8fcc-2fdf5dbf61d8, all’interno del quale potrai specificare il sistema operativo utilizzato (così da ottenere le istruzioni da seguire passo-passo), e in alternativa scaricare quello che viene chiamato “Easy Fix Tool” che andrà a effettuare in maniera completamente autonoma le operazioni sulla tua macchina, così da permetterti di pulire ogni file, ogni chiave di registro, preparando così il sistema a ricevere da zero una nuova installazione di Office. Ti stai chiedendo se si tratta del VBS più recente di cui ho parlato poco fa? Si, è lui, semplicemente conservato all’interno dell’eseguibile e depositato in maniera temporanea nella cartella C:\Users\administrator\AppData\Local\Temp\msdtadmin\_1AD76E40-C8F2-4381-82D3-781C693A6746_\cabpkg, a meno di diversa versione da te scaricata. Cambia poco in realtà (può variare la stringa esadecimale, il resto rimane generalmente invariato).

Se neanche il tool può nulla, ricordati che hai la possibilità di intervenire manualmente su Office 2016 o Office 2013, tanto per citare i due più recenti.

Integrazione

Manco a dirlo, gli script VBS di Microsoft sono perfetti per essere integrati all’interno di script più complessi o batch che possano richiamarli in caso di necessità. Ovviamente anche Dell Kace ne può fare uso in base a ciò che trova sul sistema. Uno script utilizzato per lavoro prevede il rilevamento delle versioni antecedenti all’ultima 2016 con conseguente pulizia eseguita lanciando il VBS adatto, per capirci:

:findoffice
set ofc2k3=No
set ofc2k7=No
set ofc2k10=No
set ofc2k13=No
set visio2k13=No
set prj2k13=No

if "%processor_architecture%" == "AMD64" GOTO AMD64
if "%PROCESSOR_ARCHITEW6432%" == "AMD64" GOTO AMD64
if "%processor_architecture%" == "x86" GOTO x86
GOTO exitcleaner

:AMD64
echo Sistema a 64 bit
if exist "%ProgramFiles%\Microsoft Office\Office11\WINWORD.exe" set ofc2k3="Si (Versione x64)"
if exist "%ProgramFiles(x86)%\Microsoft Office\Office11\WINWORD.exe" set ofc2k3="Si (Versione x86)"
if exist "%ProgramFiles%\Microsoft Office\Office12\WINWORD.exe" set ofc2k7="Si (Versione x64)"
if exist "%ProgramFiles(x86)%\Microsoft Office\Office12\WINWORD.exe" set ofc2k7="Si (Versione x86)"
if exist "%ProgramFiles%\Microsoft Office\Office14\WINWORD.exe" set ofc2k10="Si (Versione x64)"
if exist "%ProgramFiles(x86)%\Microsoft Office\Office14\WINWORD.exe" set ofc2k10="Si (Versione x86)"
if exist "%ProgramFiles%\Microsoft Office 15\root\office15\WINWORD.exe" set ofc2k13="Si (Versione O365 x64)"
if exist "%ProgramFiles(x86)%\Microsoft Office 15\root\office15\WINWORD.exe" set ofc2k13="Si (Versione O365 x86)"
if exist "%ProgramFiles%\Microsoft Office\Office15\VISIO.exe" set visio2k13="Si (Versione O365 x64)"
if exist "%ProgramFiles(x86)%\Microsoft Office 15\root\office15\WINWORD.exe" set visio2k13="Si (Versione O365 x86)"
if exist "%ProgramFiles%\Microsoft Office\Office15\WINPROJ.exe" set prj2k13="Si (Versione O365 x64)"
if exist "%ProgramFiles(x86)%\Microsoft Office 15\root\office15\WINPROJ.exe" set prj2k13="Si (Versione O365 x86)"
GOTO execute

:x86
echo Sistema a 32 bit
if exist "%ProgramFiles%\Microsoft Office\Office11\WINWORD.exe" set ofc2k3="Si (Versione x86)"
if exist "%ProgramFiles%\Microsoft Office\Office12\WINWORD.exe" set ofc2k7="Si (Versione x86)"
if exist "%ProgramFiles%\Microsoft Office\Office14\WINWORD.exe" set ofc2k10="Si (Versione x86)"
if exist "%ProgramFiles%\Microsoft Office 15\root\office15\WINWORD.exe" set ofc2k13="Si (Versione O365 x86)"
if exist "%ProgramFiles%\Microsoft Office\Office15\VISIO.exe" set visio2k13="Si (Versione O365 x86)"
if exist "%ProgramFiles%\Microsoft Office\Office15\WINPROJ.exe" set prj2k13="Si (Versione O365 x86)"
GOTO execute

:execute
cscript //nologo \\TUOSERVERKACE\cleanofc\ofc_start.vbs %ofc2k3% %ofc2k7% %ofc2k10% %ofc2k13% %visio2k13% %prj2k13%

:ofc2003
if %ofc2k3%=="Si (Versione x86)" cscript \\TUOSERVERKACE\cleanofc\OffScrub03.vbs ALL /Q /NoCancel /BYPASS 1
if %ofc2k3%=="Si (Versione x64)" cscript \\TUOSERVERKACE\cleanofc\OffScrub03.vbs ALL /Q /NoCancel /BYPASS 1
:ofc2007
if %ofc2k7%=="Si (Versione x86)" cscript \\TUOSERVERKACE\cleanofc\OffScrub07.vbs ALL /Q /NoCancel /BYPASS 1
if %ofc2k7%=="Si (Versione x64)" cscript \\TUOSERVERKACE\cleanofc\OffScrub07.vbs ALL /Q /NoCancel /BYPASS 1
:ofc2010
if %ofc2k10%=="Si (Versione x86)" cscript \\TUOSERVERKACE\cleanofc\OffScrub10.vbs ALL /Q /NoCancel /BYPASS 1
if %ofc2k10%=="Si (Versione x64)" cscript \\TUOSERVERKACE\cleanofc\OffScrub10.vbs ALL /Q /NoCancel /BYPASS 1
:ofc2013
REM Utilizzo lo stesso script per rimuovere anche Visio e Project 2013 (sempre in versione C2R 365)
if %ofc2k13%=="Si (Versione O365 x86)" cscript \\TUOSERVERKACE\cleanofc\OffScrub13.vbs ALL /Q /NoCancel /BYPASS 1
if %ofc2k13%=="Si (Versione O365 x64)" cscript \\TUOSERVERKACE\cleanofc\OffScrub13.vbs ALL /Q /NoCancel /BYPASS 1
if %visio2k13%=="Si (Versione O365 x86)" cscript \\TUOSERVERKACE\cleanofc\OffScrub13.vbs ALL /Q /NoCancel /BYPASS 1
if %visio2k13%=="Si (Versione O365 x64)" cscript \\TUOSERVERKACE\cleanofc\OffScrub13.vbs ALL /Q /NoCancel /BYPASS 1
if %prj2k13%=="Si (Versione O365 x86)" cscript \\TUOSERVERKACE\cleanofc\OffScrub13.vbs ALL /Q /NoCancel /BYPASS 1
if %prj2k13%=="Si (Versione O365 x64)" cscript \\TUOSERVERKACE\cleanofc\OffScrub13.vbs ALL /Q /NoCancel /BYPASS 1

:exitcleaner

Dove ofc_start.vbs viene utilizzato per mostrare un popup all’utente (indicando quali prodotti sono stati rilevati sulla macchina) e chiedendo se può procedere o meno con la rimozione. Se dovesse servirti, posso metterlo a disposizione, chiedilo pure nell’area commenti. Lo script poco sopra è chiaramente modificabile secondo tue esigenze, il mio è un esempio (comunque utilizzato in produzione) per farti capire come sia possibile utilizzare l’ottimo lavoro svolto da Microsoft all’interno del proprio ambiente di lavoro.

Al termine dell’operazione non è necessario effettuare il riavvio della macchina, puoi integrare un ulteriore VBS (o equivalente) per notificare li termine del lavoro.

Ho dimenticato nulla? :-)

Dopo aver finalmente trovato la pagina dedicata a tutti i rilasci (per ogni ramo) di Microsoft Office 2016 (sempre 365 ProPlus, nda), disponibile all’indirizzo technet.microsoft.com/en-us/library/mt592918.aspx?f=255&MSPPError=-2147217396, possiamo tornare sull’argomento cambio di versione, ancora possibile tramite prompt dei comandi ed eseguibile officec2rclient, generalmente incluso in ogni installazione Microsoft.

Office 365 ProPlus (2013): modificare la versione installata

Nulla è cambiato rispetto all’articolo dedicato a Office 2013 in versione 365 ProPlus (ve ne parlavo qui), a esclusione del percorso dell’eseguibile da utilizzare, ora spostato sotto i Common Files:

C:\Program Files\Common Files\Microsoft Shared\ClickToRun

La stringa per eseguirlo e modificare la versione di Office installata resta quindi:

officec2rclient.exe /update user updatetoversion=16.0.xxxx.yyyy

Tenete conto però di una novità: contrariamente alla versione 2013, il nuovo Office 2016 basa i suoi aggiornamenti su rami differenti, come già anticipato nell’articolo pubblicato qualche giorno fa. Bisognerà quindi fare attenzione alla tabella proposta nella pagina di Technet (sempre questa) e selezionare la corretta versione sulla quale passare tramite prompt. Giusto per farla breve e semplice: non potrete utilizzare officec2rclient per saltare su una 16.0.6001.1061 se non state utilizzando il canale in differita (quello che passa gli aggiornamenti NON di sicurezza ogni 4 mesi anziché mensilmente), dovrete utilizzare la corrispondente versione del canale Current, quindi la 16.0.6366.2068.

Detto ciò, ho creato una copia dello script VBS che avevo precedentemente sviluppato e l’ho modificato per funzionare con le installazioni 2016. In questo caso non ha più importanza la differenza tra 32 e 64 bit, dato che officec2rclient si trova in una cartella raggiungibile tramite stessa variabile d’ambiente su entrambi i tipi di sistema, questo è il risultato:

Per poterlo utilizzare non è inoltre necessario essere amministratori di dominio o locali, a patto di avere già un’installazione di Office 2016 a bordo (cambieranno solo i file scaricati dal C2R, non sarà necessario autenticarsi per effettuare modifiche privilegiate al sistema).

Tutto parte da un vecchio articolo di HowToGeek (howtogeek.com/206329/how-to-find-your-lost-windows-or-office-product-keys) e dalla necessità di salvare rapidamente il seriale di un Windows 7 che da lì a poco sarebbe stato cancellato dal disco (formattazione completa) e reinstallato in seguito, pulito. Non volevo scaricare software di terze parti e non avevo nulla a disposizione su quella macchina.

Ho quindi preferito percorrere la via dello script VBScript, con una leggera modifica al codice per permettere il salvataggio del Product Key su file di testo, facilmente memorizzabile su chiave USB e riutilizzabile in seguito (copia & incolla) così da poter essere inserito in Windows, giusto in tempo per l’attivazione via internet.

Windows 7: recuperare e salvare il codice Product Key (VBScript)

Il codice è stato quindi ereditato dall’articolo di cui vi parlavo sopra, modificato dal sottoscritto, e reso nuovamente disponibile per voi tutti, qui di seguito:

' Microsoft Windows 7 Product Key Grabber
' Testata su conf. Windows 7 x86 e x64 Sp1
' GSolone 2015 v 0.1 - ultima modifica 03122015
' Fonte originale: http://www.howtogeek.com/206329/how-to-find-your-lost-windows-or-office-product-keys/

Set WshShell = CreateObject("WScript.Shell")
Set objFSO=CreateObject("Scripting.FileSystemObject")
ProduKey = ConvertToKey(WshShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId"))

' Salvataggio Product Key sul Desktop dell'utente
UserProfile = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%UserProfile%")
Set objFile = objFSO.CreateTextFile(UserProfile & "\Desktop\Win7ProduKey.txt")
objFile.Write "Windows Product Key" & vbCrLf & ProduKey
objFile.Close

' Verifica a video del Product Key (conferma salvataggio su file di testo)
MsgBox "Ho salvato il Product Key sul tuo Desktop: " & UserProfile & "\Desktop\Win7ProduKey.txt" & vbCrLf & "Product Key (conferma a video): " & ProduKey

Function ConvertToKey(Key)
    Const KeyOffset = 52
    i = 28
    Chars = "BCDFGHJKMPQRTVWXY2346789"
    Do
        Cur = 0
        x = 14
        Do
            Cur = Cur * 256
            Cur = Key(x + KeyOffset) + Cur
            Key(x + KeyOffset) = (Cur \ 24) And 255
            Cur = Cur Mod 24
            x = x -1
        Loop While x >= 0
        i = i -1
        KeyOutput = Mid(Chars, Cur + 1, 1) & KeyOutput
        If (((29 - i) Mod 6) = 0) And (i <> -1) Then
            i = i -1
            KeyOutput = "-" & KeyOutput
        End If
    Loop While i >= 0
    ConvertToKey = KeyOutput
End Function

Una volta lanciato, questo mostrerà a video un messaggio di conferma dell’operazione (salvo problemi): avrà nel frattempo salvato su un file di testo il codice del vostro sistema operativo, direttamente sul vostro Desktop (Win7ProduKey.txt). Il tutto è stato testato con successo su configurazione Windows 7 Professional, Sp1, a 64 bit. Non dovrebbero esserci problemi a far girare lo stesso script anche su altre configurazioni di Windows 7 (anche perché basa la sua esportazione sul registro di sistema), non serve farlo girare come amministratore della macchina.

Se non volete “fare della fatica“, potete anche scaricarlo direttamente da bit.ly/Windows7ProductKey.

Buon lavoro!

Un po’ a causa dei problemi di Excel a partire dalla versione 15.0.4745.1002 (qui l’articolo scritto poco tempo fa), un po’ perché potreste anche voi aver necessità di una precisa versione di Office 365 ProPlus, oggi vi propongo un rapido articolo che vi insegna a lanciare un aggiornamento (ma anche un downgrade, quando necessario) direttamente dal prompt dei comandi.

Office 365 ProPlus (2013): modificare la versione installata

Individuata la versione che vi interessa installare (vi ricordo che Microsoft ha una pagina dedicata a tutti i rilasci di Office, sempre aggiornata), dovrete chiudere ogni applicazione di Office lasciata aperta e lanciare un prompt dei comandi con privilegi amministrativi, quindi (in base alla prima installazione di Microsoft Office, se fatta a 32 o 64 bit) lanciare:

officec2rclient.exe /update user updatetoversion=15.0.xxxx.yyyy

Dove (manco a dirlo) quel 15.0.xxxx.yyyy dovrà essere sostituito dalla versione da voi desiderata.

officec2rclient.exe si trova all’interno della cartella %ProgramFiles%\Microsoft Office 15\ClientX86 (o X64 se installato a 64 bit). Esattamente come riportato dalla documentazione di Microsoft disponibile all’indirizzo support.microsoft.com/en-us/kb/2770432, partirà una finestra di download della versione di Microsoft Office desiderata che sostituirà quella attualmente installata, a prescindere che sia più vecchia o più nuova rispetto a quella scelta.

Office 365 ProPlus (2013): modificare la versione installata 1

Per vostra (e mia) comodità ho scritto un VBS che vi permetterà di dimenticare la stringa necessaria dettata dalla documentazione Microsoft, passando a una più comoda gestione via GUI o direttamente da prompt dei comandi:

Una volta specificata (ancora una volta) la versione, il resto verrà da se.

Non dimenticate di andare poi a disattivare l’aggiornamento automatico di Office se non volete che la versioni della suite di Microsoft cambi in autonomia.