Archives For Product Key

Ti è mai capitato di preparare una macchina “template” da catturare e clonare su diverse altre macchine dello stesso modello? Qui continuamente, ed è tutto ciò su cui si cerca di basare il rilascio di nuove postazioni. Avere un solo modello Desktop e uno laptop (o comunque un numero quanto più limitato) aiuta a gestire meglio il parco macchine aziendale, è risaputo ed è una pratica di quelle buone, da cercare di mantenere il più possibile nel tempo.

Tralasciando però quella che è la pippa mentale relativa alla teoria delle buone pratiche, passiamo al succo dell’articolo e al problema specifico da risolvere: un SysPrep fallito, con tanto di messaggio di accompagnamento simile (in realtà potrebbe essere identico) a quello riportato nel titolo dell’articolo.

Microsoft Windows

Di motivi per far fallire un SysPrep ne esistono diversi, ma un paio sono quelli più comuni e sono quelli a cui possiamo fare riferimento insieme (con relativa soluzione), e onestamente non ho idea del perché io abbia lasciato nel dimenticatoio questo articolo (la bozza era del 2014, fa un po’ te). Provo a dargli una svecchiata, magari è la volta buona che va in pubblicazione :-)

Hai finito le cartucce

Con Windows 7, contrariamente a Windows 10, avevi a disposizione un massimo di 3 Rearm di sistema (il Rearm serviva a terminare un intervallo di utilizzo di sistema privo di attivazione, cominciandone uno nuovo e permettendoti di estendere il tuo periodo “di prova” di Windows, ciò è alla base dei periodi trial di Microsoft tutt’oggi, sia per Windows che per Office). Questo era ciò che nel libro di teoria potevi trovare pressoché ovunque, ma che come ogni medaglia, dava il meglio di sé voltando la prima faccia. Un SysPrep comprendente un parametro di Rearm, andava a dare un’occhiata a quello che era il contatore di sistema, che puoi facilmente richiamare ancora oggi eseguendo il comando slmgr.vbs -dlv (come suggerito anche nel forum di Microsoft):

A fatal error occurred while trying to sysprep the machine

Lo screenshot qui sopra fa riferimento a quel vecchio sistema 7 che dovevo mandare in SysPrep nel 2014, e che riportava uno zero in corrispondenza della voce “Numero di ripristini di Windows rimanenti“, era proprio lui a impedirmi di portare a termine il mio compito. Come si aggirava e si aggira tutt’oggi (se hai ancora a che fare con Windows 7, nda) l’ostacolo? Semplice. Si va a modificare la chiave di registro che ne controlla il contatore.

Per farlo però, ti occorre mandare in recovery il sistema, premendo F8 durante l’avvio dell’OS e selezionando la voce relativa alla partenza avanzata di Windows (Advanced Boot Options), quella che ti permette di avere un prompt dei comandi. Dal prompt dovrai semplicemente fare tre operazioni relative al registro di Windows:

reg load HKLM\MY_SYSTEM "%~dp0Windows\System32\config\system"
reg delete HKLM\MY_SYSTEM\WPA /f
reg unload HKLM\MY_SYSTEM

Se la modifica va a buon fine, potrai riavviare la macchina e rilanciare il comando slmgr.vbs -dlv per verificare che il contatore sia tornato a mostrare un numero di possibili Rearm positivo. Se Windows dovesse richiederti il Product Key, ignora il passaggio e recuperalo in seguito, anche via prompt dei comandi, sempre passando per il slmgr.vbs. Il comando completo per passare un Product Key al sistema è slmgr /ipk XXXXX-XXXXX-XXXXX-XXXXX-XXXXX dove, chiaramente, dovrai andare a sostituire la serie di “X” con il codice in tuo possesso. Se non lo hai, utilizzane uno a tempo (scadono entro un mese):

  • Windows 7 Ultimate: D4F6K-QK3RD-TMVMJ-BBMRX-3MBMV
  • Windows 7 Professional: HYF8J-CVRMY-CM74G-RPHKF-PW487
  • Windows 7 Home Premium: RHPQ2-RMFJH-74XYM-BH4JX-XM76F
  • Windows 7 Home Basic: YGFVB-QTFXQ-3H233-PTWTJ-YRYRV
  • Windows 7 Starter: 7Q28W-FT9PC-CMMYT-WHMY2-89M6G

A tutto questo c’è un’alternativa che ti permette di bypassare il contatore dei Rearm e fare SysPrep perdendo un po’ meno tempo. È riportata in un articolo che mi è tornato molto utile in passato (questo: mickitblog.blogspot.it/2011/08/fatal-error-occurred-while-trying-to.html), questo il riassunto:

  • Nel file Unattend.xml cerca e cancella il parametro skiprearm=1
  • Nel regedit, naviga in HKLM\SYSTEM\Setup\Status\SysprepStatus, quindi cerca e imposta GeneralizationState a 7
  • Da un prompt dei comandi, lancia prima un msdtc -uninstall, fai seguire poi un msdtc -install
  • Torna nel regedit, naviga in HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform, quindi cerca e imposta il valore SkipRearm a 1
  • Togli il cavo di rete dalla macchina (e disconnettila dal WiFi, se connessa)
  • Rilancia il SysPrep.

