Le Chtonk de Blog

Aller au contenu | Aller au menu | Aller à la recherche

lundi, avril 2011

Erreur Fatale C0000034 à l'installation du Service Pack 1 de Windows 7

La solution est fournie par Microsoft : Your computer may freeze or restart to a black screen that has a "0xc0000034" error message after you install Windows 7 Service Pack 1

mardi, février 2011

Comment faire pour augmenter la taille limite de 18 gigaoctets des bases de données Exchange Server 2003 Service Pack 2

Parce que cela m'est arrivé souvent, voici un article Microsoft concernant l'augmentation de la taille limite d'une base Exchange 2003 Standard SP2.

A noter que pour un Exchange 2003 Enterprise, il n'y a pas de taille limite

Page blanche sur OWA d'un Exchange 2007 ou 2010

Parce que j'ai été confronté à ce problème et que j'ai une solution, je me permets ce petit message ici.

Le symptôme : OWA ne s'affiche plus sur IE mais une page sans mise en page apparaît bien sur Firefox ou Chrome. IE affiche un message d'erreur javascript en bas à gauche portant sur flogon.js en ligne 6.

Diagnostic : lors de l'application de roll-up pour Exhcange 2007 (presque quelque soit le roll-up), il y a un bigntz lors de la mise à jour de OWA.

Solution : très simple :

ouvrez la console Powershell exchange et tapez la commande suivante :

 [powershell]

Get-OwaVirtualDirectory | where-object {$_.owaversion -eq "Exchange2007"} | ForEach-Object {remove-owavirtualdirectory $_.name;new-owavirtualdirectory -name $_.name -websitename $_.website}

Ca retrouve le OWA de base de votre SBS, le supprime (il faut rester devant pour confirmer la suppression) puis le recrée, à l'identique.

vous pouvez même en créer d'autres, si vous le souhaitez, au format Exchange2007 ou Exchange2000Or2003.

Voilà. Pas besoin de se lancer dan sune galère de désinstallation de roll-up, redémarrages et/ou résinstallation de roll-up.

jeudi, février 2010

Importer des rendez vous dans Outlook 2007

Lors de l'installation d'un serveur Exchange 2007 chez un client, ce dernier m'a demandé de reprendre dans les calendriers de chacun des utilisateurs tous les événements d'une application d'agenda au format web.
Cette application web s'appelle Ovidentia. C'est une application fonctionnant sous Apache/PHP/MySQL. Ma première idée était de trouver un moyen d'exporter ces événements au format csv (format universellement connu et facilement manipulable par la suite pour automatiser d'une manière ou d'une autre un import). Fonctionnant sous MySQL, je pouvais utiliser un connecteur ODBC pour faire une requête dans Excel pour générer ce csv.
Toutefois, cela ne réglait pas mon souci pour importer les événements dans Outlook, lié à l'Exchange. Surtout, étant donné que j'avais plus de 50 utilisateurs à traiter, comment l'automatiser, sachant que je devais récupérer tous les événements depuis début 2009...
Enfin, j'ai réussi à trouver le script qui allait bien, qui plus est en PowerShell ! En fait, je me suis basé sur ce script Create Calendar Appointments Automatically Based on Existing Calendar Appointments.

Puis, je l'ai modifié, pour intégrer la requête ODBC qui va bien et les traitements qui vont bien pour la création des événements.
Pour cet exemple, les prérequis sont :
- pilote ODBC MySQL
- Powershell 2.0

J'ai donc créé 3 fichiers pour me permettre tout ça :

requete.sql :

SELECT
		bab_users.id,
		bab_users.nickname,
		bab_users.email,
		bab_cal_events.id,
		bab_cal_events.title,
		bab_cal_events.description,
		bab_cal_events.location,
		bab_cal_events.start_date,
		bab_cal_events.end_date,
		bab_cal_events.bprivate
	FROM bab_users, bab_cal_events, bab_cal_events_owners, bab_calendar
	WHERE bab_calendar.owner=bab_users.id
	AND bab_cal_events_owners.id_cal = bab_calendar.id
	AND bab_cal_events.id = bab_cal_events_owners.id_event
	AND bab_cal_events.start_date >= '#startdate#'
	AND bab_users.nickname ='#username#'
	GROUP BY
		bab_users.id,
		bab_users.nickname,
		bab_users.email,
		bab_cal_events.id,
		bab_cal_events.title,
		bab_cal_events.description,
		bab_cal_events.location,
		bab_cal_events.start_date,
		bab_cal_events.end_date,
		bab_cal_events.bprivate
	ORDER BY bab_cal_events.start_date

agenda.ps1 (LE script d'importation) Il est important d'exécuter ce script sur le poste de l'utilisateur et connecté avec sa session :

param($username, $action="synchro", $reel=$false)
 
function HelpCommand($value) {
$howto = @"
agenda.ps1 username action [reel ($false|$true)]
	"username" : le nom de l'utilisateur dans Ovidentia
 
	"action" : quelle action doit-on effectuer :
		import : il s'agit d'une première synchronisation, complète, depuis le 01/01/2009
		synchro (par défaut) : il s'agit d'une synchronisation Ovidentia->Outlook pour tous les nouveaux événements 
							   (ou événements modifiés) de la date du jour jusqu'à ....
 
	"reel" : doit-on réellement mettre à jour ou non (presque équivalent à -Whatif)
		$false (par défaut) : juste pour tester
		$true  : mettre réellement à jour
 
Exemple 1 :
agenda.ps1 gmaison import $false
	Cet exemple permet de simuler l'import de l'agenda de gmaison depuis le 01/01/2009
 
Exemple 2 :
agenda.ps1 gmaison synchro $true
	Cet exemple permet de synchroniser l'agenda de gmaison pour tous les événements à venir depuis la date d'exécution du script
 
"@
$howto
}
trap [Exception] {
	Write-error "Une erreur est arrivée. Veuillez vérifier vos paramètres"
	HelpCommand
	break;
}
 
if ($username.tolower() -eq "-help") {
   HelpCommand
   break
}
 
#si on a oublié de préciser le username
if ($username -eq $null) {
	[string]$username = read-host -prompt "veuillez saisir le nom réseau de l'utilisateur "
}
 
#ici, on récupère la requête pour l'utilisateur
$filepath = "requete.sql"
# ou bien si les noms utilisateurs sont identiques au login réseau
#[string]$nomutilisateur = [environment]::username
 
[string]$requete = get-content $filepath
 
$requete = $requete.replace("#username#",$username).tolower()
if ($action -eq "import") {
	$startdate = "2009-01-01"
} else {
	$startdate = (Get-Date -Format "yyyy-MM-dd").toString()
}
$requete = $requete.replace("#startdate#",$startdate).tolower()
 
#ici, on crée la connexion pour pouvoir récupérer tous ses rendez vous
$commande = $null
$connexion = $null
 
$commande = new-object system.data.odbc.odbccommand
$connexion = new-object system.data.odbc.odbcconnection
$commande.connection = $connexion
 
# attention : il faut créer l'entrée odbc pour ovidentia
$dsn = "driver=mysql odbc 5.1 driver;uid=exchange;pwd=exchange;port=3306;database=ovidentia;server=serveur"
$connexion.connectionstring = $dsn
 
$connexion.open()
 
#ici, on exécute la requête et on récupère les données
$commande.commandtext = $requete
$dataadapter = new-object system.data.odbc.odbcdataadapter($commande)
$dataset = new-object system.data.dataset
$nombre= $dataadapter.fill($dataset)
 
# on démarre outlook
if ($reel) {
	$outlookapp = new-object -comobject outlook.application
	$allcalitems = $outlookapp.getnamespace("MAPI").getdefaultfolder(9).items
}
 
#puis on insère les données dans le calendrier
foreach ($table in $dataset.tables)
{
	$max_lignes = $table.rows.count
	$i=0
 
	foreach ($row in $table.rows)
    {
 
		$iduser = $row.id
		$nickname = $row.nickname
		$email = $row.email
		$eveid = $row.id1
		$titre = $row.title
		$desc = $row.description
		$lieu = $row.location
		$datedeb = $row.start_date
		$datefin = $row.end_date
		$prive = $row.bprivate
 
		#write-host $nickname" - "$eveid" -> "$datedeb
 
		# on a récupéré toutes les données liées à l'événement
		# maintenant, on crée l'événement
 
		if ($reel) {
 
			if ($action -eq "synchro") {
 
				# ici, on va rechercher si l'événement utilisateur existe
				$event = $allcalitems | where-object{$_.userproperties.find("OvidentiaID", $true).value -eq $eveid -and $_.start -ge [datetime]$startdate}
			} else {
				$event = $null
			}
 
			# s'il n'existe pas, on le crée
			if ($event -eq $null) {
				$event = $outlookapp.createitem(1)
				$prop = $event.userproperties.add("OvidentiaID", 20)
 
			}else{
				$prop = $event.userproperties.find("OvidentiaID", $true)
			}
 
			# quoiqu'il arrive, on le met à jour
			$event.subject = "$titre"
			$event.location = $lieu
			$event.body = $desc
			$event.start = [datetime]$datedeb
			$event.end = [datetime]$datefin
			if ($prive -eq "y") {
				$event.sensitivity = 2
			} else {
				$event.sensitivity = 0
			}
			$maintenant = get-date
			if ($datedeb -ge $maintenant) {
				$event.reminderset = $true
			} else {
				$event.reminderset = $false
			}
 
			$prop.Value = $eveid;
 
			$event.close(0)
		} else {
			write-host @"
$iduser 
$nickname 
$email 
$eveid 
$titre 
$desc 
$lieu 
$datedeb 
$datefin 
$prive 
"@
			$todisplay
		}
 
 
		[int]$pourcent = $i++ / $max_lignes *100
		write-progress "importation des événements du calendrier" "en cours" -percentcomplete $pourcent -id 1
    }
}

J'ai également créé un script qui me permet, sur un poste d'un utilisateur, d'automatiser l'exécution du script ci-dessus par l'intermédiaire du planificateur de tâche. exec_task.ps1 la tâche doit être configurée pour être exécutée avec le compte de l'utilisateur :

param($username, $action, $reel)
#Récupération de la date du jour
$dt = Get-Date -format "yyyyMMdd_hhmm"
 
# construction du chemin où se trouve ce script et celui d'import de l'agenda
# mais également le chemin du fichier de log
$MyPath = (split-path $myinvocation.Mycommand.Definition)
$file = $MyPath +"\"+[Environment]::UserName+"_"+$dt + ".log"
 
#Démarrage de la récupération de la console (pour le log)
start-transcript $file
#en cas d'erreur on arrête la récupération du log
trap { stop-transcript; break}
 
Set-Location $MyPath
.\agenda.ps1 $username $action $reel
 
stop-transcript

samedi, janvier 2010

Déplacer la base de données des fichiers cache sous Windows Vista

Bonjour,

En ce qui concerne le déplacement de la base de données de cache des fichiers hors connexion, voici une petite procédure que j'ai réussi à mettre en place :

La procédure idéale étant :
1. Purger la base des fichiers hors connexion Pour XP et Pour Vista
2. Redémarrer l'ordinateur en ayant pris soin de débrancher le câble réseau ou désactivé le Wifi (bref désactivation du réseau)
3. Se reconnecter sur le PC, modifier la base de registre selon la section bModifier les paramètres du Registre/b de l'article Comment déplacer le dossier côté client de mise en cache (CSC) vers un nouvel emplacement dans Windows Vista.
4. Redémarrer le PC et resélectionner les dossiers que l'on désire disponibles hors connexion.

A noter que l'intégralité de la méthode décrite ici : Comment déplacer le dossier côté client de mise en cache (CSC) vers un nouvel emplacement dans Windows Vista n'a pas fonctionné. L'assistant de migration ne m'a jamais trouvé les Go à transférer...

color=#FF0000biATTENTION : il y a des modifications de base de registre. Faites bien une sauvegarde de votre PC ou de votre base de registre avant./i/b/color

PS : dans l'article ci-dessus, il est fait mention d'une notation Windows NT... Il s'agit bien de mettre ??\...... les points d'interrogation ne sont pas des éléments à remplacer par quoi que ce soit ! ils sont à écrire textuellement.

mercredi, mai 2008

VBScript: Créer une signature personnalisée par utilisateur sous Outlook 2003/2007 sur SBS

Souvent, chaque utilisateur veut voir, dans sa signature, son nom, sa ligne directe, le nom de son poste, ... Pour autant, il existe une charte graphique d'entreprise qui doit être commune à l'ensemble de ces signatures. Si chaque utilisateur crée sa propre signature, il faut alors qu'une personne vérifie chacune des signatures et la mette correctement en forme sur l'ensemble des postes. Cela peut devenir fastidieux, notamment si l'entreprise doit changer de signature en fonction d'événéments la concernant (présence sur un salon, présence de publicités pour de nouveaux produits, etc...).

Voici donc un petit script, qui fonctionne avec Outlook 2003 et Outlook 2007, en environnement Active Directory (donc également sur SBS), qui permet de personnaliser la signature, par utilisateur, tout en gardant la cohérence de la charte graphique d'entreprise.

Lire la suite...

jeudi, avril 2008

Comment gérer une messagerie avec des e-mails internes et externes

Imaginez que vous ayez un domaine de messagerie (hébergé en extérieur par un prestataire du type OVH, 1AND1, ... ) dont une partie des utilisateurs est en local, Sur le réseau SBS, et une autre partie qui se trouve toujours en déplacement ou du moins pas dans les locaux du réseau. SBS sait gérer ce cas de figure, avec OWA (Outlook Web Access), RPC Over HTTP, des connexions VPN à distance, etc... Mais, imaginons maintenant que vous ayez un écueil technique que vous ne pouvez contourner (sauf à mettre trop de sous) : impossible d'accéder de l'internet à votre SBS... Là, les choses se compliquent... enfin, presque...

Lire la suite...

mercredi, octobre 2007

Envoi massif de mails non voulus avec Exchange

Si après avoir envoyé un mail avec votre Outlook vous vous apercevez que votre mail est dupliqué et envoyé en masse, sans que vous n'ayez rien fait, intéressez vous à la solution ci-dessous.

Lire la suite...

jeudi, juin 2007

WebCast PowerShell

Il s'agit du WebCast du séminaire PowerShell qui a eu lieu le 14 mai 2007. Très intéressant si vous voulez vous lancer dans de l'administration système et réseau "à la mode unix" et a priori en encore plus puissant !

Lire la suite...

mercredi, juin 2007

Installation de SharePoint Services 3.0

attention, après plusieurs lectures et avis, il semble préférable de faire une installation de WSS 3.0 en parallèle de la v2...

Lire la suite...

lundi, juin 2007

PowerShell : Mapper des lecteurs réseau en fonction des groupes d'un utilisateur

Idem que celui en VBScript mais en PowerShell. Attention, cela nécessite toutefois d'avoir déployé le PowerShell sur l'ensemble des postes de travail (PowerShell mais bien sûr avant .Net).

Lire la suite...

VBScript : Mapper des lecteurs réseau en fonction des groupes d'un utilisateur

Il s'agit contourner les GPO - enfin une tellement infime partie que c'est même pas un contournement mais une autre manière de voir dira-t-on - d'un serveur Windows 2003 par l'intermédiaire d'un script. Celui-ci, sous réserve de modifications, peut être exécuté à l'ouverture d'une session

Lire la suite...

[METHODE] Installation de Microsoft CRM 3.0 sur un SBS 2003 R2 Premium

Procédure Pas-à-pas pour installer un Microsoft CRM 3.0 sur un Microsoft Small Business Serveur 2003 R2 Premium.

Lire la suite...

Bienvenue !

A la demande générale, voici mon blog.

Vous trouverez sur ce blog un petit peu toutes mes réflexions, mes découvertes, mes ping et mes pongs, mes trucs et astuces, mes questions, sur le coeur de mon métier : l'informatique.

Les commentaires sont les bienvenus :)

Cordialement,

Chtonk

PS : les infos sont données à titre indicatif. Les manipulations et scripts que vous trouverez sur ce site sont à utiliser sous votre seule responsabilité. Ils ont fonctionné dans mon environnement et devraient fonctionner sous la plupart des environnements. Mais si vous utilisez un script ou faites une manipulation décrite ici et que ça ne marche pas, voire plante votre système, c'est à vous et à vous seul que vous devrez vous en prendre. En aucun cas il ne faudra porter réclamations auprès de moi.