domingo, 29 de junio de 2014

JSlink para una lista de Anuncios

Voy a mostrar un step by step para mejorar la interfaz de una lista de anuncios mediante jslink. Ej de cómo quedaría.

image

Agrego un App de Anuncios

image

image

image

Agrego una página para mi homepage

image

image

Agregamos el web part de anuncios

image

image

Una vez agregado el web part, actualizamos la vista default de la app. Agregamos los siguientes campos:

image

Agregamos un par de ejemplos de anuncios

image

Ahora lo importante, creen un archivo de javascript (Ej: CSRNews.js) y agreguen lo siguiente

(function () {

var itemCtx = {};
itemCtx.Templates = {};

itemCtx.Templates.Header = "<table>";
itemCtx.Templates.Item = ItemOverrideFun;
itemCtx.Templates.Footer = "</table>";

itemCtx.BaseViewID = 1;
itemCtx.ListTemplateType = 104;

SPClientTemplates.TemplateManager.RegisterTemplateOverrides(itemCtx);

})();

function ItemOverrideFun(ctx) {

var _announcementTitle = ctx.CurrentItem.Title;
var _announcementDesc = ctx.CurrentItem.Body;
var _announcementID = ctx.CurrentItem.ID;
var fecha = ctx.CurrentItem.Modified;

var monthNames = [ "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio","Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" ];
var d = new Date(fecha);
 
return "<tr><td style='vertical-align:top'>" + "<div class='dateBox'><div class='dayDateBox'>" + d.getDay() + "</div><div class='monthDateBox' >" +  monthNames[d.getMonth()] + "</div></div>"+ "</td><td><b>" + _announcementTitle + "</b>" + _announcementDesc +"<a href='/Lists/Announcements/DispForm.aspx?ID='"+ _announcementID + "'> Read More…</a><p></p></td></tr>";
}

Suba el archivo js, a la siguiente librería

image

image

Editamos el web part y agregamos lo siguiente en la sección de “Varios\Vinculo js”

image

~site/SiteAssets/CSRNews.js

image

Ahora cambiamos el atributo vista selecciona a “Todos los Elementos”

image

La vista nos queda de la siguiente manera

image

A continuación agrego un web part Script editor

image

y agrego el siguiente estilo de css

<style>
/*  date Box */
.dateBox
{
    width: 50px;
    height: 50px;
    background-color: #f58228;
    padding-left: 8px;
    margin-right: 5px;
    margin-top:0px;
}
.dayDateBox
{
    font-size: 25px;
    line-height: 25px;
    color: white;
    padding-top: 3px;
}
.monthDateBox
{
    font-size: 12px;
    color: white;
}
</style>

image

Guarda la página, y el web part de anuncios quedo de la siguiente manera.

image

Recuperar un site collection borrado en Sharepoint (Restore a Deleted Site Collection in SharePoint 2013)

Que pasa si borramos un site collection y lo queremos recuperar? Bueno podemos hacer lo siguiente

image

image

A partir de este momento podemos hacer lo siguiente:

Ejecutamos el comando: Get-SPDeletedSite

image

A continuación ejecutamos el siguiente comando: Restore-SPDeletedSite –Identity <siteId>

donde SiteId es el definido en la imagen.

Restore-SPDeletedSite –Identity 87f9d6b3-cb33-4025-80a4-5e971ae136fc

image

Seleccionamo “Y”, y ya se restoreo correctamente el site collection borrado.

Información útil de algunas claves de registros en los servidores de Sharepoint

Cómo podemos saber que lenguajes pack tenemos instalados en el servidor ?

Lo puedes ver en la siguiente clave de registro: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\15.0\InstalledLanguages

image

Estos lenguajes deben ser los mismos definidos en el path siguiente:

%COMMONPROGRAMFILES%\Microsoft Shared\Web server extensions\15\template\

image

Qué productos tenemos instalados?

Lo puedes averiguar en el siguiente path: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\15.0\WSS\InstalledProducts

image

Lo mismo lo puedes consultar desde powershell: (Get-SPFarm).Products

               GUID                                                       Product
