Quantcast
Channel: Tips – DevAdmin Blog
Viewing all 299 articles
Browse latest View live

Windows Server Technical Preview 2 novità nella GUI

$
0
0

Lo scorso 4 maggio 2015 è stata rilasciata la Technical Preview 2 di Windows Server 2016 come annunciato nel post What’s new in Windows Server 2016 Technical Preview 2 del Windows Server Blog. Per chi desidera provare la Technical Preview 2 è possibile scaricare l’Iso o il Vhd dal portale TechNet Evaluation Center  tramite il seguente link Windows Server Technical Preview 2.

Una delle prime novità che si possono notare installando la  Technical Preview 2 di Windows Server 2016 riguarda le GUI che sono state rese disponibili ovvero

  • Windows Server Technical Preview
  • Windows Server Technical Preview 2 (with local admin tools)

 image

L’opzione Windows Server Technical Preview installa il sistema operativo senza GUI ovvero in modalità Server Core, mentre l’opzione Windows Server Technical Preview 2 (with local admin tools) istalla il sistema operativo in modalità MinShell e apre per default Server Manager. In questa versione non vi è quindi un’opzione per installare il sistema in modalità full graphical user interface. 

Modalità Windows Server Technical Preview [Server Core]

In questa modalità la GUI è un prompt dei comandi tramite cui verranno eseguite tutte le operazioni compresa cambio password e login.

image

In questa modalità è disponibile anche PowerShell tramite cui è possibile gestire il sistema e verificare ad esempio mediante il cmdlet Get-WindowsFeature Server-Gui-Mgmt-Infra che funzionalità dedicata ai tool di gestione grafici risulta non istallata:

image

Modalità Windows Server Technical Preview 2 (with local admin tools) [MinShell]

Anche in questa modalità la GUI è un prompt dei comandi, ma le operazioni di cambio password e login sono eseguite tramite interfaccia grafica e per default viene avviato il Server Manager.

image

E’ possibile avviare PowerShell da riga di comando e verificare ad esempio mediante il cmdlet Get-WindowsFeature Server-Gui-Mgmt-Infra che le funzionalità dedicata ai tool di gestione grafici in questa modalità risulta istallata:

image

Per abilitare la full graphical user interface, ad esempio nel caso si voglia configurare il sistema per eseguire il ruolo RDS Session Host,  è possibile utilizzare Server Manager aggiungendo la funzionalità User Interfaces and Infrastructure – Server Graphical Shell e riavviando il,sistema.

image

In alternativa è possibile anche utilizzare PowerShell utilizzando il cmdlet Add-WindowsFeature Server-Gui-Shell:

Vi ricordo che se desidete approfondire le nuove funzonalità di Windows Server 2016 e non solo vi aspettiamo alla Server Infrastructure Days 2015 il 17 e 18 Giugno 2015 dove sarò presente con le sessioni WS01 // Implementing IPv6: Notes From the Field e WS04 // Windows Server: Implement Remote Desktop Services.

Banner-728x90


Errore operazioni in sospeso di una precedente installazione

$
0
0

A volte può capitare che un’installazione avviata manualmente o tramite Group Policy non si completi correttamente e lasci in sistema in uno stato incoerente che causa la mancata installazione di altri software che all’avvio del setup riportano messaggi di errore simili ai seguenti:

Sono rimaste in sospeso alcune operazioni di una precedente installazione è necessario riavviare il computer.

Setup has detected that there is a system reboot pending on this machine. Please install this product after rebooting the system.

Per risolvere il problema ovviamente la prima cosa da fare è riavviare il sistema se però nonostante ciò il problema non si risolve è possibile fare riferimento alla KB312444 Messaggio di errore: Sono rimaste in sospeso alcune operazioni di una precedente installazione che indica di controllare se la chiave di registro HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations contiene dei valori di file da rinominare e nel caso eliminare il contenuto o la chiave o rinominare la chiave e riprovare ad eseguire l’installazione.

La chiave PendingFileRenameOperations contiene le informazioni relative alle operazioni di rename di file d eseguire al riavvio del sistema perché non potevano essere eseguite in quanto il file era in uso. Si noti che nel caso i file da rinominare sono più di uno verranno create le chiavi progressive PendingFileRenameOperations2, PendingFileRenameOperations3,…. che dovranno essere rimosse se esistenti. A riguardo si vedano anche A Restart from a Previous Installation is Pending e Pending File Rename Operations.

Un’altra causa del problema può essere legata alla chiave di registry HKLM\SOFTWARE\Microsoft\Updates\UpdateExeVolatile che riporta lo stato di eventuali aggiornamenti incompleti. Per ripristinare uno stato di incoerenza dovuto ad un aggiornamento non istallato correttamente impostare la chiave UpdateExeVolatile al valore 0.

Per ulteriori informazioni si vedano   A Restart from a Previous Installation is Pending e Incomplete Updates check.

Automazione dell’installazione degli aggiornamenti tramite PowerShell

$
0
0

Vi sono situazioni in cui su alcuni computer occorre intervenire periodicamente in modo manuale ad installare gli aggiornamenti di Windows. Ad esempio nel caso di computer che devono essere sempre in funzione come server, chioschi o computer che eseguono sinottici, etc…

Per sviluppare uno script PowerShell che si occupi di verificare l’esistenza di aggiornamenti da installare, ne esegua se necessario il download e quindi l’installazione è possibile prendere spunto dal post  Hey, Scripting Guy! How Can I Search For, Download, and Install an Update? in cui viene descritto il codice PowerShell per la gestione del processo d’istallazione degli aggiornamenti di Windows.

In sintesi l’approccio di basa sull’utilizzo di WMI per ricercare gli aggiornamenti, ricavare l’ID univoco del singolo aggiornamento, quindi costruire una collection di  aggiornamenti da scaricare e installare (per la spiegazione dettagliata si faccia riferimento al post Hey, Scripting Guy! How Can I Search For, Download, and Install an Update?):

$UpdateCollection = New-Object -ComObject Microsoft.Update.UpdateColl
$Searcher = New-Object -ComObject Microsoft.Update.Searcher
$Session = New-Object -ComObject Microsoft.Update.Session