E se invece è un problema di profilo?

Può capitare anche questo, ed è il secondo caso più comune. Hai preparato il sistema, sei partito da un’immagine già esistente, da fondamenta già gettate e apparentemente ben solide ma, all’ultimo minuto, il SysPrep va in errore per cause apparentemente sconosciute, strane da interpretare. Potresti scoprire che in realtà si tratta di un vecchio profilo locale rimosso, ma rimasto “appeso” nel registro di sistema. Se ne parlava in un vecchio thread nel forum, tra le possibili soluzioni: social.technet.microsoft.com/Forums/windows/en-US/2aa9466d-a203-4f3e-80d9-f1ae6d11f6c5/sysprep-failed-at-microsoftwindowsshellsetup?forum=w7itproinstall

È ancora una delle vie d’uscita poco considerate, ma che possono toglierti le castagne dal fuoco. Avvia il regedit, naviga in HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ProfileList. Noti nulla di strano? Se qui compare un profilo non più presente sulla macchina, la CopyProfile prevista dal tuo file XML unattend non potrà mai andare a buon fine, generandoti l’errore a video.

Cancella la chiave di registro (intera) relativa al profilo non più esistente. Riprova ora il SysPrep, molto probabilmente andrà a buon fine e tu potrai concludere il lavoro.

Cosa dice Microsoft

Raccoglie qualche riferimento all’interno di un documento ufficiale di Support, che tu stesso puoi leggere puntando il browser a support.microsoft.com/en-us/help/929828/an-error-message-occurs-when-you-run-sysprep-generalize-in-windows-vis, probabilmente però questo non riuscirà a dare risposta alla tua domanda e difficoltà, ma questa è un’altra storia.

Ciò che mi auguro è che l’articolo, rispolverato e rimesso più o meno in ordine, possa darti realmente una mano in caso di difficoltà con questo ottimo strumento che è SysPrep.

Buon lavoro!

Condividi l'articolo con i tuoi contatti:

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.

Condividi l'articolo con i tuoi contatti:

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!

Condividi l'articolo con i tuoi contatti:

office13iconUna cosa molto semplice che permette di risparmiare del tempo se si pensa a quanto ce ne si impiegherebbe passando dalla “modifica dell’installazione” via Pannello di Controllo, ho avuto necessità di modificare il Product Key di un Office 2013 che avevo temporaneamente licenziato con un diverso codice rispetto a quello previsto. L’operazione si completa da un prompt dei comandi (lanciato come amministratore macchina o di dominio) passando da un VBScript già presente all’interno della cartella di installazione di Office, esattamente come suggerito nel forum di Microsoft.

Portatevi dentro la cartella di installazione di Office in base al sistema operativo utilizzato e al pacchetto di installazione di Office stesso:

  • Se avete installato Office 2013 a 64 bit su un sistema a 64 bit lo troverete sotto %ProgramFiles%\Microsoft Office\Office15
  • Se avete installato Office 2013 a 32 bit su un sistema a 64 bit lo troverete sotto %ProgramFiles(x86)%\Microsoft Office\Office15

Da qui lanciate un semplice

cscript OSPP.VBS /inpkey:%NUOVOPRODUCTKEY%

avendo cura di sostituire %NUOVOPRODUCTKEY% con il codice di licenza vero che avete acquistato per attivare il vostro Office 2013.

ofc13 - cambio product key

L’operazione è rapidissima, aprite ora un qualsiasi programma della suite Office e procedete con l’attivazione via internet, tutto dovrebbe filare liscio come l’olio :-)

E se volessi disattivare la licenza del terminale?

Ripesco questo vecchio articolo del mio blog per proporvi un aggiornamento che ad alcuni farà sicuramente comodo. Mi è capitato di dover “scatenare” nuovamente la richiesta di licenza a video dove l’utente dovrà inserire il suo username e la password dell’account di Office 365, ma il consiglio può valere anche per le installazioni di Office 2013 in licenza “No 365“.

Sempre dal CMD potete lanciare un:

cscript OSPP.VBS /dstatus

Office15-OSPP_status

che vi permetterà di mostrare a video lo stato di registrazione di ciascun prodotto Microsoft con relativa licenza, quest’ultima mostrata solo per gli ultimi 5 caratteri che la compongono (nel mio screen vedete più licenze e più codici poiché ho diversi prodotti Microsoft Office installati, sulla vostra macchina probabilmente ne esisterà solo una), in corrispondenza della stringa “Last 5 characters of installed product key“.

Vi basterà copiare quei 5 caratteri e lanciare un:

cscript ospp.vbs /unpkey:<Last 5 characters of installed product key>

(avendo cura di sostituire il blocco “<Last 5 …>” con i veri 5 caratteri della propria licenza) per disattivare la licenza corrispondente e scatenare quindi l’evento di richiesta codice o utenza in avvio di qualsiasi programma della suite Office.

Enjoy!

Condividi l'articolo con i tuoi contatti: