SharePoint – event 8311 – SSL policy errors have been encountered. Error code 0x2

 

 

 

 

SharePoint n’est pas avare en message, et ils ont presque toujours une origine, reste à trouver laquelle…

Cette fois, le message suivant est apparu sur la ferme 2010 et 2013:
sharepoint event 8311

Ce qui donne:

Log Name: Application
Source: Microsoft-SharePoint Products-SharePoint Foundation
Event ID: 8311
Task Category: Topology
Level: Error
Description:
An operation failed because the following certificate has validation errors:nnSubject Name: CN=Server.mydomain.netnIssuer Name: CN=my-CA, DC=mydomain, DC=net

Errors:nn SSL policy errors have been encountered. Error code '0x2'..

 

Cause

Un certificat a été assigné dans IIS pour le site SharePoint Web Services (binding SSL port 32844).

 

Résolution

Le problème ne vient pas de la confiance du certificat, mais du subject name. Il s’avère que le serveur est enregistré avec le nom court dans la ferme, et que le certificat contient le FQDN.

2 solutions:

  • Générer un autre certificat avec un subject name qui correspond au serveur,
  • Renommer le serveur dans la ferme SharePoint.

C’est cette deuxième option qui a été renommé, à faire en PowerShell.

Lister les serveurs avec leur nom inscrit dans la ferme:

get-spserver

Renommer un serveur (à lancer localement sur le serveur):

Rename-SPServer -Identity MyServer -Name MyServer.MyDomain.net

Faire un iisreset ensuite, et patienter 10mn que la topology se mette à jour 🙂

 

Nagios: Superviser les certificats dans Windows

L’objectif de ce plugin pour Nagios est de superviser l’état des certificats, et leur date d’expiration en particulier (oui, je ne fais pas que du SCOM malgré un ouvrage ENI dessus!)

J’utilise l’agent nsclient++ sur les serveurs afin de pouvoir exécuter des scripts PowerShell entre autre. On a donc:

Nagios => check_nrpe => script powershell => retour nagios

Cela fonctionne également sur les serveurs Core.

Windows contient des certificats déjà expiré depuis longtemps. Le script contient une blacklist afin de les ignorer.

Configuration testée

Linux:

  • Centos 6.4 x64
  • Nagios 3.4.4
  • check_nrpe 2.13
  • Centreon 2.4.2

Windows:

  • Windows Server 2003 / 2008 R2 / 2012
  • nsclient++ 0.4.1 x64 et x86
  • Serveurs Core et normaux

Arguments du script

  • checkMyStore (oui par défaut)
  • checkRootStore (oui par défaut)
  • checkCAStore (oui par défaut)
  • checkAuthRootStore (oui par défaut)
  • checkSharePointStore (oui par défaut)
  • expireInDays (60 jours par défaut)
  • maxWarn (avertissement si supérieur)
  • maxCrit (Critique si supérieur)

Pour chaque store, la réponse doit être un booléen ($true /$false ou 1/0)

expireInDays,maxWarn et maxCrit doivent être des entiers

Exemples d’utilisation

Exemple en exécution directe PowerShell:

PS C:Program FilesNSClient++scripts> . .lotp_check_certificates.ps1
CRITICAL: www.lotp.fr:2013/06/30
PS C:Program FilesNSClient++scripts>

Exécution NRPE:

[root~]# /usr/lib64/nagios/plugins/check_nrpe -H myserver -n -c check_certificate -a $true $true $true $true $true 60 0 0

CRITICAL: www.lotp.fr:2013/06/30

[root~]#

Installation:

Sur les Windows:

  • Activer l’exécution de scripts PowerShell non signés : Set-ExecutionPolicy RemoteSigned
  • copier le script dans C:Program FilesNSClient++scripts
  • Ajouter dans le fichier nsclient.ini:
    • [/settings/external scripts/wrapped scripts]
      check_certificate=lotp_check_certificate.ps1 $ARG1$ $ARG2$ $ARG3$ $ARG4$ $ARG5$ $ARG6$ $ARG7$ $ARG8$

Configuration:

Par exemple, sur Centreon, en ajoutant la commande:

$USER1$/check_nrpe -H $HOSTADDRESS$ -n -c check_certificate -a $ARG1$ $ARG2$ $ARG3$ $ARG4$ $ARG5$ $ARG6$ $ARG7$ $ARG8$

Téléchargement

(enlever le .txt à la fin)

lotp_check_certificates.ps1

Code source en direct si le téléchargement ne passe pas:

 

# ====================================================================
# Check certificates health state
# Author: Mathieu Chateau - LOTP
# mail: mathieu.chateau@lotp.fr
# version 0.1
# ====================================================================

#
# Require Set-ExecutionPolicy RemoteSigned.. or sign this script with your PKI 
#

# ============================================================
#
#  Do not change anything behind that line!
#
param 
(
	[bool]$checkMyStore=$true,
	[bool]$checkRootStore=$true,
	[bool]$checkCAStore=$true,
	[bool]$checkAuthRootStore=$true,
	[bool]$checkSharePointStore=$true,
	[int]$expireInDays=60,
	[int]$maxWarn = 1,
	[int]$maxError = 0

)

# blacklist all third party known expired certificates in root & co, on Windows Server 2003, 2008 & 2012
$blacklist=@(
"109F1CAED645BB78B3EA2B94C0697C740733031C",
"12519AE9CD777A560184F1FBD54215222E95E71F",
"127633A94F39CBF6EDF7C7BF64C4B535E9706E9A",
"18F7C1FCC3090203FD5BAA2F861A754976C8DD25",
"23EF3384E21F70F034C467D4CBA6EB61429F174E",
"245C97DF7514E7CF2DF8BE72AE957B9E04741E85",
"24A40A1F573643A67F0A4B0749F6A22BF28ABB6B",
"24BA6D6C8A5B5837A48DB5FAE919EA675C94D217",
"2B84BFBB34EE2EF949FE1CBE30AA026416EB2216",
"3A850044D8A195CD401A680C012CB0A3B5F8DC08",
"4463C531D7CCC1006794612BB656D3BF8257846F",
"47AFB915CDA26D82467B97FA42914468726138DD",
"4BA7B9DDD68788E12FF852E1A024204BF286A8F6",
"4D8547B7F864132A7F62D9B75B068521F10B68E3",
"4DF13947493CFF69CDE554881C5F114E97C3D03B",
"4EF2E6670AC9B5091FE06BE0E5483EAAD6BA32D9",
"4F65566336DB6598581D584A596C87934D5F2AB4",
"51C3247D60F356C7CA3BAF4C3F429DAC93EE7B74",
"53DECDF3BC1BDE7C9D1CEDAE718468CA20CC43E7",
"587B59FB52D8A683CBE1CA00E6393D7BB923BC92",
"5E997CA5945AAB75FFD14804A974BF2AE1DFE7E1",
"637162CC59A3A1E25956FA5FA8F60D2E1C52EAC6",
"6690C02B922CBD3FF0D0A5994DBD336592887E3F",
"67EB337B684CEB0EC2B0760AB488278CDD9597DD",
"687EC17E0602E3CD3F7DFBD7E28D57A0199A3F44",
"688B6EB807E8EDA5C7B17C4393D0795F0FAE155F",
"68ED18B309CD5291C0D3357C1D1141BF883866B1",
"720FC15DDC27D456D098FABF3CDD78D31EF5A8DA",
"7613BF0BA261006CAC3ED2DDBEF343425357F18B",
"7A74410FB0CD5C972A364B71BF031D88A6510E9E",
"7AC5FFF8DCBC5583176877073BF751735E9BD358",
"7B02312BACC59EC388FEAE12FD277F6A9FB4FAC1",
"7CA04FD8064C1CAA32A37AA94375038E8DF8DDC0",
"7D7F4414CCEF168ADF6BF40753B5BECD78375931",
"7F88CD7223F3C813818C994614A89C99FA3B5247",
"838E30F77FDD14AA385ED145009C0E2236494FAA",
"8977E8569D2A633AF01D0394851681CE122683A6",
"8B24CD8D8B58C6DA72ACE097C7B1E3CEA4DC3DC6",
"9078C5A28F9A4325C2A7C73813CDFE13C20F934E",
"90DEDE9E4C4E9F6FD88617579DD391BC65A68964",
"96974CD6B663A7184526B1D648AD815CF51E801A",
"9845A431D51959CAF225322B4A4FE9F223CE6D15",
"9BACF3B664EAC5A17BED08437C72E4ACDA12F7E7",
"9FC796E8F8524F863AE1496D381242105F1B78F5",
"A1505D9843C826DD67ED4EA5209804BDBB0DF502",
"A399F76F0CBF4C9DA55E4AC24E8960984B2905B6",
"A3E31E20B2E46A328520472D0CDE9523E7260C6D",
"A5EC73D48C34FCBEF1005AEB85843524BBFAB727",
"B19DD096DCD4E3E0FD676885505A672C438D4E9C",
"B533345D06F64516403C00DA03187D3BFEF59156",
"B6AF5BE5F878A00114C3D7FEF8C775C34CCD17B6",
"B72FFF92D2CE43DE0A8D4C548C503726A81E2B93",
"CFDEFE102FDA05BBE4C78D2E4423589005B2571D",
"D29F6C98BEFC6D986521543EE8BE56CEBC288CF3",
"DBAC3C7AA4254DA1AA5CAAD68468CB88EEDDEEA8",
"E38A2B7663B86796436D8DF5898D9FAA6835B238",
"EC0C3716EA9EDFADD35DFBD55608E60A05D3CBF3",
"EF2DACCBEABB682D32CE4ABD6CB90025236C07BC",
"F5A874F3987EB0A9961A564B669A9050F770308A",
"F88015D3F98479E1DA553D24FD42BA3F43886AEF")

