serveur
Internet Information Services (IIS) Manager. Bad Data. (Exception from HRESULT: 0×80090005)
0Problem:
When you try to use the IIS console, you get the following error:
Bad Data. (Exception from HRESULT: 0x80090005)
Why:
You have copied the configuration file of IIS from one computer to the other (C:\Windows\System32\inetsrv\config\applicationHost.config)
This file contains Windows account for the applications pools. The password is encrypted using a local key on the computer so the other server can’t decrypt the password.
Modifying the applications pools password doesn’t fix the issue.
Workaround:
2 ways:
- Rollback the configuration on the destination computer. By default, IIS keep the last 10 configurations (C:\inetpub\history)
- Use the supported way to copy the configuration.
Export configuration:
aspnet_regiis -px "iisConfigurationKey" "C:\iisConfigurationKey.xml" -pri aspnet_regiis -px "iisWasKey" "c:\iisWasKey.xml" –pri
Import on target:
aspnet_regiis -pi "iisConfigurationKey" "C:\iisConfigurationKey.xml" aspnet_regiis -pi "iisWasKey" "C:\iisWasKey.xml"
TechEd 2012 Europe: best session
0TechED are now over… Here is my prefered session:Windows Azure Internals
Mark Russinovich (sure you know about him) shows up the Azure backstage.
Facts highlights:
- ~10 people to admin around 100 000 servers!
- Demo of one of the Azure admin interface,
- Graphical view of racks with VM,
- Demo on platform self healing,
- Explain on leap day bug (29th of february), with even source code line that broke everything
You are warned, heavy stuff
Video and slides available here: http://channel9.msdn.com/events/TechEd/Europe/2012/AZR302
Restore SQL database through PowerShell
0clear #--------------------------------------------------- $server="mysqlserver" $endpoint_port="5022" $instance="myNamedSQLinstance" $emailFrom = "provisioning@mydomain.com" $emailTo = "mathieu.chateau@lotp.fr" $smtpServer = "mysmtpserver" $sendmail=$true $foldersource='\\myfileserver\backupFromDev$' $folderarchived='\\myfileserver\backupFromDev$\done' $excludeList=@() $excludeList+='master' $excludeList+='tempdb' $excludeList+='model' #--------------------------------------------------- $foldersource="c:\" $folderarchived="F:\" $majorError=$true $global:log=@() try { [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | out-null [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoExtended") | Out-Null [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") | Out-Null [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoEnum") $source = new-object ('Microsoft.SqlServer.Management.Smo.Server') "$server\$instance" $majorError=$false } catch { AddLog "major error, one side not reachable $_" "major error, one side not reachable $_" $majorError=$true } function AddLog($text) { $global:log+=$text Write-Host $text } if ($majorError -eq $false) { $databases = $source.Databases foreach ($file in (Get-childitem $foldersource -Filter "*.bak")) { $dbname=$file.Name -replace (".bak","") if ($excludeList -notcontains $dbname) { #not on the blacklist if (($databases | ?{$_.Name -ieq $dbname}) -eq $null) { #database does not exist try { #Restore $targetDBFilePath = $source.MasterDBPath + "\" + $dbName + ".mdf" $targetLogFilePath = $source.MasterDBLogPath + "\" + $dbName + ".ldf" AddLog " going to restore $dbname to:" AddLog " $targetDBFilePath and $targetLogFilePath" $restore = new-object ('Microsoft.SqlServer.Management.Smo.Restore') $restore.Action = 'Database' $restore.Database = $dbname ##$backupDataFile=$dbbk.Devices[0].Name #$restore.Devices.AddDevice($backupDataFile, [Microsoft.SqlServer.Management.Smo.DeviceType]::File) $backupfile=New-Object ("Microsoft.SqlServer.Management.Smo.BackupDeviceItem")($file.FullName, "File") $restore.Devices.Add($backupfile) #$restoredetails=$restore.ReadBackupHeader($source) $relocateDataFile = new-object ('Microsoft.SqlServer.Management.Smo.RelocateFile') $relocateLogFile = new-object ('Microsoft.SqlServer.Management.Smo.RelocateFile') $dbFileList = $restore.ReadFileList($source) $relocateDataFile.LogicalFileName = $dbFileList.Select("Type = 'D'")[0].LogicalName $relocateDataFile.PhysicalFileName = $targetDBFilePath $relocateLogFile.LogicalFileName = $dbFileList.Select("Type = 'L'")[0].LogicalName $relocateLogFile.PhysicalFileName = $targetLogFilePath $restore.RelocateFiles.Add($relocateDataFile) $restore.RelocateFiles.Add($relocateLogFile) $restore.ReplaceDatabase = $False $restore.NoRecovery = $False $restore.SqlRestore($source) AddLog " Restore done" Move-Item $file.FullName $folderarchived } catch { AddLog " error during restore: $_" $majorError=$true break } } else { #blacklisted name AddLog "database $dbname / $($files.Names) already exist" } } else { AddLog "Forbidden databasename: $dbname" } } } if($sendmail) { $temp="" foreach ($line in $log) { $temp+=$line+"`r`n" } $smtp = new-object Net.Mail.SmtpClient($smtpServer) $smtp.Send($emailFrom, $emailTo,"SQL mirror automator",$temp) } $log
RDP farm with broker: how to reach a specific server ?
0Hypothesis
- You have setup an RDP farm with let’s say 2 RPD Servers,
- You have the Broker working, so people get redirected to their current opened session (affinity),
- You restricted to one session per user.
Problem
When you try to reach a specific RDP (to do admin staff or help a user logged on it), you get rejected:
The connection cannot be completed because the remote computer that was reached is not the one you specified. This could be caused by an outdated entry in the DNS cache. Try using the IP address of the computer instead of the name.
Even trying by IP as suggested is not working:
The remote computer hat you are trying to connect is redirecting you to the remote computer. Remote Desktop Connection cannot verify that the two remote computers belong to the same farm. This can occur if there is another computer on your network with the same name as the computer your are trying to connect to.
Solution
You just have to the famous /admin option of mstsc to bypass farm/broker rules !
SharePoint 2010 PowerShell : renommer une Application Web
0Une recherche google semble indiquer que renommer une application Web SharePoint est compliqué et passe par un backup/suppression/création/Restore.
Etant de nature un peu…Opiniatre ? j’y suis allé “au flanc” en PowerShell…Et ca marche
$a=Get-SPWebApplication | where {$_.Name -match "Demo"} #on vérifie que l'on a bien que l'application à modifier $a #On change le nom $a.Name="[Demo] demo blah blah" #On pousse la modification $a.Update() #on vérifie que le nom a bien changé Get-SPWebApplication | where {$_.Name -match "Demo"}
Windows 2008 failover cluster: Failed to prepare storage for testing on node <> status 87
0En voulant monter un failover cluster Windows Server 2008 R2:
Pour corriger le problème, il faut assigner temporairement une lettre de lecteur à la partition bitlocker (FAT32 / 2Go) (créée automatiquement par Windows):
et voilà
TMG 2010: joindre une array: no such interface supported…
0En voulant joindre un TMG 2010 à un autre pour former un array (une ferme quoi), j’ai obtenu le message d’erreur suivant très explicite:
Cela était dû au fait que l’autre noeud avait le Service pack 1 de TMG 2010, et pas celui ci…En essayant la jonction dans l’autre sens, le message d’erreur met au moins un peu sur les rails avec un problème de version du fichier de configuration.
Dedibox: port cisco down & idrac: la double peine
2Faisant face à quelques difficultés avec Dedibox, je souhaitais partager avec vous mon analyse.
La nouvelle offre Dedibox s’appuie sur des serveurs Dell, et propose un accès à l’idrac de votre serveur. Cela permet de faire l’installation de l’OS soit même (par exemple Windows en montant l’iso à travers l’idrac).
Dell propose 2 méthodes pour connecter l’idrac:
- Dédié: l’accès se fait à travers un port Ethernet.
- Partagé: l’accès se fait à travers les cartes réseaux normales du serveur.
C’est cette deuxième solution que Dedibox a retenue. Elle leur permet évidemment une grosse économie:
- de câblage réseau (surtout vu la quantité de serveurs),
- De ports sur les commutateurs (1 par machine).
Cela ne me pose pas de problème au demeurant, mais cela se complique avec leur politique de gestion du réseau et de sa sécurité. La couleur est annoncée tout de suite: en cas de problème détecté, le switch coupe le port réseau associé. Il faut alors ouvrir un ticket pour être débloqué.
Impact: quand le port est coupé par le switch, on perd également l’accès à l’idrac. D’où la double peine: le serveur n’est plus joignable, et on ne peut même pas réparer via l’idrac.
La connexio à l’idrac se passe en plusieurs phases:
- Connexion à la console de gestion Dedibox
- Accès au menu idrac
- Génération d’une URL d’accès (idrac.online.net qui fait office de reverse proxy) contenant un token d’accès unique
- Depuis l’interface idrac de Dell, accès à la console virtuelle (uniquement via Java, activeX est désactivé)
- Téléchargement d’un Java Webstart (fichier jnlp)
- Lancement de l’applet Java
Sécuriser son Windows dans le cloud (Dedibox/Amazon…)
0Suite à mon retour vers Dedibox, et le fait que j’y installe du Windows, je me suis demandé ce que je pouvais faire pour la sécuriser.
Voici les pistes envisagées:
- Pas de port TCP accessible directement. Passer donc par exemple avec LogMeIn, au moins pendant la configuration. L’accès idrac n’est pas assez fluide et simple d’accès.
- Renommer le compte Administrateur via GPedit
- Interdire l’affichage du dernier compte authentifié via GPedit.
- Ajouter un disclaimer, toujours via GPedit. Cela n’arrêtera pas un pirate motivé, mais peu suffire à bloquer certains logiciels de brute force RDP.
- Autoriser RDP mais:
- Sur un port TCP non standard. Procédure Microsoft : http://support.microsoft.com/kb/306759/en-us/
- Utiliser le firewall Windows pour autoriser l’accès uniquement depuis certaines IP fixes. Pour y accéder depuis ailleurs, d’abord se connecter en LogMeIn pour modifier la règle firewall.
- Autoriser uniquement les clients permettant une authentification réseau.
- Scanner régulièrement les adresses IP depuis l’extérieur avec nmap pour vérifier ce qui est visible.
- Appliquer les mises à jour Windows dès leur sortie.
Dedibox: Nat de VM Hyper-V
4Suite au retour sur Dedibox, j’ai décidé d’utiliser Hyper-V plutôt que VMware pour la virtualisation. Les adresses IP publiques sont facturées chez Online.net, et d’autre part je ne veux pas que certaines VM soient exposées sur Intrenet (DC, Exchange…).
Par défaut, Hyper-V ne permet pas de faire du Nat, et donc cacher tout se beau monde tout en leur donnant accès à Internet.
Voici les grandes étapes:
- Installer le rôle Network Policy and Access Services
- Créer un réseau interne dans Hyper-V
- Assigner une adresse IP fixe (ex 192.168.1.1) sur la carte réseau du réseau ainsi crée (carte virtuelle Hyper-V)
- Configurer Routing and Remote Access pour faire du NAT
- Configurer les VM afin d’utiliser le réseau virtuel Hyper-V et de passer en DHCP ou IP fixe suivant vos souhaits.
Ajouter le rôle
Configurer le NAT












