martedì 30 agosto 2016

Windows 7: Integrare i driver USB 3.0 all'interno del DVD di installazione

Il DVD di Windows 7 non include i driver dell'interfaccia USB 3.0 e questo, su alcune configurazioni hardware, può impedire di portare a termine l'installazione del sistema operativo dato che anche mouse a tastiera USB potrebbero non essere utilizzabili in tale fase. Il progresso tecnologico può portare anche a questo, così configurazioni hardware recenti (come ad es. il SoC Intel Braswell che integra un nuovo controller USB 3.0 non riconosciuto da Windows 7 in fase di installazione) possono presentare problemi con Sistemi Operativi realizzati qualche anno prima.
Se non si intende rinunciare all'installazione di Windows 7 passando ad un sistema più recente è possibile rimboccarsi le maniche e integrare i file necessari all'interno del DVD (o della pendrive usb) di installazione.

Quello di cui abbiamo bisogno è di un PC funzionante con Sistema Operativo Windows su cui operare.
  • In C:\ creare una cartella e rinominarla in WIM
  • All'interno della cartella WIM creiamo 2 nuove cartelle rinominandole rispettivamente Mount e USB3
  • Scarichiamo il driver USB dal sito Intel (https://downloadcenter.intel.com/download/24896/USB-3-0-Intel-USB-3-0-Driver-for-Intel-NUC)
  • Scompattiamo il file contenente il driver. Cerchiamo e copiamo le cartelle Win7 e HCSwitch all'interno di C:\WIM\USB3. All'interno di tali cartelle sono presenti le versioni x64 e x32 dei driver. Utilizziamo quelli specifici per la versione di Windows 7 che intendiamo installare.
  • Dal DVD di installazione di Windows 7 cerchiamo i file Install.wim e Boot.wim e copiamoli in C:\WIM
  • Apriamo un Prompt dei comandi come amministratore e posizioniamoci in C:\WIM
  • Ora subentra la fase più delicata. Andremo a modificare l'immagine di Windows tramite DISM. Digitare il comando
    Dism /Mount-Wim /wimfile:"Install.wim" /index:X /MountDir:"mount"
    Il valore di X del parametro index dipende dalla versione di Windows 7 che si sta modificando: 1 per Home Basic, 2 per Home Premium, 3 per Professional, 4 per Ultimate
  • Il prossimo passo consiste nell'aggiungere i driver all'immagine con il seguente comando 
    Dism /image:"mount" /add-driver /driver:"USB3" /recurse
  • Salviamo l'immagine modificata con il comando 
    Dism /Unmount-Wim /mountdir:"mount" /commit

Ora dobbiamo effettuare un'operazione analoga con il file Boot.wim
  • Lanciamo il comando 
    Dism /Mount-Wim /wimfile:"Boot.wim" /index:1 /MountDir:"mount" 
    A differenza di quanto visto per il file Install.wim, in questo caso il parametro index deve essere 1
  • Aggiungiamo il driver con il comando 
    Dism /image:"mount" /add-driver /driver:"USB3" /recurse
  • Salviamo il file con il comando
    Dism /Unmount-Wim /mountdir:"mount" /commit
  • Modifichiamo l'index 2 con 
    Dism /Mount-Wim /wimfile:"Boot.wim" /index:2 /MountDir:"mount"
  • e aggiungiamo il driver anche qui con
    Dism /image:"mount" /add-driver /driver:"USB3" /recurse
  • Quindi applichiamo le modifiche 
    Dism /Unmount-Wim /mountdir:"mount" /commit
Adesso i file Install.wim e Boot.wim presenti in C:\WIM integrano i driver del controller USB 3.0. Possiamo scaricare l'ISO di Windows 7 oppure crearla, con appositi tool come UltraISOMagic ISO MakerPowerISO (anche in prova gratuita), dal DVD in nostro possesso. Nella ISO, sempre con gli appositi tool, andremo a sostituire i file Install.wim e Boot.Wim con quelli da noi modificati e procedere alla masterizzazione di un nuovo DVD.
In alternativa, dall'ISO originale, possiamo creare una pendrive bootable con il tool gratuito Windows USB/DVD Download Tool  quindi sostituiamo i 2 file all'interno della pendrive e possiamo procedere con l'installazione del sistema operativo facendo il boot da USB.


lunedì 29 agosto 2016

Windows Quick Tip: Modificare le dimensioni del file di paging (pagefile.sys) da riga di comando tramite WMIC

Abbiamo già incontrato WMIC (Windows Management Instrumentation Command-linein un articolo precedente. Si tratta di potente strumento che consente la gestione dei sistemi da riga di comando.

In questo articolo mostrerò come impostare le dimensioni del file di memoria virtuale (pagefile.sys) utilizzando WMIC. I comandi da utilizzare sono molto semplici:
  • Dal Prompt dei comandi eseguire il comando 
    wmic pagefile list /format:list 
    per visualizzare le informazioni relative ai file di memoria virtuale presenti sulla macchina.
  • Per creare un'istanza relativa al file di paging che intendiamo creare/impostare lanciare il comando
    wmic pagefileset create name="C:\pagefile.sys"
  • Per settare la dimensione minima e massima del file di paging a 4GB (4096MB) utilizzare il comando
    wmic pagefileset where name="C:\\pagefile.sys" set InitialSize=4096,MaximumSize=4096
    Possiamo personalizzare la dimensione iniziale e massima di pagefile.sys passando a InitialSize e MaximumSize la dimensione desiderata espressa in MB. (NB: il doppio carattere \\ all'interno del comando è necessario per la query).
  • Nel caso in cui abbiamo settato il file di paging su una partizione diversa e vogliamo cancellarlo dalla partizione C: possiamo utilizzare il parametro delete
    wmic pagefileset where name="C:\\pagefile.sys" delete
WMIC, dimensione dei file di paging
FIG 1 - WMIC, dimensione dei file di paging


WMIC ci consente anche di eseguire le impostazioni su workstation/server remoti, basta aggiungere a WMIC il parametro /Node:<nome_wks>
Ad es. supponiamo di volere impostare il file di paging sul server chiamato Server01:
wmic /NODE:Server01 pagefile list /format:list
wmic /NODE:Server01 pagefileset create name="C:\pagefile.sys"
wmic /NODE:Server01 pagefileset where name="C:\\pagefile.sys" set InitialSize=4096,MaximumSize=4096

martedì 16 agosto 2016

PowerShell: Formattare un volume esistente con Format-Volume

Il cmdlet Format-Volume di PowerShell 3.0 (e successivi) consente di formattare un volume esistente. La sintassi è la seguente (a seconda se si intende indicate la lettera del drive, l'ID, l'etichetta, la partizione o il percorso):

DriveLetter
Format-Volume [-DriveLetter] <Char[]> [-AllocationUnitSize <UInt32> ] [-AsJob] [-CimSession <CimSession[]> ] [-Compress] [-DisableHeatGathering] [-FileSystem <String> ] [-Force] [-Full] [-NewFileSystemLabel <String> ] [-SetIntegrityStreams <Boolean> ] [-ShortFileNameSupport <Boolean> ] [-ThrottleLimit <Int32> ] [-UseLargeFRS] [-Confirm] [-WhatIf] [ <CommonParameters>]

ID
Format-Volume -ObjectId <String[]> [-AllocationUnitSize <UInt32> ] [-AsJob] [-CimSession <CimSession[]> ] [-Compress] [-DisableHeatGathering] [-FileSystem <String> ] [-Force] [-Full] [-NewFileSystemLabel <String> ] [-SetIntegrityStreams <Boolean> ] [-ShortFileNameSupport <Boolean> ] [-ThrottleLimit <Int32> ] [-UseLargeFRS] [-Confirm] [-WhatIf] [ <CommonParameters>]

Label
Format-Volume -FileSystemLabel <String[]> [-AllocationUnitSize <UInt32> ] [-AsJob] [-CimSession <CimSession[]> ] [-Compress] [-DisableHeatGathering] [-FileSystem <String> ] [-Force] [-Full] [-NewFileSystemLabel <String> ] [-SetIntegrityStreams <Boolean> ] [-ShortFileNameSupport <Boolean> ] [-ThrottleLimit <Int32> ] [-UseLargeFRS] [-Confirm] [-WhatIf] [ <CommonParameters>]

Partition
Format-Volume [-AllocationUnitSize <UInt32> ] [-AsJob] [-CimSession <CimSession[]> ] [-Compress] [-DisableHeatGathering] [-FileSystem <String> ] [-Force] [-Full] [-NewFileSystemLabel <String> ] [-Partition <CimInstance> ] [-SetIntegrityStreams <Boolean> ] [-ShortFileNameSupport <Boolean> ] [-ThrottleLimit <Int32> ] [-UseLargeFRS] [-Confirm] [-WhatIf] [ <CommonParameters>]

Paths
Format-Volume -Path <String[]> [-AllocationUnitSize <UInt32> ] [-AsJob] [-CimSession <CimSession[]> ] [-Compress] [-DisableHeatGathering] [-FileSystem <String> ] [-Force] [-Full] [-NewFileSystemLabel <String> ] [-SetIntegrityStreams <Boolean> ] [-ShortFileNameSupport <Boolean> ] [-ThrottleLimit <Int32> ] [-UseLargeFRS] [-Confirm] [-WhatIf] [ <CommonParameters>]


Parametri principali


-AsJob
Il parametro esegue il comando in background. Per poter utilizzare tale parametro è necessario eseguire PowerShell come amministratore

-CimSession
Esegue il comando su una sessione o un computer remoto.

-Compress
Abilita la compressione dei file sul volume NTFS specificato.

-DriveLetter
Specifica la lettera di unità relativa al volume da formattare.

-FileSystem
Permette di specificare il tipo di file system con il quale formattare il volume. I valori accettati da tale parametro sono: NTFS, ReFS, exFAT, FAT32, e FAT.

-FileSystemLabel
Permette di specificare l'etichetta da assegnare al volume da formattare.

-Force
Forza il comando.

-Full
Effettua una formattazione completa. Se non specificato viene eseguita una formattazione veloce.

-NewFileSystemLabel
Specifica una nuova etichetta da assegnare al volume.

-ObjectId
Permette di indicare l'ID del volume da formattare.

-Partition
Permette di specificare la partizione sulla quale creare un nuovo volume. La partizione può essere scelta tra quelle indicate dai cmdlet Get-Partition e New-Partition

-Path
Specifica il Path del volume da formattare.

-Confirm
Chiede conferma prima che il cmdlet venga eseguito.



Di seguito alcuni esempi.

Esempio 1
Format-Volume -DriveLetter D -FileSystem NTFS -Full -Force
Esegue una formattazione completa della partizione D utilizzando il filesystem NTFS.

Esempio 2
Format-Volume -DriveLetter D
Esegue una formattazione veloce del volume con lettera D.


PowerShell, Format-Volume
FIG 1 - PowerShell, Format-Volume




giovedì 4 agosto 2016

Windows Quick Tip: Come spostare la licenza di Windows da un PC all'altro

Nell'articolo Windows Quick Tip: Determinare il tipo di licenza di Windows (OEM, Retail, Volume Licensing) ho mostrato come individuare il tipo di licenza di Windows installato sulla macchina. Alcuni tipi di licenza, come quelle Retail, permettono all'utente il trasferimento da un PC all'altro. Prima di utilizzare la licenza sul nuovo PC è opportuno procedere alla disattivazione da quello vecchio. Vediamo come fare.

Per disattivare la licenza dal vecchio PC:
  • Avviare il Prompt dei comandi come amministratore;
  • Digitare il  comando slmgr /dlv seguito da invio e prendere nota dell’ID di attivazione;
  • Per disattivare la licenza digitare slmgr /upk seguito dal ID di attivazione (ad es. slmgr /upk <ID_attivazione>).


Per attivare la licenza sul nuovo PC:
  • Avviare il Prompt dei comandi come amministratore;
  • Eseguire il comando slmgr /ipk seguito dal Product Key (ad es. slmgr /ipk <Product_Key>).

Attivazione licenza di Windows: slmgr /ipk
FIG 1 - Attivazione licenza di Windows: slmgr /ipk



mercoledì 3 agosto 2016

PowerShell: Visualizzare le informazioni sul BIOS utilizzando Get-WmiObject

Nell'articolo PowerShell: Visualizzare le informazioni sulla scheda audio utilizzando Get-Wmiobject abbiamo visto come, tramite Windows Management Instrumentation (WMI), si possano recuperare informazioni sulla scheda audio installata all'interno del computer. Alla stregua di quanto descritto in quell'articolo si possono recuperare informazioni sul BIOS della macchina utilizzando Get-WmiObject e la classe Win32_BIOS. Il comando completo da eseguire è il seguente:
Get-Wmiobject -class "Win32_BIOS" -namespace "root\CIMV2" | Fl * -Force


PowerShell, informazioni sul BIOS
FIG 1 - PowerShell, informazioni sul BIOS

Tra le informazioni più utili troviamo il numero seriale della scheda madre, il produttore del BIOS, la data di rilascio e la versione.

Per visualizzare le informazioni del BIOS di una macchina remota va utilizzato il parametro -Computer indicando il nome o l'indirizzo IP del computer che si intende analizzare. Ad es.
Get-Wmiobject -class "Win32_BIOS" -namespace "root\CIMV2" -Computer Server01 | Fl * -Force

martedì 2 agosto 2016

PowerShell: Verificare la presenza e raggiungibilità di un host in rete tramite Test-Connection

Chi lavora nel campo IT spesso utilizza l'utility Ping per verificare la presenza e raggiungibilità di un Host all'interno della rete. Il ping consiste nell'invio di un pacchetto ICMP (Internet Control Message Protocol) di tipo echo request e attendere in risposta un pacchetto ICMP di tipo echo reply.

Una funzione analoga in PowerShell può essere eseguita tramite il cmdlet Test-Connection. La sintassi del cmdlet è la seguente:

Test-Connection [-ComputerName] <String[]> [-AsJob] [-Authentication <AuthenticationLevel> {Default | None | Connect | Call | Packet | PacketIntegrity | PacketPrivacy | Unchanged} ] [-BufferSize <Int32> ] [-Count <Int32> ] [-Delay <Int32> ] [-Impersonation <ImpersonationLevel> {Default | Anonymous | Identify | Impersonate | Delegate} ] [-InformationAction <System.Management.Automation.ActionPreference> {SilentlyContinue | Stop | Continue | Inquire | Ignore | Suspend} ] [-InformationVariable <System.String> ] [-ThrottleLimit <Int32> ] [-TimeToLive <Int32> ] [ <CommonParameters>]


Parametri principali


-AsJob
Il parametro esegue il comando in background. Per poter utilizzare tale parametro è necessario eseguire PowerShell come amministratore

-Authentication<AuthenticationLevel>
Specifica il livello di autenticazione della connessione WMI (Test-Connection usa WMI). I valori accettati sono: UnchangedDefaultNoneConnectCallPacketPacketIntegrityPacketPrivacy

-BufferSize
Specifica la dimensione, in byte, del pacchetto inviato. Di default la dimensione è 32 byte.

-ComputerName
Si tratta di un parametro obbligatorio e consente di specificare il nome del computer da pingare o il suo indirizzo IP (in formato IPv4 o IPv6).

-Count
Specifica il numero di pacchetti/richieste da inviare. Di default vengono inviati 4 pacchetti.

-Credential
Specifica le credenziali dell'utente autorizzato ad inviare il ping dal computer specificato da -Source.

-Delay
Specifica l'intervallo, in secondi, tra i ping.

-Quiet
Specificando tale parametro verrà restituivo $true se l'host ha risposto al ping, $false in caso contrario. Tutti gli altri messaggi di risposta vengono soppressi.

-Source
Permette di specificare il nome del computer da cui parte il ping. Se non specificato il ping ha origine dal computer locale. É possibile indicare anche più origini del ping separandole tramite virgola.

-TimeToLive
Il parametro TimeToLive (TTL) permette di specificare il tempo di vita, in secondi, del pacchetto ICMP. Il parametro accetta valori interi compresi tra 1 e 255.



Esempi


Esempio 1
Test-Connection Server01
Test-Connection -ComputerName 192.168.0.1
Questi due comandi eseguono il ping rispettivamente verso il computer con nome Server01 e verso l'indirizzo 192.168.0.1. Nel primo comando il parametro -ComputerName viene omesso e indicato direttamente il nome del computer.
Test-Connection -ComputeName
FIG 1 - Test-Connection -ComputeName

Esempio 2
Test-Conntection -ComputerName Server01, Server02
É possibile passare a Test-Connection più host a cui inviare il pacchetto ICMP separandoli tramite virgola.

Esempio 3
Test-Connection -ComputerName 192.168.0.1 -Quiet
Con il parametro Quiet si riceve in output True o False a seconda se si riceve risposta o meno dal computer remoto. Questa caratteristica ci consente di utilizzarlo per verificare la raggiungibilità di un determinato host prima di tentare una qualsiasi operazione. Ad es. 
if (Test-Connection -ComputerName Server01 -Quiet) {New-PSSession Server01}
Test-Connection, parametro -Quiet
FIG 2 - Test-Connection, parametro -Quiet

Esempio 4
Test-Connection -Source Server02, Server03 -ComputerName Server01 -Credential Dominio\Utente
Questo comando invia ping da diversi mittenti/host ad un singolo computer Server01. Il parametro Credential viene utilizzato per specificare le credenziali di un utente che è abilitato all'invio di ping da Server02 e Server03. Questo comando può essere utile per verificare la latenza delle connessioni da diversi punti.




lunedì 1 agosto 2016

PowerShell: Mettere in pausa l'attività in PowerShell tramite Start-Sleep

Il cmdlet Start-Sleep viene utilizzato generalmente all'interno degli script al fine di mettere in pausa l'attività per un periodo specificato. La sintassi del cmdlet è la seguente:
Start-Sleep [-Seconds] <Int32> 
oppure
Start-Sleep -Milliseconds <Int32>


Parametri

-Seconds
Può essere abbreviato in -s e specifica il tempo di attesa espresso in secondi prima di proseguire con l'esecuzione dell'attività.

-Milliseconds
Specifica il tempo di attesa espresso in millisecondi e può essere abbreviato in -m.


Per mettere in pausa per 10 secondi l'attività
Start-Sleep -s 10
oppure
Start-Sleep -m 10000