$output=""
$outputNames=""
$countMyStore=0
$countRootStore=0
$countCAStore=0
$countAuthRootStore=0
$countSharePointStore=0
$countTotal=0

$allCerts=Get-ChildItem -Path cert: -Recurse | ? {
($_.Notafter -lt (get-date).AddDays($expireInDays)) -and 
($_.PSPParentPath -notmatch "Disallowed") -and
($blacklist -notcontains $_.Thumbprint)} | select NotAfter,FriendlyName,PSParentPath

function outputCert ($temp)
{
	$outputTemp=""
	foreach ($t in $temp)
	{
		$outputTemp+=$t.FriendlyName+":"+(get-date -Date $t.NotAfter -format "yyyy/MM/dd")+" "
	}
	return $outputTemp
}
# check params if provided

if($checkMyStore)
{
	$temp=@($allCerts | ? {$_.PSParentPath -match "\My$"})
	$countMyStore=$temp.Count
	if($temp.Count -gt 0)
	{
		$outputNames+=outputCert $temp
	}
}
if($checkRootStore)
{
	$temp=@($allCerts | ? {$_.PSParentPath -match "\Root$"})
	$countRootStore=$temp.Count
	if($temp.Count -gt 0)
	{
		$outputNames+=outputCert $temp
	}
}
if($checkCAStore)
{
	$temp=@($allCerts | ? {$_.PSParentPath -match "\CA$"})
	$countCAStore=$temp.Count
	if($temp.Count -gt 0)
	{
		$outputNames+=outputCert $temp
	}
}
if($checkAuthRootStore)
{
	$temp=@($allCerts | ? {$_.PSParentPath -match "\AuthRoot$"})
	$countAuthRootStore=$temp.Count
	if($temp.Count -gt 0)
	{
		$outputNames+=outputCert $temp
	}
}
if($checkSharePointStore)
{
	$temp=@($allCerts | ? {$_.PSParentPath -match "\SharePoint$"})
	$countSharePointStore=$temp.Count
	if($temp.Count -gt 0)
	{
		$outputNames+=outputCert $temp
	}
}

foreach ($var in (Get-Variable -Name "count*Store"))
{
	$countTotal+=$($var).Value
}

if($countTotal -gt $maxError)
{
	$state="CRITICAL"
	$exitcode=2
}
elseif($countTotal -gt $maxWarn)
{
	$state="WARNING"
	$exitcode=1
}
else
{
	$state="OK"
	$exitcode=0
}
$output=$state+": "+$outputNames

Write-Host $output
exit $exitcode

Nagios: Superviser les comptes Active Directory

L’objectif de ce plugin pour Nagios est de superviser l’état des comptes AD (oui, je ne fais pas que du SCOM malgré un ouvrage ENI dessus!)

J’utilise l’agent nsclient++ sur les serveurs afin de pouvoir exécuter des scripts PowerShell entre autre. On a donc:

Nagios => check_nrpe => script powershell => retour nagios