35466B1A-B17B-4DFB-A703-F74E2A1F5F5E    Project Server 2013
BC7BAF08-4D97-462C-8411-341052402E71      Project Server 2013 Preview
C5D855EE-F32B-4A1C-97A8-F0A28CE02F9C   SharePoint Server 2013
CBF97833-C73A-4BAF-9ED3-D47B3CFF51BE  SharePoint Server 2013 Preview
B7D84C2B-0754-49E4-B7BE-7EE321DCE0A9   SharePoint Server 2013 Enterprise
298A586A-E3C1-42F0-AFE0-4BCFDC2E7CD0   SharePoint Server 2013 Enterprise Preview
D6B57A0D-AE69-4A3E-B031-1F993EE52EDC    Microsoft Office Web Apps Server 2013
9FF54EBC-8C12-47D7-854F-3865D4BE8118      SharePoint Foundation 2013

Que pasa si la clave de registro varia del resultado del comando de powershell? Puedes ejecutar la siguiente consulta :

Set-SPFarmConfig –InstalledProductsRefresh
Esto actualizará la clave de registros.

Dos simples maneras de revisar si la cantidad de RAM asignada a tu Distributed Cache es la correcta

Ejecutando la siguiente consulta de powershell

Use-CacheCluster
Get-AFCacheHostStatus | % {
    $ServerName = $_.HostName
    Get-AFCacheStatistics -ComputerName $_.HostName -CachePort $_.PortNo | Add-Member -MemberType NoteProperty -Name 'ServerName' -Value $ServerName -PassThru
} | Format-List -Property *

La misma retornará las estadísticas de la cache.

image

Cómo puedes ver esta consulta te da estadísticas de la cache, las más importantes son:

Size: tamaño en bytes

Item Count: cantidad de items en cada cache

RequestCount: la cantidad de Request que hizo Sharepoint

MissCount: esta es la más importante. En el primer host, hay un 42% de miss de cache (request count y miss count), en el segundo host es de 32%.

Un misscount ocurre cuando:

  • El item no esta en la cache
  • Difiere la versión de la cache y la base de datos

Cómo recomendación si pasa de 50% deberías a empezar a monitorear en detalle la cache.

Importante: un porcentaje alto no siempre implica un problema de cache, ej: cada vez que reiniciamos nuestro servidor, habrá un alto miss de cache, porque se deberá repopular la cache. Se recomienda detener el host de forma “graceful” antes de reiniciar el host.

Stop-SPDistributedCacheServiceInstance -Graceful;

Trata de monitorear la cache por un tiempo, si reiniciar el servidor y revisa estos valores.

Otra manera de revisar el estado de nuestra cache, es utilizando contadores de performance (Cache Miss Percentage).

http://msdn.microsoft.com/en-us/library/ff637725(v=azure.10).aspx

Tip Adicional: también revisa que no haya timeouts entre los servidores de WFE y los host de cache. Una manera simple es ejecutando el siguiente comando para ver el tiempo de timeout configurado

$set = Get-SPDistributedCacheClientSetting -ContainerType DistributedDefaultCache
$set.requestTimeout
$set.channelOpenTimeOut

