-
Divertentissimo post di Per Østergaard 
Una giornata vissuta al TechEd, descritta con pseudo-codice Powershell !
-
Ho riletto oggi il post di Giorgio Malusardi, relativo a come creare una nuova voce del boot menu di Windows Server 2008 con BCDEDIT, che disabiliti l'Hypervisor.
Dato che può tornare utile, mi sono scritto una script Powershell, così mi fa anche l'export dello store di Boot Configuration Data (BCD) prima di modificarlo (procedura che può comunque tornare utile come "Best Practice"), salvandolo come file ad esempio in C:\SERVER1-20080930.bcd
bcdedit.exe /export "$env:SystemDrive\$($env:computername)_$([datetime]::utcnow.ToString( 'yyyyMMdd')).bcd"
$res = bcdedit.exe /copy '{current}' /d 'Windows Server 2008 - NO Hypervisor'
$id = $res.Split('{}')[1]
bcdedit.exe /set "{$id}" hypervisorlaunchtype off
La script completa con un *minimo* di controllo d'errore è disponibile come Boot_No_Hyper-V.ps1
Claudio
-
Anche quest'anno si tiene a Milano la Microsoft SharePoint Conference, questa volta organizzata presso il Convention Center di Fiera Milano City e non presso Microsoft, come per le precedenti edizioni.
Pulsar IT sarà presente con due speaker, Alessandro Appiani ed il sottoscritto, in due differenti sessioni della nutrita agenda, preparata da Igor Macori e Paolo Pialorsi.
Ci vediamo in conferenza, se siete tra i fortunati che ce l'hanno fatta a iscriversi (ha fatto "sold-out") !
Claudio
-
Patch
Per produrre un ambiente stabile basato su Windows Server 2008 e Hyper-V, non bastano un buon hardware e le Best Practice ... ci vogliono anche delle hotfix 
Ecco un elenco delle fix che consiglio caldamente di applicare, per ottenere un ambiente Hyper-V solido ed efficace:
Hotfix di stabilità
ma se usate NLB in Windows Server 2008 (anche non con Hyper-V, quindi) probabilmente avrete bisogno di questa:
Poi veniamo alle fix specifiche, che estendono le funzionalità e la stabilità di alcuni componenti "chiave" di hyper-V e dell'offerta di virtualizzazione Microsoft:
Questa è la madre di tutte le fix per Hyper-V 
Troppo lunga da commentare, ma un must in ambienti di Failover Clustering di Hyper-V (uno dei fiori all'occhiello della Server Virtualization Microsoft, specie se ragionata in rapporto ai costi-benefici).
Che richiede implicitamente anche l'applicazione di http://support.microsoft.com/kb/950182/en-us/ per far digerire al kernel delle VM Guest Windows 2008 x86 i processori a 6-Core (in realtà se gli fate vedere un numero di processori "non potenza di 2")
Fix specifiche per System Center Virtual Machine Manager (SCVMM) e Hyper-V
Tools
Finalmente rilasciato il tool (free) per convertire macchine virtuali Virtual Server/VPC in Hyper-V.
Si tratta di "VMC to Hyper-V Import Tool" (VMC2HV) rilasciato da Matthijs ten Seldam, già autore del famoso VMRCplus, dopo un periodo di testing interno che durava da prima di Luglio.
In sostanza si tratta di un tool (sia x64 che x86) che legge il file .VMC, tipico di VS 2005 e VPC 2007, e lo "converte" in un file di configurazione XML per Hyper-V, preservando quindi le configurazioni della VM (RAM, file .VHD, ecc.). Ovviamente il processo si poteva già fare, manualmente, riutilizzando il file VHD ma la procedura era tediosa e a rischio di errori.
Chiaramente il tool non rimuove le VM Additions di VS/VPC e non installa gli Hyper-V Guest Components (gli ex-Integration Services ... che nome del cavolo !) di Hyper-V, operazione da fare poi manualmente dopo aver fatto partire la VM in Hyper-V e che richiederà qualche reboot per essere completo; ma si tratta sempre di un bell'aiuto.
Segnalo anche la nuova versione di PowerShell Management Library for Hyper-V, rivista e migliorata.
Tips & tuning
La prima area di miglioramento di prestazioni (a costo ZERO) che vale la pena di indagare, è quella del cambio di formato dei VHD (passando da dynamic a static), che oltre ad essere un requisito per ottenere supporto su alcuni workload virtualizzati, migliora di parecchio le performance.
Alcune interessanti valutazioni le trovate qui, emblematico il caso dell'I/O a blocchi da 4KB:
http://blogs.technet.com/winserverperformance/archive/2008/09/19/hyper-v-and-vhd-performance-dynamic-vs-fixed.aspx
Claudio
-
Sul blog del Ask the Directory Services Team di Microsoft, trovate una bella serie di articoli su Kerberos.
La prima serie è fatta di 4 articoli molto approfonditi sul Troubleshooting:
Interessanti poi due altri articoli più introduttivi per la comprensione di Kerberos in quanto tale (terminologia, processi e tools) e del concetto di "Double Hop":
Di gran lunga il problema più frequente che riscontriamo presso le aziende, è l'errata configurazione dei SPN in Active Directory (associazione con il Security Principal sbagliato, SPN duplicati o del tutto mancanti), specie per ambienti SQL Server in Cluster e le web application (dove ci sia quindi di mezzo IIS e magari la constrained delegation).
-
Riprendo come al solito i post di Piergiorgio Malusardi, questa volta per segnalare il suo completo riassunto su Hyper-V che è Released To Web (RTW).
Con largo anticipo sulla data stimata di Agosto (e questa è già una novità
), Microsoft ha rilasciato la versione finale della sua piattaforma di Server Virtualization. Per ora il download è manuale, ma sarà disponibile su WU (e WSUS ?) l'8 di Luglio.
Devo dire che, seppure qualche caratteristica è mancante rispetto ad altre piattaforme ( ... di chi starò parlando ... mah ?!), la sua stabilità è davvero notevole e le prestazioni sono ottime; ma ciò che più attrae è la piattaforma di Management, che se da un lato è orientata alla famiglia System Center, dall'altro offre già di base un interfaccia di scripting (WMI based) micidiale.
Siamo in produzione sia internamente in Pulsar IT, che presso un cliente del "Upper Mid Market", dove abbiamo quasi completato un progetto di migrazione a Windows Server 2008 ed Exchange 2007, già da alcuni mesi (RC0) e non abbiamo avuto davvero alcun problema.
I ruoli virtualizzati vanno dai Domain Controller, DHCP+DNS+RADIUS, Exchange 2007 HT+CAS, WSUS, Web Server, ...
Stiamo anche ospitando da un paio di settimane sul ns. server Hyper-V anche il sito di Ugiss, lo User Group Italiano di SQL Server.
Certo non si tratta di aver virtualizzato TechNet e MSDN ma ... si fa quel che si può!
Aggiungo alcune altre risorse a quelle segnalate da Piergiorgio:
10 domande frequenti su Hyper-V
What to consider before you upgrade
PowerShell Management Library per Hyper-V
Le interviste con il Team di Hyper-V
-
Su CodePlex è disponibile un nuovo Provider per Powershell, scritto da Oisin Grehan (Microsoft MVP), già autore di PSEventing (PowerShell Eventing) e developer nel gruppo di PowerShell Community Extensions.
Si tratta del PowerShell Windows Mobile Provider, che consente di accedere sia in modo interattivo che programmatico a dispositivi Windows Mobile da PowerShell.
Molte le attività che si possono scriptare: dalla gestione del file system, alla conversione di file, l'esecuzione di processi, alla estrazione di informazioni sul dispositivo, ecc.
Si tratta ancora di una Beta, ma di certo un bel tool. Bravo Oisin !
Un altro interessante spunto ci viene da PowerShell Tunnel, disponibile sulla MSDN Code Gallery.
Applicazione decisamente interessante per accedere da una CLI PowerShell agli oggetti esposti in una applicazione .Net, hostata appostamente in un "runspace" di PowerShell e raggiunta tramite l'infrastruttura WCF.
Lo scopo ? Debugging, inspection ... ma anche esecuzione di metodi e modifica di proprietà ... tutto unito alla potenza di PowerShell. Una bella idea di Matthew Hobbs.
Vi segnalo anche un feed RSS, per essere sempre aggiornati sulla pubblicazione di nuovi contenuti (scripts) sul TechNet Script Center.
-
Finalmente Microsoft ha raggruppato in un unico portale, tutte le informazioni sulle tecnologie di Failover Clustering, il nuovo nome introdotto in Windows Server 2008 per MSCS o Server Clustering.
Un ottimo punto di partenza per accedere a informazioni di ogni genere e profondità, sulle tecnologie di server clustering di Windows Server 2008.
-
Una delle funzionalità più utili in ambienti "branch office", ovvero di deployment di servizi di Directory in filiale, è il Read Only Domain Controller, che definendo un DC a sola lettura, delegabile in amministrazione locale e solitamente privo delle password degli user account, aumenta la sicurezza di un ambiente AD.
In questo modo si beneficia del domain controller locale (vicino ai client/servizi), parzialmente delegato in amministrazione, ma senza sacrificare la sicurezza.
Microsoft ha rilasciato un nuovo compatibility pack per indirizzare una serie di scenari di scarsa compatibilità tra questo tipo di Domain Controller ed client/server downlevel.
Si applica a client Windows XP SP2 o SP3 e server Windows 2003 SP1 o SP2.
-
Data Protection Manager 2007 prevede un meccanismo di verifica dell'integrità di una Replica (un "backup" in vecchia terminologia) di un DataSource, chiamato Consistency Check.
In questo articolo del Core Team proprio sul CC di DPM 2007, trovate alcune informazioni più dettagliate.
Poichè sono alle prese con alcuni problemini, ero alla ricerca di procedure di automazione del CC ed ho trovato sul blog del Team di DPM questa script PowerShell per invocare un Consistency Check su un DataSource di DPM 2007.
La script, pur essendo utile, ha un difetto di design: esegue CC per NOME del DataSource all'interno di un Protection Group ... ma non gestisce il fatto che il NOME può essere duplicato all'interno di un PG (ES: salvate il disco "C:\" di più server nello stesso PG, il SystemState, ecc.).
Ho modificato la script per renderla un pò più tollerante e gestire questo caso (affatto infrequente), oltre ad averla un pò rivista. Appena ho un pò di tempo (bisogna anche fatturare
), ne scriverò una versione che accetti un DataSource *specifico* (Es: SystemState del SERVER01).
Ecco la script: DPM-ConsistencyCheck2.ps1
Ciao, Claudio
-
Anche quest'anno a Milano, ma questa volta presso Microsoft a San Felice, si terrà dal 27 al 29 di Maggio la conferenza tecnica di DevLeap, DevCon 2008.
Densissime le tre giornate, tutte incentrate su .NET 3.5, con particolare riguardo a LINQ, ma senza tralasciare il "vecchio" (si fa per dire), ovvero WCF/WPF/WF.
Non mancano sessioni più orientate alle soluzioni complessive (SharePoint, Asp.Net, ecc.) e qualche sessione più visionaria e architetturale (Web Futures, Parallel programming, ...).
E dal detto "Pochi ma buoni" ... 4 speaker ma di assoluta eccellenza, come sempre.
-
Tra i prodotti citati come compatibili con Windows Server 2008, nella apposita pagina sul sito Microsoft, già citata in un post precedente, c'è indicato come "Applications that are currently compatible", anche Data Protection Manager (DPM) 2007.
La situazione è purtroppo abbastanza diversa ...
- la porzione server del prodotto NON è installabile su Windows Server 2008, ma solo la parte client (Agent)
- dei server Windows Server 2008 NON è possibile gestire la parte SystemState (!)
- Non è supportato il backup delle Virtual Machines Hyper-V (e questo lo concediamo ... è in RC0 ;-)
Come compatibilità direi che non siamo proprio al top.
Il tutto dovrebbe essere correttamente gestito dal Service pack 1 per DPM 2007, previsto per fortuna abbastanza presto. Potrebbe anche comparire con un update a parte, se SP1 andasse per le lunghe.
Nel frattempo consiglio caldissimamente di installare questa hotfix per DPM 2007, che permette di sistemare non pochi problemi (a prescindere da Windows Server 2008), in special modo il punto 3 della KB.
Dopo l'applicazione bisogna purtroppo ridistribuire gli agent di DPM (sigh!).
Claudio
-
Craig Landis ha pubblicato un ottimo post sul Blog del team di Active Directory ("Ask the Directory Services Team"), su come abilitare (sia da CLI che da VBScript che da Powershell) il debug log per molti componenti AD-related.
L'articolo è ricchissimo di impostazioni e link ad articoli specifici. I componenti trattati vanno da Active Directory Federation Service (ADFS) a Winlogon, in rigoroso odine alfabetico.
Ottimo davvero: il "bigino" del debug logging 
Claudio
-
Da qualche giorno è disponibile la versione aggiornata di Microsoft Deployment Toolkit (MDT) 2008, oltre ad un aggiornamento per Business Desktop Deployment (BDD) 2007.
Trovate alcune informazioni aggiuntive sul Blog ufficiale del Team di MDT, assieme a qualche altro post interessante sul tema.
Questo rilascio segue di pochi giorni quello di Automated Installation Kit (AIK), che supporta ora sia Windows Vista SP1 che Windows Server 2008. (Oltre ai consueti Windows XP e WIndows Server 2003).
Ulteriori risorse sui temi del deployment sia per client che per i server, sono disponibili nella home page dei Solution Accelerators per il Deployment.
-
Lavorare con le enum in Powershell non è molto comodo, la sintassi è prolissa e ricordarsi i valori da associare non è così semplice (certo c'è sempre il sito MSDN ...).
Basandomi sul codice di questo articolo di $hay@Israel, ho creato questa variazione per estrarre le enum per SQL Server Server Management Objects (SMO), ... ma non solo.
Il codice in realtà permette potenzialmente di stampare tutte le enum presenti in un qualsiasi Assembly .Net, oppure solo una porzione di esse usando un parametro di filtro (Es: *Database*, ).
Partiamo dal primo spunto, preso quasi integralmente dal post di $hay@Israel:
function Get-EnumValues{
if ($args.Count -eq 0) {
write-warning "`nEnum parameter is empty. Nothing to Get"
} else {
[enum]::getvalues($args[0]) | select @{n='Name';e={$_}},@{n='Value';e={$_.value__}} | ft -auto
}
}
Possiamo usare questa funzione per estrarre tutti i valori da una specifica enum:
Get-EnumValues System.ConsoleColor
Get-EnumValues System.IO.FileAttributes
Get-EnumValues System.IO.FileAccess
Get-EnumValues System.IO.FileOptions
Ora scriviamo una funzione un pò più sofisticata, per estrarre tutte le enum da un Assembly, eventulamente passando un filtro e i classici $Verbose e $Confirm di Powershell (che andrebbero sembre gestici anche nelle proprie funzioni):
function Get-AllEnumValues (
[String] $Assmbl = $(throw 'Mandatory Assembly name parameter is missing'),
[String] $eFilter = '',
[switch] $Verbose = $False,
[switch] $Confirm = $True
) {
if ( $eFilter -ne '') {
$local:filter={$_.basetype.fullname -eq 'system.enum' -and $_.name -like $eFilter}
if ($Verbose) {
write-host "eFilter = $eFilter"
}
} else {
$local:filter={$_.basetype.fullname -eq 'system.enum'}
if ($Verbose) {
write-host "eFilter = ''"
}
}
if ($Verbose) {
write-host "Assembly = $Assmbl"
}
[System.Reflection.Assembly]::LoadWithPartialName($Assmbl).gettypes() | ? {& $Filter} | % {
write-host "`t--- [$_] ---"
Get-EnumValues $_
if ($Confirm) {
read-host " Press any key to continue"
}
}
}
Ora non ci resta che scrivere una funzione accessoria che usa la precedente, per estrarre le enum da specifici assembly che magari usiamo spesso:
function Get-SMOEnumValues (
[String] $eFilter = '',
[switch] $Verbose = $False,
[switch] $Confirm = $False
) {
Get-AllEnumValues 'Microsoft.SqlServer.SqlEnum' $eFilter -Confirm:$Confirm -Verbose:$Verbose
}
Ora possiamo scrivere ad esempio:
Get-SMOEnumValues # o Get-SMOEnumValues *
Get-SMOEnumValues Job*
Get-SMOEnumValues *Status
Ovviamente questo può essere esteso ad altri Assembly, a piacere:
function Get-SDEnumValues (
[String] $eFilter = '',
[switch] $Verbose = $False,
[switch] $Confirm = $False
) {
Get-AllEnumValues 'System.Data' $eFilter -Confirm:$Confirm -Verbose:$Verbose
}
Get-SDEnumValues *Command* -Confirm:$True -Verbose:$True
Il codice completo di esempio è disponibile qui.
Claudio