Je m’appui sur le module PowerShell Standard ActiveDirectory. Cela fonctionne également sur les serveurs Core.

La supervision peut porter sur:

  • Account Disabled
  • Account Expired
  • Account Expiring
  • Account Inactive
  • Locked Out
  • Password Expired
  • Password Never Expires

La sortie fournie les données pour avoir un graphe (performance data)

Configuration testée

Linux:

  • Centos 6.4 x64
  • Nagios 3.4.4
  • check_nrpe 2.13
  • Centreon 2.4.2

Active Directory:

  • Windows Server 2008 R2 / Windows Server 2012
  • nsclient++ 0.4.1 x64
  • Serveurs Core et normaux

Arguments du script

  • action (LockedOut par défaut)
  • searchBase (tout le domaine par défaut)
  • seachScope (récursif par défaut)
  • maxWarn (avertissement si supérieur)
  • maxCrit (Critique si supérieur)

action peut être:
AccountDisabled,AccountExpired,AccountExpiring,AccountInactive,LockedOut,PasswordExpired,PasswordNeverExpires
LockedOut par défaut

searchBase peut être:
dc=mydomain,dc=com / ou=my users,dc=mydomain,dc=com
tout le domaine par défaut

seachScope peut être:
Base,OneLevel,Subtree
Subtree par défaut

maxWarn and maxCrit doivent être des entiers

Exemples d’utilisation

Exemple en exécution directe PowerShell:

PS C:Program FilesNSClient++scripts> . .lotp_check_ad_accounts.ps1 AccountInactive "dc=mydomain,dc=com" subtree 5 10
CRITICAL: 216 AccountInactive|216;5;10
PS C:Program FilesNSClient++scripts>

Exécution NRPE:

[root~]# /usr/lib64/nagios/plugins/check_nrpe -H prd-dom-dc01 -n -c check_ad_account -a AccountInactive "dc=pmside,dc=net" subtree 5 10

CRITICAL: 216 AccountInactive|'AccountInactive'=216;5;10

[root~]#

Installation:

Sur les DC:

  • Activer l’exécution de scripts PowerShell non signés : Set-ExecutionPolicy RemoteSigned
  • copier le script dans C:Program FilesNSClient++scripts
  • Ajouter dans le fichier nsclient.ini:
    • [/settings/external scripts/wrapped scripts]
      check_ad_account=lotp_check_ad_accounts.ps1 $ARG1$ $ARG2$ $ARG3$ $ARG4$ $ARG5$

Configuration:

Par exemple, sur Centreon, en ajoutant la commande:

$USER1$/check_nrpe -H $HOSTADDRESS$ -n -c check_ad_account -a $ARG1$ "$ARG2$" $ARG3$ $ARG4$ $ARG5$

Téléchargement

(enlever le .txt à la fin)

lotp_check_ad_accounts.ps1

Code source en direct si le téléchargement ne passe pas:

# ====================================================================
# Search in AD for lockedout account. To be used through NRPE / nsclient++
# Author: Mathieu Chateau - LOTP
# mail: mathieu.chateau@lotp.fr
# version 0.1
# ====================================================================#
# Require Set-ExecutionPolicy RemoteSigned.. or sign this script with your PKI 
#
# ============================================================
#
#  Do not change anything behind that line!
#
param 
(
    [string]$action="LockedOut",
    [string]$searchBase="",
    [string]$searchScope="Subtree",
    [int]$maxWarn=5,
    [int]$maxCrit=10
)

# check that powershell ActiveDirectory module is present

if(Get-Module-Name "ActiveDirectory" -ListAvailable)
{
    try
    {
        Import-Module-Name ActiveDirectory
    }
    catch
    {
        Write-Host "CRITICAL: Missing PowerShell ActiveDirectory module"
        exit 2
    }
}
else
{
    Write-Host "CRITICAL: Missing PowerShell ActiveDirectory module"
    exit 2
}

# check params if provided

