TechED 2012 Europe approche à grand pas 🙂
J’y serai, et vous ?
Architecture / Microsoft / Network / Security
En voulant modifier une GPO chez un client, j’ai eu ce message d’erreur GPMC, et la GPO n’est effectivement pas modifiée:
En utilisant Process Monitor, de Sysinternals, l’accès au fichier registry.pol est refusé alors que mon compte est admin du domaine:
Suite à un incident et une restauration autoritaire, les fichiers ont en fait l’attribut lecture seule:
Après avoir décocher l’attribut lecture seule, la modification des GPO fonctionnent de nouveau 🙂
clear #--------------------------------------------------- $server="mysqlserver" $endpoint_port="5022" $instance="myNamedSQLinstance" $emailFrom = "provisioning@mydomain.com" $emailTo = "mathieu.chateau@lotp.fr" $smtpServer = "mysmtpserver" $sendmail=$true $foldersource='\myfileserverbackupFromDev$' $folderarchived='\myfileserverbackupFromDev$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
Quand vous essayez de joindre un serveur RDP spécifique de la ferme (pour faire de l’admin dessus ou aider un utilisateur qui est dessus), vous êtes refusé:
La connexion ne peut pas être établie car l’ordinateur distant qui a été joint n’est pas celui que vous avez spécifié. Cela peut être dû à une entrée obsolète du cache DNS. Essayez d’utiliser l’adresse IP de l’ordinateur à la place du nom.
Idem en essayant par l’adresse IP comme suggéré:
Cet ordinateur ne peut pas se connecter à l’ordinateur distant. L’ordinateur distant auquel vous essayez de vous connecter vous redirige vers l’ordinateur distant. La Connexion Bureau à distance ne peut pas vérifier que les deux ordinateurs distants appartiennent à la même batterie de serveurs. Ceci peut se produire si un autre ordinateur du réseau porte le même nom que celui auquel vous tentez de vous connecter.
Il suffit d’utiliser le fameux /admin du client RDP pour bypasser les règles !
Un des serveurs SharePoint 2010 a soudainement généré le message d’erreur suivant « en masse » (toutes les 20 secondes):
Failed extract of third-party root list from auto update cab at....With error: the data is invalid
L’impact le plus notable est une très grosse lenteur soudaine et persistante, alors que SQL et le cpu ne pas solicité.
Il est connu que les assembly .Net sont signés, et que par défaut Windows cherche à valider leur signature. Cela peut poser des lenteurs supplémentaires au 1er appel des application pools. J’avais d’ailleurs déjà écrit un billet à ce sujet pour SharePoint 2007.
Mais là c’est bien après le 1er appel, et le serveur a accès à Internet directement.
Une trace wireshark montre tout de suite des essais répétés pour télécharger des certificats:
Pour tracer le coupable, il suffit d’aller dans la vue détaillée de l’eventlog, et de récupérer le PID du processus qui a généré l’erreur (344):
Lancez ensuite Process Monitor de Sysinternals, en filtrant sur le PID 344:
On voit des essais répétés sur un fichier temporaire de type Cab.tmp, qu’il essaye de copier dans cryptneturlCache.
Je suis tombé sur cet article d’un autre MVP, et j’ai appliqué la KB indiquée même si l’erreur de correspondait pas exactement.
J’ai constaté qu’il essayait toujours de télécharger le fichier (en prenant un 304 not modified à chaque fois).
J’ai fais une variante de l’article ci-dessus, j’ai supprimé le dossier CryptNetUrlCache mais dans le profile du compte AD SharePoint.
Et voilà ^^
En voulant peupler une liste SharePoint via PowerShell, j’ai le message d’erreur suivant:
Unable to index into an object of type Microsoft.SharePoint.SPListItem. + $newItem[ <<<< "column_name"] = $SPFieldUserValue + CategoryInfo : InvalidOperation: (column_name:String) [], RuntimeException + FullyQualifiedErrorId : CannotIndex
Le nom des colonne est sensible à la casse, j’avais oublié une majuscule!
SPWindowsTokenCacheServiceApplication.CacheHandle() call to OpenProcess() failed for '0#.w|mondomainemonlogin': PID=2956, ErrorCode=5, Exception=System.ComponentModel.Win32Exception: Access is denied
The Secure Store Service application Secure Store Service is not accessible. The full exception text is: Cannot open database "Secure_Store_Service_DB_guid" requested by the login. The login failed. Login failed for user 'mondomaineaccount'
Security Token Service Application doit tourner avec le compte admin de la ferme
Log Name: Application Source: Microsoft-SharePoint Products-Project Server Event ID: 7626 Task Category: Queue Level: Critical Description: Cannot start queue. SSP: <GUID Project server application> SiteUID: <GUID Site> Url: Queue: ProjectQ
Vous avez également son frère jumeau, identique mais avec Url: Queue: TimesheetQ
On va corriger, ça, mais pour les prochaines fois, il faut d’abord supprimer l’instance PWA et seulement après l’Application Web.
#Récupérer l’application project
$a= get-spserviceapplication | ? {$_.Typename -like "*Project*"}
#Vérifier qu'on a bien le pwa fantôme (mettre le guid siteUID)
$bad=$a.SiteCollection | ?{$_.SiteID -eq "a2c27d0d-1e66-43af-94d2-83b1b268658f"}
$bad| select id,name,siteid,webappid |fl
Id : 4d4389d1-e32b–43a3–8043–9105a83fceb8
Name : PWA fantome a supprimer:
SiteId : a2c27d0d–1e66–43af–94d2–83b1b268658f
WebAppId : 9a618b96–6b00–472c–93f7–4c5f53822050
#Si c'est ok, on supprime!
$bad.Delete()
#On relance les commandes pour valider qu'il a disparu
$bad=$a.SiteCollection | ?{$_.SiteID -eq "a2c27d0d-1e66-43af-94d2-83b1b268658f"}
$bad| select id,name,siteid,webappid |fl