$updateID = “f1b1a591-bb75-4b1c-9fbd-03eedb00cc9d”
$Result = $Searcher.Search(“UpdateID=’$updateID'”)
$Updates = $Result.updates
$UpdateCollection.Add($Updates.Item(0)) | out-null

$Downloader = $Session.CreateUpdateDownloader()
$Downloader.Updates = $UpdateCollection
$Downloader.Download()

$Installer = New-Object -ComObject Microsoft.Update.Installer
$Installer.Updates = $UpdateCollection
$Installer.Install()

Partendo da questo codice ho sviluppato uno script che eseguire la ricerca degli aggiornamenti non installati e se necessario li scarica, quindi li installa, riavvia il computer e invia il log dell’attività per mail.

La parte iniziale dello script permette di gestire alcuni flag gestire il funzionamento dello script, il parametro $updatesLimit se diverso da -1 permette di installare solo un numero specificato di aggiornamenti e può essere utile a fini di test così come i flag $enableDownload e $enableInstall che permettono di eseguire solo la verifica degli aggiornamenti da scaricare e da installare:

# *** Impostazioni ***
$rebootAfterUpdate = $TRUE

$updatesLimit = -1
$enableDownload = $TRUE
$enableInstall = $TRUE
$logFilePath = “Path dei file di logs
$logFileNameSuffix = “LogInstallUpdates”
$logFilesRetained = 10

$sendLogByMail = $TRUE
$smtpServer = “Nome o IP Server SMTP
$mailFrom = “Indirizzo mail from
$mailTo = “Indirizzo mail to
# ********************

Per gestire in modo automatico l’istallazione degli aggiornamenti in base alla schedulazione desiderata basterà configurare Windows Update per eseguire la sola verifica degli aggiornamenti e gestire poi download e installazione tramite lo script.

image

E’ possibile schedulare lo script tramite un file cmd contente un comando di questo tipo (che può anche essere utilizzato per l’avvio dello script durante le fasi di test per visualizzare eventuali errori):

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe C:\Scripts\InstallUpdates.ps1

In alternativa come suggerito nei commenti da Luigi semplicemente powershell nel campo “Programma o script” dell’operazione pianificata e lo script negli argomenti meglio se preceduto dall’opzione –file, quindi nel nostro caso:

image

A riguardo si veda anche il post Weekend Scripter: Use the Windows Task Scheduler to Run a Windows PowerShell Script.

Per evitare che la finestra del prompt del dos venga visualizzata quando l’operazione schedulata viene eseguita mentre si è connessi in console impostare l’esecuzione del file cmd tramite l’utente System.

Per poter eseguire gli script PowerShell sui sistemi operativi client occorre impostare l’execution policy almeno a  RemoteSigned tramite il cmdlet Set-ExecutionPolicy:

Set-ExecutionPolicy RemoteSigned

Di seguito lo script InstallUpdates.ps1 che va eseguito con privilegi amministrativi e che ho testato su sistemi Windows 8.1:

# *** Impostazioni ***

$rebootAfterUpdate = $TRUE
$updatesLimit = -1
$enableDownload = $TRUE
$enableInstall = $TRUE
$logFilePath = “Path dei file di logs
$logFileNameSuffix = “LogInstallUpdates”
$logFilesRetained = 10
$sendLogByMail = $TRUE
$smtpServer = “Nome o IP Server SMTP
$mailFrom = “Indirizzo mail from
$mailTo = “Indirizzo mail to
# ********************

# *** Creazione Log Path e impostazione Log File Name
$logFileNameBase = $logFilePath + “\” + $logFileNameSuffix
$logFile = $logFileNameBase + “-” + (Get-Date).ToString(“yyyy-MM-dd-HH-mm-ss”) + “.txt”
if (!(Test-Path $logFilePath)){
New-Item $logFilePath -type directory
}

# *** Ricerca Updates da Installare
$updatesSearcher = New-Object -ComObject Microsoft.Update.Searcher
$updatesPending = $updatesSearcher.Search(“Type=’software’ AND IsInstalled=0 AND IsHidden=0″)

$updatesSelected = $updatesPending.Updates
If ($updatesLimit -ne -1){
$updatesSelected = $updatesSelected | Select-Object -First $updatesLimit
}

# *** Analisi Elenco Updates da installare
If ($updatesPending.Updates.Count -eq 0){
(Get-Date).ToString(“yyyy-MM-dd HH:mm:ss”) + ” Non sono stati trovati aggiornamenti da installare” | Out-File $logFile -append
}
Else {
# Definizione della collezione degli update da scaricare
$updatesDownloadCollection = New-Object -ComObject Microsoft.Update.UpdateColl

# Definizione della collezione degli update da installare
$updatesInstallCollection = New-Object -ComObject Microsoft.Update.UpdateColl

# Scorrimento degli update da installare
ForEach ($update In $updatesSelected) {
# Estrazione ID update da installare
$updateID=$update.Identity.UpdateID

# Log delle informazoni dell’update
(Get-Date).ToString(“yyyy-MM-dd HH:mm:ss”) + ” Analisi aggiornamento da installare” | Out-File $logFile -append
“`t ” + $update.Title | Out-File $logFile -append
“`t ” + “ID: ” + $update.Identity.UpdateID | Out-File $logFile -append
“`t ” + “Mandatory: ” + $update.IsMandatory.ToString() | Out-File $logFile -append
“`t ” + “MaxDownloadSize: ” + $update.MaxDownloadSize + ” bytes” | Out-File $logFile -append
“`t ” + $update.Description | Out-File $logFile -append
If ($update.DownloadPriority -eq 1){
“`t ” + “Priority: Low” | Out-File $logFile -append
}
ElseIf ($update.DownloadPriority -eq 2){
“`t ” + “Priority: Normal” | Out-File $logFile -append
}
ElseIf ($update.DownloadPriority -eq 3){
“`t ” + “Priority: High” | Out-File $logFile -append
}

# Ricerca Item Update
$updateIDSearcher = $updatesSearcher.Search(“UpdateID=’$updateID'”)
$updateIDUpdates = $updateIDSearcher.Updates
$updateIDItem = $updateIDUpdates.Item(0)

# Aggiunta dell’update alla collezione degli update da scaricare
If ($update.IsDownloaded){
“`t ” +  “Aggiornamento scaricato” | Out-File $logFile -append
}
Else {
“`t ” + “Aggiornamento da scaricare” | Out-File $logFile -append
$updatesDownloadCollection.Add($updateIDItem) | out-null
}

# Aggiunta dell’update alla collezione degli update da installare
$updatesInstallCollection.Add($updateIDItem) | out-null
#”———–” | Out-File $logFile -append
}

# Avvio Download Aggiornamenti
If ($updatesDownloadCollection.Count -eq 0){
(Get-Date).ToString(“yyyy-MM-dd HH:mm:ss”) + ” Non sono stati trovati aggiornamenti da scaricare” | Out-File $logFile -append
}
ElseIf ($enableDownload) {
(Get-Date).ToString(“yyyy-MM-dd HH:mm:ss”) + ” Avvio download ” + $updatesDownloadCollection.Count + ” aggiornamenti” | Out-File $logFile -append
$updateSession = New-Object -ComObject Microsoft.Update.Session
$updatesDownloader = $updateSession.CreateUpdateDownloader()
$updatesDownloader.Updates = $updatesDownloadCollection
$updatesDownloader.Download()
(Get-Date).ToString(“yyyy-MM-dd HH:mm:ss”) + ” Download aggiornamenti eseguito” | Out-File $logFile -append
}
Else{
(Get-Date).ToString(“yyyy-MM-dd HH:mm:ss”) + ” Necessario dowload di ” + $updatesDownloadCollection.Count + ” aggiornamenti” | Out-File $logFile -append
}

# Installazione Aggiornamenti
If ($updatesInstallCollection.Count -eq 0){
(Get-Date).ToString(“yyyy-MM-dd HH:mm:ss”) + ” Non sono stati trovati aggiornamenti da installare” | Out-File $logFile -append
}
ElseIf ($enableInstall) {
(Get-Date).ToString(“yyyy-MM-dd HH:mm:ss”) + ” Avvio installazione ” + $updatesInstallCollection.Count + ” aggiornamenti” | Out-File $logFile -append
$updatesInstaller = New-Object -ComObject Microsoft.Update.Installer
$updatesInstaller.Updates = $updatesInstallCollection
$updatesInstaller.Install()
(Get-Date).ToString(“yyyy-MM-dd HH:mm:ss”) + ” Installazione aggiornamenti eseguita” | Out-File $logFile -append
}
Else{
(Get-Date).ToString(“yyyy-MM-dd HH:mm:ss”) + ” Necessaria installazione di ” + $updatesInstallCollection.Count + ” aggiornamenti” | Out-File $logFile -append
}

# Invio Log File
If ($sendLogByMail){
$mailSubject = “Installazione aggiornamenti computer ” + $env:computername
$mailBody = Get-Content $logFile | Out-String

If ($rebootAfterUpdate){
$mailBody = $mailBody + “`nIl sistema verrà riavviato”
}

Send-MailMessage -To $mailTo -Subject $mailSubject -From $mailFrom -Body $mailBody -SmtpServer $smtpServer -Encoding Default
(Get-Date).ToString(“yyyy-MM-dd HH:mm:ss”) + ” Invio log tramite mail eseguito” | Out-File $logFile -append
}

# Eliminazione log file obsoleti
$logFiles = Get-ChildItem $logFilePath –PipelineVariable item | Where {$item.psIsContainer -eq $false -and $item.FullName -like ($logFileNameBase + “*”)} | Sort FullName
If ($logFiles.Count -gt $logFilesRetained){
For ($i = 1; $i -le $logFiles.Count – $logFilesRetained; $i++) {
(Get-Date).ToString(“yyyy-MM-dd HH:mm:ss”) + ” Eliminazione log file ” + $logFiles[$i-1].FullName | Out-File $logFile -append
Remove-Item $logFiles[$i-1].FullName | Out-File $logFile -append
}
}

# Esecuzione riavvio
If ($rebootAfterUpdate){
(Get-Date).ToString(“yyyy-MM-dd HH:mm:ss”) + ” Riavvio computer” | Out-File $logFile -append
Restart-Computer
}
}

Installare il ruolo Hyper-V su computer senza supporto alla SLAT

$
0
0

Come ho indicato nel post Windows Server Technical Preview 2 novità in Hyper-V con la prossima release di Windows Server occorrerà il supporto alla SLAT (Second Level Address Translation) per poter installare il ruolo Hyper-V.

Per verificare se il computer ha un processore con supporto alla SLAT è possibile utilizzare PowerShell per eseguire semplicemente una query WMI tramite il comando:

(Get-CimInstance Win32_Processor).SecondLevelAddressTranslationExtensions

La funzionalità SLAT è indicata da Intel indica col nome Extended Page Tables (EPT), mentre da AMD col nome Nested Page Tables (NPT) o Rapid Virtualization Indexing (RVI).

Analogamente lo stesso approccio può essere utilizzato per verificare se il computer dispone della Data Execution Prevention tramite il comando:

(Get-CimInstance Win32_OperatingSystem).DataExecutionPrevention_available

La funzionalità Data Execution Prevention  è indicata da Intel indica col nome Execute Disable (XD), mentre da AMD col nome No Execute (NX).

Sempre utilizzando una query WMI eseguita tramite PowerShell è possibile verificare se il computer dispone della Hardware Virtualization Assists tramite il comando:

(Get-CimInstance Win32_OperatingSystem).DataExecutionPrevention_available

La funzionalità Hardware Virtualization Assists è indicata da Intel indica col nome Intel VT-x, mentre da AMD col nome AMD-V.

image

La funzionalità Data Execution Prevention  è indicata da Intel indica col nome Execute Disable (XD), mentre da AMD col nome No Execute (NX).

E’ possibile installare il ruolo Hyper-V su un computer senza supporto alla SLAT in Windows Server Technical Preview 2 (o in Windows 8/8.1/10) tramite  il comando DISM:

dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All

Quindi tramite il comando PowerShell Install-WindowsFeature è possibile installare anche i Manamgemt Tools (Hyper-V GUI Management Tools e Hyper-V Module for Windows PowerShell):

Install-WindowsFeature –Name Hyper-V -IncludeManagementTools -Restart

Per verificare l’avvenuta installazione è possibile utilizzare il seguente comando PowerShell:

Get-WindowsFeature Hyper-V*

image

Ovviamente l’installazione di Hyper-V in questa modalità bypassa il controllo dei requisiti, ma questo non significa che l’hypervisor potrà funzionare. In ogni caso  in questo modo sarà almeno possibile eseguire test sulla creazione di VM su computer sprovvisti del supporto alla SLAT anche se non sarà possibile eseguire la VM. Questo approccio può essere utilizzato anche per aggiungere il ruolo Hyper-V all’interno di una VM.

Per rimuovere il ruolo Hyper-V è invece possibile utilizzare il seguente comando PowerShell:

Uninstall-WindowsFeature –Name Hyper-V -IncludeManagementTools -Restart

Oppure il comando DISM:

dism.exe /Online /Disable-Feature:Microsoft-Hyper-V-All

Vi ricordo che se desidete approfondire le nuove funzonalità di Windows Server 2016 e non solo vi aspettiamo alla Server Infrastructure Days 2015 il 17 e 18 Giugno 2015 dove sarò presente con le sessioni WS01 // Implementing IPv6: Notes From the Field e WS04 // Windows Server: Implement Remote Desktop Services.

image

Automazione della creazione di VHD Template

$
0
0

Una delle prime operazioni da eseguire quando si decide di implementare il VDI o di eseguire il deploy di VM custom in Azure è quella di crearsi uno o più VHD template da cui poi creare le VM.

Per le linee guida relative la creazione di un’infrastruttura VDI basata su W8.1 si veda Build Virtual Desktop Templates e in particolare vengono fatte le seguenti raccomandazioni:

  • Configurare il virtual desktop template per l’utilizzo di almeno 1.024 MB di RAM Statica o Dinamica
  • Configurare il virtual desktop template in modo che abbia una connessione di rete verso la rete aziendale
  • Configurare il virtual desktop template in modo che esegua il join a dominio durante la creazione
  • Nel caso di un virtual desktop template per un’infrastruttura VDI basata su WS2012 R2 è supportato solo il formato VHD
  • L’immagine del sistema Windows 8.1 deve essere generalizzata tramite il Windows System Preparation Tool (Sysprep)
  • Il virtual desktop template può essere configurato come un disco differenziale
  • Il virtual desktop template può contenere più partizioni, ma solo un’immagine di sistema operativo

Per una serie di step by step relativi alla gistione del VDI collection in Windows Server 2012 R2 e sulle VM in Azure si vedano:

Per automatizzare la creazione dei template è possibile utilizzare lo script PowerShell Convert-WindowsImage.ps1 suggerito al seguente Deployment–Version 6.3 of Convert-WindowsImage.ps1 released e disponibile al seguente Convert-WindowsImage.ps1 — WIM2VHD for Windows 8 and Windows 8.1:

Convert-WindowsImage is the new version of WIM2VHD designed specifically for Windows 8 and above. Written in PowerShell, this command-line tool allows you to rapidly create sysprepped VHDX and VHDX images from setup media for Windows 7/Server 2008 R2, Windows 8/8.1/Server 2012/R2

Images created by Convert-WindowsImage will boot directly to the Out Of Box Experience, ready for your first-use customizations. You can also use these images for automation by supplying your own unattend.xml file, making the possibilities limitless. Fresh squeezed, organically grown, free-range VHDs – just like Mom used to make – that work with Virtual PC (Windows 7 only), Virtual Server (Windows 7 only), Microsoft Hyper-V, or Windows’ Native VHD-Boot functionality!

Convert-WindowsImage (just like its precessor, WIM2VHD tool) was originally created by Mike Kolitz (http://social.technet.microsoft.com/profile/mike kolitz) while he was a Microsoft Employee and worked on Windows. The tool is now maintained by his friends from Microsoft Consulting Services (MCS)

Per un  approfondimento sul procedimento che sta alla base dello script si veda il post How to Install an Image onto a VHD file.

Volendo è anche possibile utilizzare lo script tramite un’interfaccia grafica avviandolo con il seguente comando:

PowerShell .\Convert-WindowsImage.ps1 -ShowUI

Al momento lo script non supporta Windows 10, ma nelle Q and A alcuni utenti hanno dato indicazioni su come modificare lo script.

DPM 2010 e gestione client Windows 8/8.1

$
0
0

Per far sì che DPM 2010 riesca a proteggere cartelle su client Windows 8/8.1 è possibile aggiungere sul client da proteggere il valore DWORD ForceFixup impstandolo a 1 nella chiave di registro HKLM\SOFTWARE\Microsoft\Microsoft Data Protection Manager\Agent\2.0, quindi eseguire le seguenti operazioni:

  • Riavviare sul client i servizio DPMRA (DPMRA) e per sicurezza anche il servizio DPM Client Service (DPMClientService) oppure riavviare il client
  • Dalla console di DPM eseguire una Verifica coerenza
  • Dalla console di DPM eseguire la creazione di un Punto di ripristino che dovrebbe avvenire senza problemi

Per una descrizione del valore ForceFixup si veda il post  An in-depth look at the Registry settings that control Microsoft DPM 2012:

Bypass DPM filter block level tracking

There may be times when normal backups may not occur due to errors in the DPM Filter bitmap, a possible resource issue on the machine, or some other unforeseen problem. Under such conditions, you may want DPM to make the backup using consistency check workflow until a permanent solution can be found. To Bypass the DPM filter block level tracking mechanism, you can add this registry value on the protected server, then restart the DPMRA service.

NOTE This will have the same performance impact as a consistency check for every recovery point taken while the ForceFixup is in use.

Please be aware of the following KB Article: 2848751 VM backups in Data Protection Manager fail with “change tracking information is corrupt” error (https://support.microsoft.com/en-us/kb/2848751/en-us)

Questo workaround permette di utilizzare DPM in situazioni in normale backup non viene eseguito a causa di errori nel DPM Filter bitmap, quindi impostando il valore ForceFixup è possibile eseguire il backup utilizzando il consistency check workflow in attesa o in mancanza del rilascio di una soluzione bypassando il meccanismo DPM filter block level tracking.

E’ possibile provare ad utilizzare questa soluzione ad esempio per gestire temporaneamente asset non supportati in DPM 2010 in attesa di migrare DPM alla nuove versioni.

Per la matrice di supporto di sistemi operativi, servizi e prodotti supportati in DPM 2010 si veda Protected Computer Software Requirements, da cui si può notare come DPM 2010 supporti solo gli OS client da XP Sp2 a Windows 7 Client.

Per la matrice di supporto di sistemi operativi, servizi e prodotti supportati in DPM 2012, 2012 SP1 2012 R2 si veda DPM protection support matrix, da cui si può notare come Windows 8.1 sia supportato a partire da DPM 2012 SP1.

Internet Explorer e pulsante indietro non funzionante

$
0
0

Talvolta con Internet Explorer può succedere che eseguendo una ricerca da Google e aprendo un link trovato poi premendo il tasto indietro non si torni alla pagina delle ricerche. Il motivo è dovuto al fatto che Google crea un link di redirezione quindi per tornare alla ricerca sarebbe necessario premere due volte rapidamente il pulsante Indietro per tornare alla ricerca:

image

Il problema si verifica però solo su alcun siti e non su tutti, a nulla serve resettare Internet Explorer alle impostazioni default o eliminare cache, cookies, cronologia o reinstallarlo dal momento che ho rilevato il problema anche su un computer appena installato e completamente aggiornato (a riguardo si vedano How to repair or reinstall Internet Explorer in Windows e How to reset Internet Explorer settings)

Di seguito una serie di prove che ho eseguito con il risultato:

  • Utilizzando un utente con privilegi amministrativi il problema non si presenta
  • Utilizzando Bing  il problema non si presenta
  • Impostando la modalità di compatibilità il problema continua a presentarsi
  • Su Chrome il problema non si presenta
  • Disabilitando la redirezione tramite l’url http://google.com/webhp?nord=1 il problema non si presenta (va però precisato che in questa modalità non è possibile utilizzare https)
  • L’impostazione dei siti attendibili non risolve il problema
  • Intervenendo sulle Tracking Protection Lists mediante l’url http://ie.microsoft.com/testdrive/browser/p3p/  il problema continua a presentarsi

Quindi di fatto essendo il problema legato a come Google apre i link trovati e a come Internet Explorer gestisce questo redirect al momento non esiste una soluzione definitiva ad un problema che è comunque saltuario e si presenta solo su alcuni siti.

Quello che si può fare per mitigare il problema è ad esempio configurare Google per aprire le ricerche in un nuovo tab:

image

image

Oppure il alternativa quando si verifica il problema eseguire un click col tasto destro sul botton indietro e selezionare l’elemento della cronologia relativo alla ricerca, o ancora valutare l’utilizzo di Bing come motore di ricerca.

HP ProBook 4330s e WiFi disabilitata

$
0
0

Installando Windows 8.1 su un notebook HP ProBook 4330s mi è capitato che la connessione WiFi risultasse sempre non abilitata anche se da BIOS la scheda di rete era abilitata e i driver installati correttamente tra l’altro in modo automatico e senza necessità di scaricarli dal sito HP.

Per risolvere il problema è bastato installare il framework .NET 3.5 (che aggiunge anche il framework .NET 2.0 e 3.0) e dopodiché la connessione WiFi si è abilitata rilevando le reti.


Entity Framework e colonne Rowversion

$
0
0

Per gestire la concorrenza su una tabella in SQL Server è possibile aggiungere una colonna rowversion che permette di esporre una sequenza di numeri binari univoci generati automaticamente all’interno del database offrendo quindi meccanismo per contrassegnare le righe con un numero di versione.

Una colonna rowversion ha una dimensione di 8 byte e rappresenta un numero incrementale senza quindi avere riferimenti ad una data o ad un’ora, ogni database include un contatore che viene incrementato a ogni operazione di inserimento o aggiornamento eseguita su una tabella contenente una colonna di tipo rowversion e ogni tabella può includere una sola colonna di tipo rowversion.

Una colonna rowversion non è adatta per essere utilizzata come chiave o per essere indicizzata, dal momento che gli aggiornamenti eseguiti sulla riga modificano il suo valore, con la conseguenza che verrebbe modificato il valore della chiave.

Si noti che in SQL Server Management Studio (anche nella versione 2014) rowversion non è presente tra i tipi di dato per una colonna, ma è presente solo timestamp, questo perché come indicato nel seguente SQL 2008 Still Shows Timestamp, not RowVersion dal  SQL Programmability Team nel parser dell’engine ROWVERSION è un alias di TIMESTAMP (a riguardo si veda Data Type Synonyms (Transact-SQL)):

This is an issue in the engine since ROWVERSION is just an alias for TIMESTAMP in the Parser. The name “ROWVERSION” doesn’t make it through to the other parts of the engine like metadata or schema.

Umachandar, SQL Programmability Team

A riguardo si veda anche il seguente Deprecate TIMESTAMP (the keyword, not ROWVERSION itself):

We agree that the original naming of this type was unfortunate (and we can blame our predecessors ;-)). Especially since the name is used in the SQL standard for date/time datatypes.
We are going to look into how we can address this issue in a backwards-compatible way in the upcoming releases.
Please keep the votes coming.

Se in Visual Studio 2013 si utilizza Entity Framework 6.0 per creare un object-relational mapper verso una tabella contenente una colonna di tipo rowversion la proprietà ConcurrencyMode non viene impostata a Fixed, ma lasciata a None.

La proprietà ConcurrencyMode permette di gestire la concorrenza in quanto se impostata a Fixed su una colonna questa verrà controllata prima di eseguire operazioni di scrittura che verranno abortite se la colonna risulta modificata. A riguardo si veda Tip 19 – How to use Optimistic Concurrency with the Entity Framework.

Il problema è stata anche segnalato Reverse engineering does not mark rowversion/timestamp columns as concurrency tokens e verrà probabilmente sistemato nelle future versioni.

Ovviamente è possibile modificare manualmente l’impostazione, ma non è una soluzione ottimale soprattutto se il progetto è suscettibile di modifiche che implicano l’aggiornamento dell’object-relational mapper (file edmx) col rischio di dimenticarsene perdendo quindi la gestione della concorrenza.

Sempre nel thread di segnalazione  Reverse engineering does not mark rowversion/timestamp columns as concurrency tokens sono riportati dei riferimenti a tool che automatizzano l’impostazione della proprietà CorrencyManager intervenendo sul file Xml del object-relational mapper EDMX.

In particolare ho avuto modo di provare FixEFConcurrencyModes descritto nel post A utility to fix faulty ConcurrencyMode settings:

FixEFConcurrencyModes -i MyEdmxFile.edmx

-i <filename>               Edmx input file. Required.
-o <filename>               Output file. Default: overwrite the input file.
-n <pattern1 pattern2 …>  Regex patterns for column names used for concurrency control.
-t <type1 type2 …>        Types for concurrency control. Default: rowversion timestamp
-p                          Preview. Changes are shown but nothing is written to file.
-q                          Quiet mode.
–help                      Display the help screen.

Di seguito alcuni esempi di utilizzo:

  • Impostazione ConcurrencyMode = Fixed su tutte le colonne con nome RowVersion:
    FixEFConcurrencyModes -i myfile.edmx -n RowVersion
  • Impostazione ConcurrencyMode = Fixed su tutte le colonne di tipo uniqueidentifier or timestamp:
    FixEFConcurrencyModes -i MyEdmxFile.edmx -t uniqueidentifier timestamp
  • Impostazione ConcurrencyMode = Fixed su tutte le colonne il cui nome contiene la string “VersionNo” o termina con “Revision”:
    FixEFConcurrencyModes -i myfile.edmx -n VersionNo Revision$
  • Per avere una preview delle modifiche cheil tool apporta senza però applicarle è possibile utilizzare il parametro -p:
    FixEFConcurrencyModes -i myfile.edmx -p

Windows Server: Manutenzione di WSUS

$
0
0

Su WindowServer.it al seguente Windows Server: Manutenzione di WSUS trovate un mio articolo che descrive una serie di operazioni che è possibile eseguire per mantenere in efficienza WSUS e per migliore le performance nel caso il servizio WSUS non sia stato manutenuto per lunghi periodi.

Per chi lo desidera nel prossimi giorni aggiungerò...

Network Load Balancing Issues

$
0
0

Su WindowServer.it al seguente Network Load Balancing Issues trovate un mio articolo che descrive una serie di issues comuni che possono verificarsi durante l’implementazione dell’Network Load Balancing (NLB).

Per chi lo desidera nel prossimi giorni aggiungerò la versione PDF nella sezione Articoli del blog.

Buona lettura!

Corsi MVA di troubleshooting Active Directory

Windows phone 8.1 errore 80072f89

$
0
0

Scenario: Windows Phone 8.1 (ma pare accade anche con versioni precedenti) è configurato un account per la connessione ad Exchange (nel mio caso Exchange 2010 ma sembra che la versione non sia rilevante) che utilizza un certificato digitale autofirmato o generato da una CA interna.

Errore: quando il certificato viene rinnovato la sincronizzazione con Exchange fallisce con l’errore 80072f89.

Causa: Windows Phone 8.1 non ricarica il certificato rinnovato e di conseguenza non avviene la sincronizzazione

Soluzioni: Per risolvere l’issue è possibile eliminare e ricreare l’account su Windows Phone in questo modo il certificato viene ricreato.

Il tentativo di provare a caricare manualmente il certificato in Windows Phone inviandolo su una mail di appoggio non  ha risolto l’issue (per altri metodi utilizzabili per distribuire i certificati su Windows Phone si veda Installing digital certificates).

Un’altra  prova che non ho eseguito è stata quella di eliminare il telefono da Outlook Web Access per vedere se si risincronizzava, ma anche in questo caso senza successo.

image


Word: errore in wwlib.dll

$
0
0

Talvolta per vari motivi può accadere che word non si avvii correttamente a causa di file corrotti o chiavi di registro inconsistenti dovute ad esempio a problemi sul disco rigido o chiusure anomale dell’applicativo o del sistema.

Un esempio di tali problemi può essere l’errore legato alla wwlib.dll che impedisce l’avvio di Word.

Un modo per risolvere il problema è quello di provare rinominare la wwlib.dll (ad esempi in wwlib.dll.old) ed eseguire il ripristino di office. Al termine del ripristino Word dovrebbe riuscire ad avviarsi, nel caso venga richiesto avviarlo la prima volta in modalità provvisoria.

Altri metodi per risolvere questo tipo di probematiche sono descritti nelle seguenti KB:

PowerShell: avvio applicazione e input

$
0
0

Talvolta può essere utile avviare delle applicazioni e simulare la pressione di tasti per riuscire ad automatizzare delle operazioni che non è possibile eseguire, ad esempio, tramite riga di comando.

Un esempio di questo approccio lo avevo trattato nel post Telnet script dove tramite VBScript veniva automatizzata una sessione Telnel.

Ovviamente è possibile eseguire tale automazione anche tramite PowerShell sfruttano metodi offerit da classi .NET.

Di seguito analizzeremo come sia possibile convertire il seguente script VBSript che apre notepad e scrive un testo di esempio:

‘Avvio NotePad
Set oShell = WScript.CreateObject(“WScript.Shell”)
oShell.Run “%windir%\notepad.exe”

‘Attesa avvio applicazione di 1 sec
WScript.Sleep 1000

‘Invio pressione tasti
oShell.SendKeys “Testo di esempio riga 1″
oShell.SendKeys “{ENTER}”
oShell.SendKeys “Powered by VBScript”

‘Apertura opzione Salva con nome del menu File (Alt+f+v)
oShell.SendKeys “%fv”

‘Attesa apertura menu 0.5 sec
WScript.Sleep 500

E’ possibile convertire in PowerShell il precedente script utilizzando la classe System.Windows.Forms.SendKeys del .NET Framework come indicato in Converting the Windows Script Host SendKeys Method:

# Load Assebly System.Windows.Forms 
[void] [System.Reflection.Assembly]::LoadWithPartialName(“‘System.Windows.Forms”)

# Avvio NotePad
& “$env:WINDIR\notepad.exe”

# Attesa avvio applicazione di 1 sec
Start-Sleep -m 1000

# Invio pressione tasti
[System.Windows.Forms.SendKeys]::SendWait(“Testo di esempio riga 1″)
[System.Windows.Forms.SendKeys]::SendWait(“{ENTER}”)
[System.Windows.Forms.SendKeys]::SendWait(“Powered by PowerShell”)

# Apertura opzione Salva con nome del menu File (Alt+f+v)
[System.Windows.Forms.SendKeys]::SendWait(“%fv”)

# Attesa apertura menu 0.5 sec
Start-Sleep -m 500

Si noti che anche se non esiste un cmdlet specifico per eseguire il SendKey lo script PowerShell contiene lo stesso numero di istruzioni di quello VBScript con l’innegabile vantaggio di avere a disposizione la possibilità di utilizzare le classi del .NET Framework.

Si ricordi che per eseguire gli script occorre configurare l’Execution Policy impostandola ad esempio a RemoteSigned, a riguardo si veda l’help del cmdlet Set-ExecutionPolicy.

Per ulteriori informazioni si vedano anche i post:


Rilascio di Windows 10

$
0
0

Dal 29 luglio 2015 Windows 10 è disponibile come aggiornamento gratuito per i sistemi Windows 7, 8, 8.1 come annunciato nel post Windows 10 Free Upgrade Available in 190 Countries Today.

Per la precisione il 29 luglio 2015 sono state rese disponibili per l’aggiornamento le versioni per utenti consumer Windows 10 Pro e Windows 10 Home, mentre il 1 agosto 2015 sono state rese disponibili le versioni Volume licensing per utenti business Windows 10 Enterprise e Windows 10 Education sul Volume Licensing Service Center (VLSC), a riguardo si veda anche Windows 10: Preparing to Upgrade One Billion Devices e la KB 3035583 Update installs Get Windows 10 app in Windows 8.1 and Windows 7 SP1.

Per quanto riguarda i Surface si veda Install Windows 10 on Surface devices today.

Il 5 agosto 2015 è stato reso disponibile il primo Cumulative Update con la KB3081424: Cumulative Update for Windows 10: August 5, 2015, che contiene le hotfix elencate nella KB 3081424 Cumulative Security Update for Windows 10: July 29, 2015.

Come pubblicato sul post Introducing Windows 10 Editions saranno le seguenti:

  • Windows 10 Home
  • Windows 10 Mobile
  • Windows 10 Pro
  • Windows 10 Enterprise
  • Windows 10 Education
  • Windows 10 Mobile Enterprise
  • Windows 10 IoT Core

Per quanto riguarda l’upgrade gratuito da versioni precedenti è possibile trovare informazioni in merito nelle Windows 10 Q&A, di seguito un estratto di alcuni punti che sono spesso oggetto di discussione:

L’upgrade di circa 3 GB sarà gratuito per sistemi Windows 7 e Windows 8/8.1 con regolare licenza in quanto Windows 10 è progettato per essere eseguito su hardware compliance con i requisiti di Windows 7 e Windows 8. Per eseguire l’upgrade è necessario avere aggiornato il sistema a Windows 7 SP1 o a Windows 8.1 ed essere connessi ad internet, ma rimangono escluse dall’aggiornamento le edizioni Windows 7 Enterprise, Windows 8/8.1 Enterprise e Windows RT/RT 8.1.

Gli utenti enterprise avranno la possibilità di ottenere Windows 10 gratuitamente tramite la Software Assurance subscription:

“Enterprise customers with active Software Assurance subscription in volume licensing have the benefit to upgrade to Windows 10 enterprise offerings outside of this offer.”

Per verificare le specifiche, i requisiti e le funzionalità deprecate si veda Windows 10 Specifications, mentre per una lista delle varie funzionalità presenti nelle varie edizioni si veda See which features come with each Windows 10 Edition.

Di seguito gli upgrade edition path per Windows 7 e Windows 8:

image

image

image

image

“N” and “KN” editions follow the upgrade path of the parent edition (e.g., Windows 7 Professional N upgrades to Windows 10 Pro N).

Per eseguire l’upgrade su più computer sarà possibile utilizzare il Media Creation Tool, per eseguire l’upgrade gratuito si avrà un anno di tempo ovvero fino al 29 luglio 2016 e Windows 10 sarà gratuto sui device aggiornati anche dopo quella data come si evince dalle seguenti note contenute nelle Windows 10 Q&A:

“Yes, free! This upgrade offer is for a full version of Windows 10, not a trial.”

“You have until July 29, 2016 to take advantage of this free upgrade offer. Once you upgrade, you’ll have Windows 10 for free on that device.”

Nel caso non si desiderasse mantenere Winows 10 sarà possibile eseguire il revert dell’installazione entro un mese dopo l’upgrade:

“Can I go back to my previous version of Windows if I don’t like Windows 10?
Yes, while we think you will love all the features of Windows 10, you will have one month after upgrading to revert back to the previous version of Windows on your device.”

Sarà anche possibile eseguire una reinstallazione se necessario sui device su cui è stato eseguito l’upgrade:

“Can I reinstall Windows 10 on my computer after upgrading?
Yes. Once you’ve upgraded to Windows 10 using the free upgrade offer, you will be able to reinstall, including a clean install, on the same device. You won’t need a product key for re-activations on the same hardware. If you make a meaningful change to your hardware, you may need to contact customer support to help with activation. You’ll also be able to create your own installation media like a USB drive or DVD, and use that to upgrade your device or reinstall after you’ve upgraded.”

Per bloccare sui computer aziendali l’upgrade a Windows 10 è possibile creare la chiave DWORD GWX in HKLM\SOFTWARE\Policies\Microsoft\Windows e impostarla al valore 1. Per i dettagli ed altri suggerimenti si vedano i post How to Remove, Block and Prevent “Get Windows 10″ Application for Enterprise Environments e il post “Get Windows 10 App” – What does it mean for Enterprise Environments.

L’aggiornamento avverrà dopo che il sistema avrà scaricato in background il paccketo d’installazione per Windows 10, si può provare a velocizzare il download resettando la cache di Windows Update con la seguente procedura eseguita con i privilegi di amministratore locale:

Passo 1: Arrestare il servizio di Windows Update con il comando:

net stop wuauserv

Passo 2: Arrestare il servizio BITS con il comando:

net stop bits

Passo 3: Eliminare la cache di Windows Update con il comando:

rmdir /S /Q %windir%\softwaredistribution

Passo 4: Riavviare il sistema

Passo 5: Forzare l’esecuzione di Windows Update con il comando:

wuauclt.exe /updatenow

Passo 6: Winodws Update dovrebbe proporre il download del pacchetto d’installazione per Windows 10

image

Per approfondire le novità introdotte nel nuovo sistema operativi si veda la sezione nella TechNet library dedicata a Windows 10 in cui è possibile approfondire le seguenti tematiche:

Inoltre sulla Microsoft Virtual Accademy è disponibile il corso in italiano Windows 10: Distribuzione, gestione e sicurezza del nuovo sistema operativo.

Per approfondire la nuova gestione dei package denominate OneGet introdotta in Windows 10 si veda il post Introducing PackageManagement in Windows 10, mentre per approfondire le novità rigurdati la sicurezza si veda il mio post Nuove funzionalità antimalware in Windows 10 e Windows Server 2016.

Per testare Windows 10 è possibile scaricare dal TechNet Evaluation Center la trial 90 giorni della versione Enterprise del sistema operativo al seguente Windows 10 Enterprise, a riguardo si vedano anche le indicazioni al seguente Try it out: Windows 10 Enterprise Evaluation,  le Windows 10 Enterprise: FAQ for IT professionals e i dettagli sui requisiti di sistema al seguente Windows 10 Enterprise system requirements, di seguito i requisiti hardware necessari:

  • Processore: 1 GHz o superiore
  • RAM: 1 GB (per la versione a 32-bit) o 2 GB (per la versione a 64-bit)
  • Spazio libero su disco fisso: 16 GB (per la versione a 32-bit) or 20 GB (per la versione a 64-bit)
  • Scheda grafica: DirectX 9 o successiva con WDDM 1.0 driver
  • Display: 800×600

Come riportato nelle Windows 10 Enterprise system requirements per la versione a 64 bit è richiesto il supporto alle tecnologie CMPXCHG16b, PrefetchW e LAHF/SAHF:

“For 64-bit installations, a small number of older PCs may be blocked from installation because they do not support CMPXCHG16b, PrefetchW, and LAHF/SAHF”

Nel caso di client Windows 10 in Active Directory si può verificare l’issue descritto nella KB3077013 “‘Microsoft.Policies.Sensors.WindowsLocationProvider’ is already defined” error when you edit a policy in Windows che può comunque essere ignorato o aggirato tramite un workaround.

Per informazioni sulla gestione di Windows 10 tramite System Center si vedano i post:

Errore Winlogon 6006 e WMI repository

$
0
0

In questi giorno ho analizzato un problema su un paio di computer Windows 8.1 che si avviavano con estrema lentezza rimanendo in alcuni casi sulla videata di attesa fino a 60 minuti!!

image

Scorrendo il registro eventi Applicazione ho trovato il seguente avviso che descriveva la causa della lunga attesa, ovvero un problema durante l’esecuzione del GPClient

Nome registro: Application
Origine:       Microsoft-Windows-Winlogon

ID evento:     6006
Categoria attività:Nessuna
Livello:       Avviso
Parole chiave: Classico

Descrizione:
La gestione dell’evento di notifica (CreateSession) da parte del sottoscrittore delle notifiche di WinLogon <GPClient> ha richiesto 3599 secondi.

Per tentare una risoluzione ho eseguito le classiche prove di mettere i client in workgroup e in OU senza policy applicate col risultato che i cliente in workgroup o sconnessi dalla rete si avviavano velocemente, mentre lo spostamento in OU senza policy applicate non produceva effetti migliorativi, al contrario dello spostamento in alcune OU con policy differenti. Quindi nel mio caso il problema poteva solo essere legato o alla connessione di rete o al WMI Repository che viene utilizzato durate la fase di analisi delle group policy.

Per risolvere il problema ho eseguito il reset del WMI Repository tramite i seguenti comandi:

net stop winmgmt /y

winmgmt /resetrepository

Quindi ho riavviato il sistema che si è avviato in tempi ragionevoli. Per un approfondimento sul rebuid del WMI Repository si veda WMI: Rebuilding the WMI Repository.

Questo problema può avere più cause in quanto il corretto funzionamento del GPClient dipende da più fattori quali:

  • Connettività di rete
  • Corretto funzionamento del sistema e dei suoi componenti
  • Funzionalità dello storage WMI
  • Funzionalità di Active Directory

Di seguito riporto alcuni tentativi che ho eseguito e che nel mio caso non sono stati risolutivi, ma potrebbero esserlo in altre situazioni soprattutto quanto il tempo di creazione della sessione è lungo, ma decisamente al di sotto dei 60 minuti:

  • Aggiornamento dei driver e del firmware della scheda di rete se esistono versioni aggiornate
  • Verifica che la scheda di rete utilizzata per accedere al Domain Controller e processare le Group Policy sia configurata per essere la prima ad essere processata. Per verificare questa impostazione aprire l’applet delle Connessioni di rete (ncpa.cpl) e quindi il Menu Avanzate e la voce Impostazioni avanzate
  • Assicurarsi di avere installato gli ultimi aggiornamenti del sistema
  • Provare a disabilitare temporaneamente i software di protezione antivirus, firewall e antimalware per assicurarsi che la funzionalità del GPClient non sia erroneamente bloccata
  • Controllo di eventuali problemi legati all’installazione di applicazione tramite Group Policy che bloccano l’avvio della sessione, è possibile verificare eventuali errori di installazione o rimozione di applicazioni tramite il registro eventi e tentare la risoluzione tramite la KB290301 What happened to the Windows Installer Cleanup Utility (MSICUU2.exe)?
  • Correzione di eventuali problemi legati a componenti del sistema tramite l’esecuzione del comando sfc /scannow con privilegi amministrativi per tre volte e successivamente riavviare il sistema
  • Se sono stati evidenziati errori ai componenti di sistema è possibile eseguire un repair dei componenti eseguendo in sequenza i comandi e successivamente riavviare il sistema:
    Dism.exe /online /Cleanup-Image /StartComponentCleanup
    sfc/scannow
    Dism /Online /Cleanup-Image /RestoreHealth
    sfc/scannow
  • Controllare la funzionalità dei servizi di Active Directory, a riguardo si veda il mio post Script per il controllo della funzionalità di Active Directory

Per maggiori approfondimenti si vedano anche i seguenti:

PowerShell: errore InitializeDefaul tDrives sul provider ‘FileSystem’ non riuscito

$
0
0

Se avviando la console di PowerShell con privilegi amministratore locale viene visualizzato l’errore “Tentativo di esecuzione dell’operazione InitializeDefaultDrives sul provider ‘FileSystem’ non riuscito.” il problema può essere legato a drive a cui l’utente con privilegi di amministratore locale non ha diritti di accesso.

image

Questo problema può, ad esempio, presentarsi se da sessione utente con drive di rete connessi si avvia la console la console di PowerShell con privilegi amministratore locale con credenziali di aventi privilegi di amministratore locale, ma senza diritti di accesso ai drive di rete.

Una soluzione può essere quella di disconnettere temporaneamente i drive di rete ed avviare la console di PowerShell che dovrebbe avviarsi senza errori.

In ogni caso se il problema è dovuto a drive di rete va precisato che la console di PowerShell risulta comunque funzionante e se non occorre accedere a tali risorse di rete è possibile ignorare l’errore.

A riguardo si veda anche il post A Very PowerShell Thanksgiving che prospetta invece uno scenari in ui il problema è legato all’utilizzo di Microsoft Application Virtualization:

“Every time I launch PowerShell, I get the following error:  “Attempting to perform the InitializeDefaultDrives operation on the ‘FileSystem’ provider failed.”  It turns out that this error occurs when PowerShell attempts to access a drive which it doesn’t have permission to.  Now, this is a very atypical case.  In my case, it is because I have Microsoft Application Virtualization installed and the drive is not accessible from this particular PowerShell process.”

Esaminare gli account bloccati

$
0
0

Talvolta può capitare che gli account di Active Directory vengano bloccati a causa di tentativi di accesso con password errata. Spesso questo problema può accadere se l’utente dopo aver cambiato la password non ha aggiornato le credenziali sui vari dispositivi o applicativi che utilizza. Molto spesso il problema può essere legato alle seguenti cause che generano tentativi di accesso ripetuti con credenziali errate:

  • Password di rete salvate relative all’account
  • Operazioni pianificate eseguite con le credenziali dell’account
  • Servizi in esecuzione con le credenziali dell’account
  • Applicazioni che utilizzano al loro interno con le credenziali dell’account
  • Utilizzo delle credenziali dell’account per connettersi a reti wifi
  • Utilizzo delle credenziali dell’account per connettersi via Remote Desktop
  • Accessi eseguiti da smartphone, tablet che fanno uso delle credenziali dell’account per leggere la posta, connettersi a reti wifi o aprire VPN
  • Il virus Conficker può causare tentativi di attacchi a forza bruta sui membri del gruppo built-in Administrators nel dominio.
  • Accessi eseguiti da più client con versioni di OS differenti in cui può accadere che le versioni legacy dei client non riescano a rilevare correttamente il cambio di password.

In infrastrutture con Active Directory è possibile analizzare gli eventi di sicurezza del Domain Controller e in particolare del PDC emulator per rilevare i tentativi di accesso falliti da parte di un utente e risalire al computer che genere il problema.

Per eseguire questo tipo di analisi è possibile verificare gli eventi di sicurezza con ID 4740 sul domain controller col ruolo di PDC, infatti a partire da Windows Server 2008 sul PDC viene registrato un evento con ID 4740 ogni qualvolta un account viene bloccato. In una foresta AD con livello funzionale 2008 r2 per far sì che gli eventi di sicurezza con ID 4740 vengano registrati occorre abilitare sul DC la Group Policy locale Computer Configuration\Windows Settings\Security Settings\Advanced Audit Configuration\Logon/Logoff\Audit Account Lockout attivando l’audit per Success e il Failure:

image

Per informazioni riguardo al supporto di questa GPO nelle varie versioni del sistema operativo si veda Which Versions of Windows Support Advanced Audit Policy Configuration?.

Per esportare gli eventi 4740 è possibile utilizzare i seguenti comandi (a riguardo si vedano i suggerimenti nel post Getting event log contents by email on an event log trigger):

del C:\SecEvt4740.txt
wevtutil qe Security “/q:*[System [(EventID=4740)]]” /f:text /rd:true /c:1 > C:\SecEvt4740.txt

Per identificare il DC col ruolo fsmo di PDC è possibile utilizzare il seguente comando (a riguardo si veda Identify the PDC emulator):

dsquery server -hasfsmo pdc

Ovviamente è anche possibile utilizzare PowerShell tramite i cmdlet Get-EventLog e Get-WinEvent introdotto in PowerShell 2.0 (a riguardo si veda il post Hey, Scripting Guy! How Can I Read from Windows Event Logs with Windows PowerShell 2.0?) come descritto nel post Tracing the Source of Account Lockouts in cui viene descritto uno script in cui viene richiesto un account da controllare e viene eseguita sul PDC la ricerca degli eventi di sicurezza con ID 4740: 

# Richiesta Utente
$User = Read-Host -Prompt “Please enter a user name”

 # Ricerca  PDC
$PDC = Get-ADDomainController -Discover -Service PrimaryDC

 # Ricerca eventi di lockout relativi all’utente verificatisi nell’ultima ora
Get-WinEvent -ComputerName $PDC -Logname Security -FilterXPath “*[System[EventID=4740 and TimeCreated[timediff(@SystemTime) <= 3600000]] and EventData[Data[@Name=’TargetUserName’]=’$User’]]” | Select-Object TimeCreated,@{Name=’User Name';Expression={$_.Properties[0].Value}},@{Name=’Source Host';Expression={$_.Properties[1].Value}}

Per un altro esempio si veda il post Use PowerShell to Find the Location of a Locked-Out User e il relativo script Get-LockedOutLocation.

In alternativa è possibile abilitare il log del servizio Net Logon (a riguardo si veda la KB 109626 Enabling debug logging for the Net Logon service) e consultare poi il file %windir%\debug\netlogon.log ad esempio tramite i comandi (per accedere al file col servizio NetLogon attivo occorre prima farne una copia):

type netlogon.log |find /i “0xC000006A” >badpassword.txt
type netlogon.log |find /i “0xC0000234
>lockedout.txt

In Windows 8 e Windows Server 2012 nel file netlogon.log viene registrato anche l’ID del processo dell’applicazione che ha causato il lockout rendendo più semplice l’analisi.

Per ulteriori informazioni e suggerimenti su come eseguire il troubleshooting del lockup dgli account si veda anche il post Troubleshooting account lockout the PSS way.

Microsoft ha reso disponibili per Windows Server 2003 e Windows XP gli Account Lockout and Management Tools  e l’Account Lockout Status (LockoutStatus.exe) per semplificare il processo di troubleshotting.

Un altro tool interessante è il Netwrix Account Lockout Examiner che permette un’analisi granulare con una GUI semplice del blocco degli account, del tool esiste una versione freeware ed una versione a pagamento che permette l’implementazione di una struttura di helpdesk per supportare gli utenti in situazioni di lockout per la comparazione delle funzionalità si veda Netwrix Account Lockout Examiner – Freeware and Enterprise Editions.

Windows 7 e Connessione di rete assente all’avvio

$
0
0

Scenario: Un Notebook Fujitsu ESPRIMO Mobile V6555 con Windows 7 SP1 a 64 Bit membro di Active Directory e scheda di rete Ethernet NVIDIA nForce 10/100/1000 presenta la problematica che le Group Policy non vengono applicate all’avvio, nel registro eventi sono registrati diversi Errori e Warning riconducibili al fatto che che nella fase di startup la connessione di rete è attiva e che si presentavano problemi durante la sincronizzazione dell’ora.

Di seguito alcuni degli errori e warning registrati:

Nome registro: System
Origine:       Microsoft-Windows-GroupPolicy

ID evento:     1055
Categoria attività:Nessuna
Livello:       Errore

Descrizione:
Elaborazione dei Criteri di gruppo non riuscita. Impossibile risolvere il nome del computer. Il problema potrebbe essere dovuto a una o più delle cause seguenti:
a) Errore di risoluzione dei nomi nel controller di dominio corrente.
b) Latenza di replica di Active Directory (un account creato in un altro controller di dominio non è stato replicato nel controller di dominio corrente).

Nome registro: System
Origine:       Microsoft-Windows-GroupPolicy

ID evento:     1129
Categoria attività:Nessuna
Livello:       Errore

Descrizione:
Elaborazione dei Criteri di gruppo non riuscita a causa di problemi di connettività con un controller di dominio. Il problema potrebbe essere transitorio. Se il computer si connette al controller di dominio e i Criteri di gruppo vengono elaborati correttamente, verrà generato un messaggio di operazione riuscita. Se dopo alcune ore tale messaggio non viene visualizzato, contattare l’amministratore.

Nome registro: System
Origine:       NETLOGON
ID evento:     5719
Categoria attività:Nessuna
Livello:       Errore
Descrizione:
Impossibile stabilire una sessione sicura con un controller di dominio nel dominio ***** per la causa seguente:
Nessun server di accesso è attualmente disponibile per soddisfare la richiesta di accesso.
Ciò può provocare problemi di autenticazione. Verificare che il computer sia connesso alla rete. Se il problema persiste, rivolgersi all’amministratore del dominio.
INFORMAZIONI AGGIUNTIVE
Se il computer è un controller di dominio per il dominio specificato, stabilirà la sessione sicura con l’emulatore del controller di dominio primario nel dominio specificato. In caso contrario, il computer stabilisce la sessione sicura con un controller di dominio qualsiasi nel dominio specificato.

Nome registro: System
Origine:       Microsoft-Windows-Time-Service

ID evento:     129
Categoria attività:Nessuna
Livello:       Avviso

Descrizione:
NtpClient: impossibile impostare un peer di dominio da utilizzare come origine ora a causa di un errore di individuazione. Verrà eseguito un nuovo tentativo tra 3473457 minuti, quindi l’intervallo tra i nuovi tentativi verrà raddoppiato. Errore: Impossibile trovare la voce. (0x800706E1)

Nome registro: System
Origine:       Microsoft-Windows-Time-Service
ID evento:     131
Categoria attività:Nessuna
Livello:       Avviso
Descrizione:
NtpClient: impossibile impostare un peer di dominio da utilizzare come origine ora a causa di un errore di risoluzione DNS su ”. Verrà eseguito un nuovo tentativo tra 3473457 minuti, quindi l’intervallo tra i nuovi tentativi verrà raddoppiato. Errore: Il nome richiesto è valido, non sono stati trovati dati del tipo richiesto. (0x80072AFC).

Il problema del mancato aggiornamento delle group policy e della mancata esecuzione degli script di avvio computer evidenziati dagli errori Microsoft-Windows-GroupPolicy 1055, Microsoft-Windows-GroupPolicy 1129 e NETLOGON 5719 per sistemi con Windows 7 è molto discusso in Internet con varie possibili soluzioni a seconda della causa specifica.

Nel mio caso il problema è riconducibile al fatto che la connessione di rete risulta completamente operativa nel momento in cui il servizio che si occupa di aggiornare le group policy entra in funzione, in particolare pare non sia possibile eseguire risoluzioni DNS. Uno scenario molto simile a quello che ho analizzato era descritto in questa discussione sui forum di Intel 82657LM-3 – Windows 7 x64 NETLOGON, DNS, DFS Issues.

Per risolvere il problema ho utilizzato il workaround descritto nella KB2421599 Windows 7 Clients intermittently fail to apply group policy at startup che suggerisce di ritardare l’applicazione delle Group Policy.

Nel mio caso ho impostato la creato la chiave di registro

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon  di tipo DWORD impostandola a 120 (ovvero 2 minuti).

Volendo è anche possibile gestire questa impostazione tramite la group policy Computer Configuration > Policies > Admin Templates > System > Group Policy > Startup policy processing wait time

Per la scelta del valore da assegnare conviene procedere per tentativi aumentandolo di 30 secondi ogni volta e riavviando il sistema sino a che le GPO non vengono applicate e i messaggi di errore non vengono più registrati. Inoltre si tengano anche presente le note della KB2421599:

“The value specified should be sufficiently long enough to ensure that the connection is made. During the timeout period, Windows will check the connection status every two seconds and will continue with system startup as soon as the connection is confirmed. Therefore, erring on the high side is recommended. But be advised, if the system is legitimately disconnected (i.e., disconnected network cable, off-line server, etc), Windows will stall for the entire timeout period.”

“Since there is no time out period defined, the system now uses its own algorithm to calculate and arrive at an Average time out period and this value is stored in the above registry location. This could vary system to system and depends on various factors like previous login attempts.
(Note: The Group Policy description for “Startup Policy processing wait time” is not verbose and doesn’t cover all scenarios. Just because we don’t have the policy configured currently doesn’t mean that we are going to use a default time out value of 30 seconds.)”

Per quanto riguarda invece gli errori legati alla sincronizzazione temporale Microsoft-Windows-Time-Service 131 e Microsoft-Windows-Time-Service 129 ho risolto forzando una rediscover e una risincronizzazone con il seguente comando comando eseguito da un prompt dei comando amministrativo:

w32tm /resync /rediscover

Ho poi verificato che la sincronizzazione fosse andata a buon fine controllando che venissero registrati gli eventi Time-Service 37 e Time-Service 35 nel registro eventi di sistema ed eseguendo il comando:

w32tm /query /status

La causa di questi problemi è probabilmente un malfunzionamento del driver della scheda Ethernet nel contesto dell’infrastruttura di rete aziendale (switch e servizi di rete) che ha bloccato l’accesso alle risorse del dominio nella fase di avvio del sistema e , ma va detto che su oltre cento computer si è presentato solo su questo notebook probabilmente in seguito a malfunzionamenti del driver di rete verificatisi in seguito ad aggiornamenti di sistema.

Come ho scritto all’inizio del post per questo tipo di scenario vi sono varie possibilità per approcciare la soluzione, di seguito riporto i vari tentativi che ho eseguito e ce però non hanno risolto il problema del mio scenario, ma potrebbero essere risolutivi in altri scenari:

Per ulteriori approfondimenti si veda anche il post Netlogon 5719 and the Disappearing Domain [Controller]

Viewing all 299 articles
Browse latest View live