if($action -notmatch "^(AccountDisabled|AccountExpired|AccountExpiring|AccountInactive|LockedOut|PasswordExpired|PasswordNeverExpires)$")
{
    Write-Hos t"CRITICAL: action parameter can only be AccountDisabled,AccountExpired,AccountExpiring,AccountInactive,LockedOut,PasswordExpired,PasswordNeverExpires. Provided $action"
    exit 2
}
if($searchScope -notmatch "^(Base|OneLevel|Subtree)$")
{
    Write-Host "CRITICAL: searchScope parameter can only be Base,OneLevel,Subtree. Provided $searchScope"
    exit 2
}
if(($searchBase -ne "") -and $searchBase -ne ((Get-ADDomain).DistinguishedName))
{
    $search=Get-ADObject -Filter 'ObjectClass -eq "OrganizationalUnit" -and DistinguishedName -eq $searchBase'

if ($search.Count -ne 1)
    {
        Write-Host"CRITICAL: SearchBase not found or duplicate. Provided $searchBase"
        exit 2
    }
}
else
{
    $searchBase=(Get-ADDomain).DistinguishedName
}

$command="Search-ADAccount -"+$action+" -SearchBase '"+$searchBase+"' -SearchScope "+$searchScope

$result=invoke-expression $command

if($result.Count -gt $maxCrit)
{
    $state="CRITICAL"
    $exitcode=2
}
elseif($result.Count -gt $maxWarn)
{
    $state="WARNING"
$exitcode=1
}
else
{
    $state="OK"
$exitcode=0
}

$output=$state+": "+$result.Count+""+$action+"|"+$action+"="+$result.Count+";"+$maxWarn+";"+$maxCrit

Write-Host $output
exit $exitcode

DSI++ : Mieux gérer l’existant ou acheter plus puissant ?

En informatique, comme pour beaucoup de choses, on finit par être à l’étroit dans l’existant. Peut-être un peu plus vite en informatique que dans les autres domaines. Se pose alors toujours le choix entre mieux gérer l’existant versus investir dans une nouvelle solution / faire une upgrade.

Mieux gérer l’existant

Ce choix est plus courageux que le deuxième, mais aussi plus risqué. Il revient à dire que pensez pouvoir faire mieux que ce qui a été fait depuis le début. Cela se caractérise en général par du temps à passer, avec un gain difficile à estimer à l’avance. Je pense qu’il faut l’essayer en premier car:

  • Il va potentiellement générer des économies, même s’il est insuffisant et qu’il faille quand même investir.
  • Il permettra de mieux comprendre le besoin en passant en revue les usages, et donc de justifier l’investissement éventuel.
  • Il montre qu’on ne se contente pas « d’investir ».

Le principal est de se fixer un objectif en termes de délai et de charge pour produire un résultat. Il ne devrait cependant jamais dépasser un certains % que coûterait la deuxième solution.

La demande en ressource informatique croit inexorablement dans les entreprises. Les projets les plus stratégiques font normalement l’objet d’un « capacity planning » permettant de s’assurer que la solution tiendra les fameux 3 ou 4 ans de son amortissement. Il y a cependant quelques parents pauvres qui bénéficient rarement de ce traitement:

  • Le stockage de fichiers bureautiques,
  • Le stockage des mails,
  • La consommation réseau (inter sites, et Internet).ramer-desert

Crédit

Demander le ménage dans les fichiers bureautiques revient à ramer dans le désert. Tout le monde estime avoir mieux à faire, mais personne n’a envie de payer le prix que cela coûte (stockage central €MC / N€tApp, sauvegarde…). Face à l’hémorragie, des solutions soit disant « miracle » ont vu le jour (archivage 3 tiers, déduplication, SharePoint…). Ce dernier permet l’indexation, ce qui est presque le pire. Où comment s’y retrouver dans un capharnaüm sans ranger sa chambre. Non seulement les utilisateurs ne veulent plus supprimer les vieux fichiers, mais ils ne veulent plus classer non plus…

Heureusement, on peut transformer le virus en vaccin : chercher les mots salaires et primes. Résultats garantis!

Le réseau fait partie des investissements « lourds » qui fonctionnent par palier. Le stockage et la sauvegarde en font également partis. Des solutions existent depuis pas mal de temps, vu que c’était le premier point de contention dans les entreprises en général:

  • QOS : permet de gérer l’intérieur du tuyau : garantir des flux, en restreindre d’autres,
  • Compression : Riverbed & co. Espérer que les données sont redondantes et faire l’équivalent d’un « zip » des flux réseaux.