A continuación revisa la latencia entre tus servidores de WFE y los host cache. Ej: mediante psping (http://blogs.msdn.com/b/igorpag/archive/2013/12/15/azure-network-latency-test-and-sql-server-optimization.aspx)

Y en el caso que tengas una latencia alta configura el timeout a un valor razonable (si es un valor grande, no tiene mucho sentido la cache, lo cual deberías revisar tu infraestructura y reducir la latencia). Ej: 100 ms

$set = Get-SPDistributedCacheClientSetting -ContainerType DistributedDefaultCache
$set.requestTimeout = "100"
$set.channelOpenTimeOut = "100"
Set-SPDistributedCacheClientSetting -ContainerType DistributedDefaultCache $set

El container type puede ser cualquier de los siguientes:

  • DistributedDefaultCache

  • DistributedAccessCache

  • DistributedActivityFeedCache

  • DistributedBouncerCache

  • DistributedLogonTokenCache

  • DistributedServerToAppServerAccessTokenCache

  • DistributedSearchCache

  • DistributedSecurityTrimmingCache

  • DistributedActivityFeedLMTCache

  • DistributedViewStateCache

Simple tip para exportar los usuarios de un grupo a un archivo csv (exporting users in a group to a csv file)

Simplemente ejecutar

Get-SPUser -Group "Support Owners" -Web url_WEBSITTE | Export-Csv c:\test1.csv -NoTypeInformation –force

recuerda reemplazar los parámetros Support Owners y WebSite, el cual el primero define el grupo y el segundo el web site donde se realizará la consulta.

Tip adicional:

La user information list (/_catalogs/users/simple.aspx) es una lista oculta la cual almacena información de los usuarios del site collection y algo de metadata (Picture, Email, DisplayName, LoginName, etc). Cuando agregas un permiso para el usuario a un website, list, library, etc, y el usuario ingresa por primera vez, automáticamente Sharepoint lo agrega a esta lista. En el caso de un grupo de AD, Sharepoint lo hace automáticamente cuando seteas los permisos.

Hay dos jobs que actualizan los datos del usuario con la base de perfiles:

User Profile Service Application – User Profile to SharePoint Full Synchronization(Hourly)

User Profile Service Application – User Profile to SharePoint Quick Synchronization(Every 5 Minutes).

Si lo quieres hacer manual, puedes ver este link: http://blog.falchionconsulting.com/index.php/2011/12/updating-sharepoint-2010-user-information/

Pero el post trata de exportar los usuarios de un grupo, cómo podemos exportar la lista de usuarios de la lista “User Information List”. Hay un montón de post que utilices una url específica, copiando el ID de la lista, etc.

Pero hay otra manera mucho más simple.

Sólo edita la página, edita el web part. Después cambia el tipo de toolbar type a “Show Toolbar”

image

image

image

Y ya podrás exportar la lista de usuarios.

image

Obtener un usuario mediante powershell en Sharepoint 2013

Podemos usar el comando Get-SPUser (http://technet.microsoft.com/es-es/library/ff607580(v=office.15).aspx) para obtener información de un usuario o grupo y después procesarla. pero varía un poco la forma de consultar en 2013, ya que por default se usa claims para la autenticación.

Si yo ejecuto este comando

$user = Get-SPUser -Identity "DOMINIO\usuario" -Web http://url_website

Me lanza el siguiente error: Get-SPUser : You must specify a valid user object or user identity.

Esto se debe a que ahora en Sharepoint 2013 se usa claims por default para la autenticación de usuarios, esto implica que se agrega el siguiente formato a la identidad

Entonces lo único que hice fue modificar el formato de la consulta.

$user = Get-SPUser -Identity "i:0#.w|DOMINIO\usuario" -Web http://url_website

image

Más información sobre claims:

http://social.technet.microsoft.com/wiki/contents/articles/13921.sharepoint-2013-claims-encoding-also-valuable-for-sharepoint-2010.aspx

http://social.technet.microsoft.com/wiki/contents/articles/13921.sharepoint-2013-claims-encoding-also-valuable-for-sharepoint-2010.aspx

Borrar un content type huérfano (Delete an “Orphan” Content Type)

IMPORTANTE, LEER ANTES DE HACER CUALQUIER COSA: NO está soportado modificar la bases de Sharepoint. Por lo tanto no realices esto en PRD, ya que Microsoft no te dará soporte. Si tienes el problema que describo contacta al soporte premier de MS el cual te orientará en la solución.

Al tratar de activar la feature de “Report Server Integration Feature”

image

Me lanzaba el error:

image

The content type with Id 0x0101007DFDDF56F8A9492DAA9366B83A95B3A0 defined in feature {e8389ec7-70fd-4179-a1c4-6fcb4342d7a0} was found in the current site collection or in a subsite

El ID del content type puede ser cualquiera de los tres a continuación:

0x010100C3676CDFA2F24E1D949A8BF2B06F6B8B (Report Builder Report)

0x010100D8704AF8ED734F4088724751E0F2727D (Report Builder Model)

0x0101007DFDDF56F8A9492DAA9366B83A95B3A0 (Report Data Source)

Entonces lo primero que hice fue forzar la activación de la feature via powershell

Enable-SPFeature -Identity E8389EC7-70FD-4179-A1C4-6FCB4342D7A0 -Url http://url_sitecollection –force

Este comando me activaba la feature pero no podía ver los content types de Reporting Services en la sección de content types del site collection o del web site

image

.image

Trate de desactivar de nuevo la feature de “Report Server Integration Feature” y activarla de nuevo desde la UI, pero me seguía tirando el mismo error.

A continuación trate de ejecutar un script de powershell para borrar los content types de la feature en todas las librerías donde estaban activado (dos scripts diferentes, uno por ID y dedicado a un website y otro por web application completo). Ejecutar estos scripts para cada content type de la feature de Reporting Services

Add-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue
get-spweb http://url_sitecollection
$spcontenttypeid = New-Object Microsoft.SharePoint.SPContentTypeId '0x010100C3676CDFA2F24E1D949A8BF2B06F6B8B'
$ct = $web.ContentTypes[$spcontenttypeid]
$usages = [Microsoft.Sharepoint.SPContentTypeUsage]::GetUsages($ct)
foreach ($usage in $usages) {
    Write-Host $usage.Url
}

Add-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue
$targetCT = "Report Builder Report"
$targetWebApp = "url_WEBAPPLICATION"
$webapp = Get-SPWebApplication $targetWebApp
$sites = $webapp.Sites
foreach ($site in $sites)
{
foreach ($web in $site.AllWebs)
    {
        foreach ($ct in $web.ContentTypes)
        {
            if($ct.Name -eq $targetCT)
            {
            Write-Host $targetCT is defined as a content type in $web.Url
            }
        }

        foreach ($list in $web.Lists)
        {
            foreach ($listct in $list.ContentTypes)
            {
                if($listct.Name -eq $targetCT)
                {
                Write-Host $targetCT is defined in list $list in $web.Url
                }
            }
        }
        Write-Host
    }
}

Los dos scripts me decían que se estaban usando en una librería, pero al querer entrar a la librería no veía los content types.

image

Entonces a continuación borré la librería (desde las dos papeleras de reciclaje, usuario y del site collection). Pero me seguía diciendo que estaba siendo usada.

Cuando en Sharepoint te deci que algo está usado, y no lo ves, en general es porque algún componente quedo huérfano.Entonces revise la base de content types de la content database donde está el site collection (OJO, RECUERDA EL WARNING DEL PRIMER PARRAFO, NO ESTA SOPORTADO CONSULTAR LA BD DE SHAREPOINT NI MODIFICARLA, pero esto es un ejemplo para entender las cosas.)

Ejecuté la siguiente consulta de SQL:

SELECT [SiteId] ,[Class] ,[Scope] ,[ContentTypeId] ,[Version] ,[NextChildByte] ,[Size] ,[Definition] ,[ResourceDir] ,[SolutionId] ,[IsFromFeature] ,[DeleteTransactionId] FROM [Intra_ContentDB1].[dbo].[ContentTypes]
Recuerda hacer esto para cada content type.image

Vi que la columna Definition estaba con valor NULL, esto significa que esos content types NO tenían una definición. Ej: de definición del content type 0x010100C3676CDFA2F24E1D949A8BF2B06F6B8B

<ContentType ID="0x010100C3676CDFA2F24E1D949A8BF2B06F6B8B" Name="$Resources:ReportServerResources,ReportBuilderContentTypeName;" Group="$Resources:ReportServerResources,ReportServerContentTypeGroup;" Description="$Resources:ReportServerResources,ReportBuilderContentTypeDesc;" RequireClientRenderingOnNew="FALSE" Version="1" FeatureId="{e8389ec7-70fd-4179-a1c4-6fcb4342d7a0}"><Folder TargetName="_cts/Report Builder Report" /><FieldRefs><FieldRef ID="{c042a256-787d-4a6f-8a8a-cf6ab767f12d}" Name="ContentType" /><FieldRef ID="{5f47e085-2150-41dc-b661-442f3027f552}" Name="SelectFilename" /><FieldRef ID="{8553196d-ec8d-4564-9861-3dbe931050c8}" Name="FileLeafRef" Required="TRUE" /><FieldRef ID="{8c06beca-0777-48f7-91c7-6da68bc07b69}" Name="Created" Hidden="TRUE" /><FieldRef ID="{fa564e0f-0c70-4ab9-b863-0177e6ddd247}" Name="Title" Required="FALSE" ShowInNewForm="FALSE" ShowInEditForm="TRUE" /><FieldRef ID="{28cf69c5-fa48-462a-b5cd-27b6f9d2bd5f}" Name="Modified" Hidden="TRUE" /><FieldRef ID="{822c78e3-1ea9-4943-b449-57863ad33ca9}" Name="Modified_x0020_By" Hidden="FALSE" /><FieldRef ID="{4dd7e525-8d6b-4cb4-9d3e-44ee25f973eb}" Name="Created_x0020_By" Hidden="FALSE" /></FieldRefs><DocumentTemplate TargetName="/_layouts/15/ReportServer/rs.rsapplication" /><XmlDocuments><XmlDocument NamespaceURI="http://schemas.microsoft.com/sharepoint/v3/contenttype/forms">PEZvcm1UZW1wbGF0ZXMgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vc2hhcmVwb2ludC92My9jb250ZW50dHlwZS9mb3JtcyI+PERpc3BsYXk+RG9jdW1lbnRMaWJyYXJ5Rm9ybTwvRGlzcGxheT48RWRpdD5Eb2N1bWVudExpYnJhcnlGb3JtPC9FZGl0PjxOZXc+RG9jdW1lbnRMaWJyYXJ5Rm9ybTwvTmV3PjwvRm9ybVRlbXBsYXRlcz4=</XmlDocument></XmlDocuments></ContentType>

Entonces lo que hice es copiar el mismo content type en las filas donde estaban en null. Ej: este es  el update para el content type  0x0101007DFDDF56F8A9492DAA9366B83A95B3A0. IMPORTANTE: hacer lo mismo para los demás content types.

UPDATE [Intra_ContentDB1].[dbo].[ContentTypes] SET Definition = '<ContentType ID="0x010100C3676CDFA2F24E1D949A8BF2B06F6B8B" Name="$Resources:ReportServerResources,ReportBuilderContentTypeName;" Group="$Resources:ReportServerResources,ReportServerContentTypeGroup;" Description="$Resources:ReportServerResources,ReportBuilderContentTypeDesc;" RequireClientRenderingOnNew="FALSE" Version="1" FeatureId="{e8389ec7-70fd-4179-a1c4-6fcb4342d7a0}"><Folder TargetName="_cts/Report Builder Report" /><FieldRefs><FieldRef ID="{c042a256-787d-4a6f-8a8a-cf6ab767f12d}" Name="ContentType" /><FieldRef ID="{5f47e085-2150-41dc-b661-442f3027f552}" Name="SelectFilename" /><FieldRef ID="{8553196d-ec8d-4564-9861-3dbe931050c8}" Name="FileLeafRef" Required="TRUE" /><FieldRef ID="{8c06beca-0777-48f7-91c7-6da68bc07b69}" Name="Created" Hidden="TRUE" /><FieldRef ID="{fa564e0f-0c70-4ab9-b863-0177e6ddd247}" Name="Title" Required="FALSE" ShowInNewForm="FALSE" ShowInEditForm="TRUE" /><FieldRef ID="{28cf69c5-fa48-462a-b5cd-27b6f9d2bd5f}" Name="Modified" Hidden="TRUE" /><FieldRef ID="{822c78e3-1ea9-4943-b449-57863ad33ca9}" Name="Modified_x0020_By" Hidden="FALSE" /><FieldRef ID="{4dd7e525-8d6b-4cb4-9d3e-44ee25f973eb}" Name="Created_x0020_By" Hidden="FALSE" /></FieldRefs><DocumentTemplate TargetName="/_layouts/15/ReportServer/rs.rsapplication" /><XmlDocuments><XmlDocument NamespaceURI="http://schemas.microsoft.com/sharepoint/v3/contenttype/forms">PEZvcm1UZW1wbGF0ZXMgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vc2hhcmVwb2ludC92My9jb250ZW50dHlwZS9mb3JtcyI+PERpc3BsYXk+RG9jdW1lbnRMaWJyYXJ5Rm9ybTwvRGlzcGxheT48RWRpdD5Eb2N1bWVudExpYnJhcnlGb3JtPC9FZGl0PjxOZXc+RG9jdW1lbnRMaWJyYXJ5Rm9ybTwvTmV3PjwvRm9ybVRlbXBsYXRlcz4=</XmlDocument></XmlDocuments></ContentType>' WHERE ContentTypeId = 0x010100C3676CDFA2F24E1D949A8BF2B06F6B8B and Definition is null
Después de ejecutar estas queries para los tres content  types, ya me apareció en la sección de content types los tipos de contentido y en la librería donde se estaban usando y no los veía.

image


image

sábado, 28 de junio de 2014

Ocultar el mensaje “Experience all that Sharepoint 2013 has to offer. Start Now or Remind me later”

image

Esta barra se muestra después de haber hecho un upgrade un site collection de 2010 a 2013. Al ocultarlo (remind me latter) se mostrará a los 30 días de nuevo.

Cómo podemos ocultar esta barra? Tan simple ejecutando el siguiente comando

Get-SPSite -Limit All -CompatibilityLevel 14 | % { $_.AllowSelfServiceUpgrade = $false }

miércoles, 25 de junio de 2014

Error al registrar una managed account

Al tratar de registrar una cuenta como managed account, me lanzaba el siguiente error:

The trust relationship between the primary domain and the trusted domain failed.

Para registrar la cuenta, hacía lo siguiente:

$cred = Get-Credential

New-SPManagedAccount -Credential $cred

Para validar que la cuenta se la correcta, usa el siguiente comando:

net user <cuenta de AD> /domain

Ejecutando esa consulta, me dí cuenta que la cuenta que quería registrar no existia. Gracias a los administradores del AD por pasarme bien el nombre de la cuenta, jeje

lunes, 23 de junio de 2014

Error con el job SPDiagnosticsMetricsProvider

En el event viewer aparecería el siguiente error:

The Execute method of job definition Microsoft.SharePoint.Diagnostics.SPDiagnosticsMetricsProvider (ID 6004dc5d-5cee-451c-b5ae-b6a09ab8c9b2) threw an exception. More information is included below.

An update conflict has occurred, and you must re-try this action. The object SPWebService was updated by Dominio\Cuenta, in the OWSTIMER (660) process, on machine NOMBREMAQUINA.  View the tracing log for more information about the conflict.

Cuando en el mensaje aparece el texto “An update conflict has occurred, and you must re-try this action.” casi siempre es un problema de versiones diferentes de cache de configuración de  Sharepoint.

Para ello reviso el archivo cache.ini.

C:\ProgramData\Microsoft\SharePoint\Config\GUID

Al revisar veo que lo siguiente en el contenido del archivo cache.ini

  • En el WFE el valor = 116991
  • En el Application Server el valor = 11700

Claramente tenia versiones diferentes de cache. Lo que hice es limpiar la cache DE CADA SERVIDOR, puedes usar el siguiente post: http://blogs.msdn.com/b/jamesway/archive/2011/05/23/sharepoint-2010-clearing-the-configuration-cache.aspx

Una vez que se actualizo la cache, reviso de nuevo los files (esperar unos 10 minutos hasta que se actualice de forma completa), y veo que ahora están iguales las versiones.

  • En el WFE el valor = 117052
  • En el Application Server el valor = 117052

domingo, 22 de junio de 2014

Error con contadores en Sharepoint 2013–Troubleshooting

En el Event Viewer aparecerían los siguientes errores relacionados a contadores:

The Open Procedure for service "BITS" in DLL "C:\Windows\System32\bitsperf.dll" failed. Performance data for this service will not be available. The first four bytes (DWORD) of the Data section contains the error code.

Windows cannot load the extensible counter DLL CcmFramework. The first four bytes (DWORD) of the Data section contains the Windows error code.

The Open Procedure for service "WmiApRpl" in DLL "C:\Windows\system32\wbem\wmiaprpl.dll" failed. Performance data for this service will not be available. The first four bytes (DWORD) of the Data section contains the error code.

The Open Procedure for service "FIMSynchronizationService" in DLL "D:\Appls\Microsoft\Sharepoint\15.0\Synchronization Service\Bin\mmsperf.dll" failed. Performance data for this service will not be available. The first four bytes (DWORD) of the Data section contains the error code.

Para solucionarlo puedes revisar lo siguiente:

  • Revisar servicios de Windows, revisar si están iniciados

WMI Performance Adapter

Windows Management Instrumentation

Remote Registry

  • Verificar permisos sobre las siguientes claves de registro. Revisar si tiene permisos los grupos WSS_WPG/Performance Log Users y Local Services

KEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BITS\Performance

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WmiApRpl\Performance

Puedes usar el siguiente script para dar permisos:

$regKeys = @("HKLM:\SYSTEM\CurrentControlSet\Services\BITS\Performance","HKLM:\SYSTEM\CurrentControlSet\Services\WmiApRpl\Performance")
$regAccount = "$env:COMPUTERNAME\WSS_WPG"
$regPermission = "FullControl"
$regPermToggle = "Allow"
foreach ($regKey in $regKeys){
    $acl = Get-Acl $regKey
    $rule = New-Object System.Security.AccessControl.RegistryAccessRule ($regAccount,$regPermission,"ContainerInherit","None",$regPermToggle)
    $acl.SetAccessRule($rule)
    $acl | Set-Acl -Path $regKey
    }

También puedes usar Process Monitor para evaluar access denied

Revisar si los grupos también tenien permisos sobre los folders donde están las definiciones de los contadores.

  • Si sigues teniendo problemas puedes habilitar de nuevo la dll o contador requerida.

Abre una línea de comando con permisos de administrador, ve (CD path) hasta el path donde está la dll que lanza el error, ej: C:\Windows\System32\ y ejecuta lo siguiente:

lodctr.exe /q:BITS

lodctr.exe /q:FIMSynchronizationService

lodctr.exe /q:WmiApRpl

image

image

image

Si alguno de los contadores está deshabilado ejecutar lo siguiente:

lodctr.exe /e:BITS

lodctr.exe /e:FIMSynchronizationService

lodctr.exe /e:WmiApRpl

También puedes usar el nombre de la DLL para habilitar los contadores

lodctr /e:<DLL name> donde DLL name puede ser por ejemplo bitsperf.dll

  • Si sigues teniendo problemas puedes reinstalar de nuevo el contador.
  • En una línea de comandos (run as a administrator),ejecutar lo siguiente:
    lodctr.exe "D:\Appls\Microsoft\Sharepoint\15.0\Synchronization Service\Bin\mmsperf.ini"
    Verificar el path donde está la librería de contadores (.ini)
    • Para finalizar reinstalamos todos los contadores (cuidado con esto)

    En una línea de comandos (run as a administrator),ejecutar lo siguiente:

    Lodctr /R

    sábado, 21 de junio de 2014

    Algunos tips de Office Web Apps (Web Application Companion=WAC).

    • Toda la configuración de la granja de Office Web Apps se guarda en el siguiente archivo:
    C:\ProgramData\Microsoft\OfficeWebApps\Data\FarmState\settings.xml
    Este archivo se puede modificar manualmente, pero sólo impactará al host donde se modifico.Siempre es recomendable usar el cmdlet Set-OfficeWebAppFarm para que impacte la configuración de forma global. Si modificas las configuraciones siempre deberás reiniciar el servicio de WAC (Restart-Service WACSM) o reiniciando el server.
    • Puedes revisar la topología que tienes en la granja (en el caso que tengas más de 1 servidor de WAC) en el siguiente archivo:
    C:\ProgramData\Microsoft\OfficeWebApps\Data\FarmState\topology.xml
    image
    • En el caso que el estado de algún servidor aparezca como unhealthy, ejecutando el siguiente comando: (Get-OfficeWebAppsFarm).Machines
    image
    Revisa los logs del event viewer: Applications and Service Logs > Microsoft Office Web Apps para buscar el problema
    WAC Event Log entries
    También revisa que tengas la feature HTTP Activation for .NET Framework 4.5 WCF Services (Get-WindowsFeature NET-WCF-HTTP-Activation45)
    En el caso que no la tengas, instalala  y reinicia el servicio.
    Add-WindowsFeature NET-WCF-HTTP-Activation45
    Restart-Service WACSM


    • Algunos directorios de Office Web Apps (default installation directory C:\Program Files\Microsoft Office Web Apps)

    AdminModule
    Contiene los assemblies que se registran para utilizar los cmdlets de PowerShell para Office Web Apps
    AgentManager
    Contiene los Windows Service que son rgistrados. Estos servicios monitorean la granja via watchdog programs.
    BroadcastService_Host
    Una ASP.NET web application usada para broadcasting PowerPoint a múltiples clientes
    DiskCache
    Un Windows Communication Foundation (WCF) service responsible de manejar la cache de items
    ExcelServicesEcs
    Una segunda implementación de Excel Services Calculation Server. Se usa localmente cuando SharePoint no es usado
    ExcelServicesWfe
    El core Excel Services ASP.NET web application engine for para trabajar con Excel documents en Office Web Apps 2013.
    FarmStateManager
    Los core assemblies para Office Web Apps. El código que contiene es responsible de manejar la granja, registrar los servers y otras funcionalidades. Estos assemblies también contiene la interface de intelligent coauthoring para Microsoft Cobalt.
    FarmStateReplicator
    Consola de aplicación responsable de hacer pushing de los cambios de la configuración principal para los servidores miembros participantes en el granja.
    HostingService
    Web handler responsible de enviar el Wopi Discovery XML a clientes
    Imaging
    Un WCF service class que es responsible de transformar images
    a dispositivos de clientes
    MetricsProvider
    Un WCF service que acepta mensaje de “watchdogs” y registros y los guarda en una locación central
    OFFICE15
    Un conjunto de archivos que administra el Proofing (conocido como spelling checker)
    OpenFromUrlHost
    Archivos de configuración para usar host feature de Office Web
    Apps
    OpenFromUrlWeb
    Contiene archivos .aspx que administra los links generados o embedded HTML de recursos web o en paths Universal
    Naming Convention (UNC)
    PowerPointEditService
    El PowerPoint Editing WCF service. Es el core lógico para editar
    documentos de PowerPoint
    PPTConversionService
    Un WCF service responsible de convertir archivos PowerPoint a
    Microsoft Silverlight, basic PNGs o mobile PNGs.
    ProofingEl spelling checker WCF service para Office Web Apps.
    RootWebSiteEl root web site para Office Web Apps web applications.
    UlsController
    El engine core de logging Office Web Apps.
    WebOneNote
    Contiene ASP.NET web application para ver documentos OneNote.
    WebPPTViewer
    Contiene ASP.NET web application para ver documentos PowerPoint.
    WebWordViewer
    Contiene ASP.NET web application para ver documentos Word.
    WordConversionServiceContiene WCF services para la translating de un documento


    • Si el servicio va a ser utilizado desde internet, recuerda setear la lista de host y dominios permitidos con el cmdlet New-OfficeWebAppsHost

    viernes, 20 de junio de 2014

    Instalar el acumulativo de junio (2014) de Office Web Apps 2013 SP1 (patching)

    Voy a explicar como instalar el acumulativo de junio 2014 de Office Web Apps 2013 con SP1 incluído.

    http://support.microsoft.com/kb/2881051

    En el caso que tengas problemas para ejecutar los comandos de powershell puedes importar el módulo de Office Web Apps: Import-Module OfficeWebApps

    • Primero exporto la configuración de la granja de Office Web Apps 2013

    Get-OfficeWebAppsFarm >C:\WACConfiguration.txt

    • Remuevo la máquina de la granja

    Remove-OfficeWebAppsMachine

    • Instalo el acumulativo junio 2014

    image

    image

    A continuación REINICIO EL SERVIDOR.

    • Una vez que se reinicio ejecuto de nuevo el comando de New-OfficeWebAppsFarm con las opciones iniciales que habias utilizado previamente para instalar el servidor de WAC.

    Ej: New-OfficeWebAppsFarm –InternalUrl "http://officewebapps.net" -ExternalUrl "http://officewebapps.net" -EditingEnabled –AllowHttp

    • Después verifico las configuraciones que exporte en el punto 1.C:\WACConfiguration.txt
    • Verifico status de la granja

    Get-OfficeWebAppsFarm
    (Get-OfficeWebAppsFarm).Machines

    También verifico el estado de los servicios webs (cambia el dns por el de tu servidor)

    Invoke-WebRequest http://officewebapps.com/m/met/participant.svc/jsonAnonymous/BroadcastPing

    También verifico el event viewer (Microsoft Office Web Apps)

    image

    Si por algún motivo el comando (Get-OfficeWebAppsFarm).Machines, lanza que el servidor está como “Unhealthy”, puedes revisar el post de http://www.wictorwilen.se/office-web-apps-server-2013---machines-are-always-reported-as-unhealthy para revisar el estado de tu granja.

    image

    • Verifico la versión de la granja

    Abro una consola de powershell y ejecuto lo siguiente (recuerda cambiar el dns de tu servidor)

    (Invoke-WebRequest -Uri http://officewebapps.com/p/ppt/view.svc/jsonAnonymous/GetSlide -Method POST).Headers["X-OfficeVersion"]

    Esa consulta debería retorna 15.0.4623.1001

    También se puede obtener ejecutando lo siguiente:

    get-content C:\ProgramData\Microsoft\OfficeWebApps\Data\local\OfficeVersion.inc

    • Verifico el status de la conexión de Sharepoint con la granja de Office Web Apps

    Get-SPWopiZone

    Get-SPWOPISuppressionSetting

    Get-SPWOPIBinding

    Para mayor información puedes consultar el siguiente link: http://technet.microsoft.com/en-us/library/jj966220(v=office.15).aspx