En réponse à tout cela, je propose deux approches en parallèle:

  • Vérifier que les bonnes pratiques « minimum » sont appliquées
  • Outiller la DSI pour pouvoir faire de la refacturation interne.

Quelques bonnes pratiques ayant fait leurs preuves:

  • Les flux http/https sont compressés par les serveurs Web et proxy,
  • Les réplications (DFS, SQL…) inter sites sont faites pendant les heures creuses ou avec la gestion de bande passante intégrée,
  • Privilégier l’envoi de Delta plutôt que complète,
  • Chercher les fichiers les plus volumineux,
  • Bloquer dès le départ plutôt qu’a posteriori (fichiers multimédias…),
  • Mettre des quotas pour gérer des croissances non prévues. Même si le blocage ne sera pas maintenable.
  • Noter toute solution  « temporaire », en identifiant le demandeur, la raison, et la date de suppression,
  • Mettre des sécurités (alerte/blocage) en dessous des valeurs réellement bloquantes.
  • Après une mise en production, revalider le capacity planning initial.

Lors de besoins pour un projet spécifique, il est souvent facile d’identifier le motif des coûts. Cela est plus difficile quand il s’agit de la connexion Internet ou du stockage. Les outils de refacturation permettent d’objectiver la consommation. Même si la refacturation interne ne sera pas faite, elle permet d’identifier clairement les consommateurs, et de ventiler le coût de la prochaine upgrade.

Investir

Cette solution permet d’avoir, de manière presque certaine, une réponse immédiate à un problème ou à un besoin. Sur certains sujets, comme les fichiers bureautiques, il permet de ne pas s’attirer les foudres des utilisateurs, surtout quand ces derniers n’hésitent pas à comparer avec le prix d’un disque de 1To chez le marchand du coin. Cependant il y a des cas où ce choix n’apporte pas les gains escomptés. C’est notamment le cas avec les problèmes de performances, où acheter un deuxième serveur ne veut pas forcément dire deux fois plus vite.

L’investissement est souvent favorisé car il permet également d’avoir des ressources pour mener les actions. Si vous souhaitez optimiser votre infrastructure virtuelle, vous aurez peut-être du mal à obtenir un budget, tout au plus pour un audit. Alors que si vous faites un projet avec de nouveaux serveurs et une montée de version, on vous donnera le budget pour cela, avec les jours hommes qui vont avec. Cela est dû à la difficulté d’afficher des gains avant de faire l’optimisation.

Conclusion

Je recommande les actions suivantes pour le « label » DSI++:

  • Avoir les indicateurs clés de saturation. Ceux-ci doivent être suffisants pour avoir le temps de mener une phase d’optimisation. Sinon on se retrouve dos au mur et l’investissement sera systématiquement retenu.
  • Demander l’exercice de chiffrer la consommation de ressources dans les projets. Profiter des montées de version pour inclure cet exercice sur l’existant. Vérifier à posteriori la différence entre le prévu et le réel. Les chiffres sont tout aussi intéressants que la prise de conscience des personnes sur l’impact de leur projet.
  • Quand une solution à un problème de consommation est identifiée dans un projet (activer la compression http), l’inclure dans des normes et standard, afin qu’elle soit généraliser « par défaut ».
  • Implémenter des outils de refacturation sur les éléments partagés et ceux où le consommateur n’est pas clairement identifiable.
  • Vérifier que des graphiques de consommation sont bien disponibles sur les éléments clés de l’architecture : stockage, réseau, processeur, mémoire. Ce n’est pas quand il y aura une saturation que ces graphes doivent être mise en place.
  • Ramener le prix du stockage central au Go. Cela permet facilement une prise de conscience lors des demandes. Idem pour le réseau.
  • Remettre en cause les choix du passé lors des renouvellements d’architecture. On fait certains choix en fonction:
    • D’un contexte,
    • De l’état des technologies (maturité, coût, connaissance),
    • De choix du groupe,
    • du budget.

Parfois c’est même d’autres personnes qui ont fait ces choix sur l’architecture actuelle. Il moins engageant de « juste renouveler », mais cela vous enferme indirectement dans des choix limités pour la suite.

Project 2013: Upgrade-SPProjectWebInstance – ActivatePWAWebThemesFeature failed

En voulant mettre à jour une instance Project 2010 en 2013:

Upgrade-SPProjectWebInstance https://url/pwa

Il s’en ait suivi cette erreur:

Upgrade-SPProjectWebInstance : Post provision setup failed.
ActivatePWAWebThemesFeature failed.
At line:1 char:1
+ Upgrade-SPProjectWebInstance https://url/pwa
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 + CategoryInfo : InvalidData: (Microsoft.Offic...radePwaInstance:
 PSCmdletUpgradePwaInstance) [Upgrade-SPProjectWebInstance], ProvisionException
 + FullyQualifiedErrorId : Microsoft.Office.Project.Server.Cmdlet.PSCmdletUpgradePwaInstance

 

Solution:

Il faut d’abord mettre à jour le site SharePoint en 2013 pour que la fonctionnalité soit présente:

Upgrade-SPSite -Identity https://url/pwa -versionupgrade

puis relancer la commande du départ:

Upgrade-SPProjectWebInstance https://url/pwa

La gestion du temps en IT

En informatique, comme dans toute branche professionnelle, on a souvent l’impression de « manquer » de temps. Les semaines s’enchaînent et le fâcheux sentiment de « ramer dans le désert » peut démoraliser.

Du coup, fin février de l’année dernière, j’ai ouvert un compte sur RescueTime. Pour ces 10 mois de l’année, il permet de mettre en « perspective »:

 

Cela fait tout de même 2418 heures, soit 6.6h par jour 7/7 en moyenne…. Autre effet de bord, on voit bien les périodes de congés (les « trous »).

Le logiciel scrute tout seul les applications que l’on utilise et a sa propre base de données pour déterminer ce qui est productif ou non. Je l’ai même installé sur mon smartphone, histoire d’avoir une image globale.

Ils se trompent rarement sur la classification, et on peut corriger si nécessaire.

L’intérêt augmente en creusant par type d’activité, par exemple j’ai fais plus de développement en fin d’année:

 

Par logiciel:

 

On peut aussi se comparer aux autres membres de la solution:

 

Cette solution ne m’a pas permis pour l’instant d’augmenter significativement ma productivité, ni de réduire le temps de travail.. Mais au moins je peux le mesurer et savoir à quoi il est passé, ce qui est déjà un premier pas 🙂

 

 

System Center Orchestrator 2012 – PowerShell script – Exception lors de la définition de ForegroundColor

En migrant un script PowerShell sous Orchestrator 2012, j’ai obtenue le message d’erreur suivant:

Exception lors de la définition de « ForegroundColor » : « Impossible de convertir la valeur Null en type « System.ConsoleColor » en raison de valeurs d'énumération non valides. Spécifiez l'une des valeurs d'énumération suivantes et réessayez. Les valeurs d'énumération possibles sont « Black, DarkBlue, DarkGreen, DarkCyan, DarkRed, DarkMagenta, DarkYellow, Gray, DarkGray, Blue, Green, Cyan, Red, Magenta, Yellow, White ». »

Le script commençait pas un classique « cls ». Cette commande n’est pas compatible dans une exécution de script PowerShell avec Orchestrator.

De toute façon on ne voit pas les sorties écrans et donc ça ne sert pas 🙂

Un message d’erreur plus propre aurait toutefois été apprécié.

Marketing Audi : contournement de l’autorun

Ayant une voiture Audi, j’ai reçu un carton de la marque m’incitant à regarder leur offre d’assistance. Pour cela, une clé USB est intégré au carton:

Marketing Audi

Une fois insérée dans l’ordi sous Windows 7, je vois une installation de pilote Plug & Play  Jusque là, rien d’anormal. Après avoir attendu quelques minutes, toujours pas de proposition d’autorun, et pas de lecteur dans le poste de travail.

Un petit tour dans le gestionnaire de disque, aucune trace de clé USB.

Coup classique, je débranche et rebranche la clé, « pour voir ». Et là surprise ! Je vois une fenêtre Démarrer/exécuter apparaître, et une URL saisie comme au clavier, sans rien demander:

 

 

Il s’agissait donc d’un clavier pré programmé et non d’une clé USB de stockage.

Malin car cela évite d’accepter l’autorun, et contourne surement les blocages de clé usb en entreprise, vu que c’est un clavier..

Cependant, cela prend directement le focus, et saisi au clavier. Si démarrer / exécuter n’est pas autoriser, cela va saisir du texte dans le vide.