SharePoint 2013 – Script de aprovisionamiento de Business Data Connectivity

powershellLa aplicación de servicio de Conectividad a datos empresariales (o Business Data Connectivity) permite cargar archivos de definición de aplicaciones que describen las interfaces de los sistemas de la línea de negocio de una organización y la forma de acceder a los datos que almacenan en SharePoint 2013.

Para crear este servicio en SharePoint 2013, aquí tenéis un script de PowerShell que os puede ser de utilidad, si estáis montando nuevos entornos:

#####################################################################################
## Create Business Data Connectivity Service ##
#####################################################################################
# SQL Server name and apppool
$DB = "DES-SP2013"
$AppPool = "SharePoint Web Services"
# Service name and database
$BDCSName = "Business Data Connectivity Service"
$BDCSDB = "SP2013_BDC"
#####################################################################################
## Administrative Privileges Check ##
#####################################################################################
function Use-RunAs 
{    
    # Check if script is running as Adminstrator and if not use RunAs 
    # Use Check Switch to check if admin 
    param([Switch]$Check) 
	$IsAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator") 
    if ($Check) { return $IsAdmin }     
    if ($MyInvocation.ScriptName -ne "") 
    {  
        if (-not $IsAdmin)  
        {  
            try 
            {  
                $arg = "-file $($MyInvocation.ScriptName)" 
                Start-Process "$psHome\powershell.exe" -Verb Runas -ArgumentList $arg -ErrorAction "stop"  
            } 
            catch 
            { 
                Write-Warning "Error - Failed to restart script with runas"  
                break
            } 
            exit # Quit this session of powershell 
        }  
    }  
    else
    {  
        Write-Warning "Error - Script must be saved as a .ps1 file first"  
        break  
    }  
} 
Use-RunAs
#####################################################################################
## Add Powershell SharePoint Snapin
Add-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue
#####################################################################################
try
{
	Write-Host "Creating Business Data Connectivity Service"
	$ServiceApplication = New-SPBusinessDataCatalogServiceApplication –ApplicationPool $AppPool –DatabaseName $BDCSDB –DatabaseServer $DB –Name $BDCSName > $null
	New-SPBusinessDataCatalogServiceApplicationProxy -Name "$BDCSName Proxy" -DefaultProxyGroup -ServiceApplication $BDCSName > $null
	Get-SPServiceInstance | where-object {$_.TypeName -like "*Managed Metadata*"} | Start-SPServiceInstance > $null
	Write-Host "Service created correctly"
} 
catch 
{ 
	Write-Output $_  
}

 

Referencias: New-SPBusinessDataCatalogServiceApplication y New-SPBusinessDataCatalogServiceApplicationProxy

SharePoint 2013 – Script de aprovisionamiento de Usage and State Service Applications

powershellLa aplicación de Servicio de estado (o State Service) proporciona almacenamiento temporal de los datos de usuario para los componentes de SharePoint 2013.

Para crear este servicio en SharePoint 2013, aquí tenéis un script de PowerShell que os puede ser de utilidad, si estáis montando nuevos entornos:

#####################################################################################
## Create Usage and State Service Applications ##
#####################################################################################
$DB = "DES-SP2013"

$DataDrive = "C:\\SPLogs"
$USName = "Usage and Health Data Collection Service"
$USDB = "SP2013_Usage"

$SSName = "State Service"
$SSDB = "SP2013_State"
#####################################################################################
## Administrative Privileges Check ##
#####################################################################################
function Use-RunAs 
{    
    # Check if script is running as Adminstrator and if not use RunAs 
    # Use Check Switch to check if admin 
    param([Switch]$Check) 
	$IsAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator") 
    if ($Check) { return $IsAdmin }     
    if ($MyInvocation.ScriptName -ne "") 
    {  
        if (-not $IsAdmin)  
        {  
            try 
            {  
                $arg = "-file $($MyInvocation.ScriptName)" 
                Start-Process "$psHome\powershell.exe" -Verb Runas -ArgumentList $arg -ErrorAction "stop"  
            } 
            catch 
            { 
                Write-Warning "Error - Failed to restart script with runas"  
                break
            } 
            exit # Quit this session of powershell 
        }  
    }  
    else
    {  
        Write-Warning "Error - Script must be saved as a .ps1 file first"  
        break  
    }  
} 
Use-RunAs
#####################################################################################
## Add Powershell SharePoint Snapin
Add-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue
#####################################################################################
try
{
	Write-Host "Creating Usage and Health Data Collection Service"
	Set-SPUsageService -LoggingEnabled 1 -UsageLogLocation "$DataDrive" -UsageLogMaxSpaceGB 2
	$serviceInstance = Get-SPUsageService
	New-SPUsageApplication -Name $USName -DatabaseServer $DB -DatabaseName $USDB -UsageService $serviceInstance > $null
	Write-Host "Service created correctly"

	Write-Host "Creating State Service and Proxy…"
	$stateServiceDatabase = New-SPStateServiceDatabase -Name $SSDB
	$stateSA = New-SPStateServiceApplication -Name $SSName -Database $stateServiceDatabase
	New-SPStateServiceApplicationProxy -ServiceApplication $stateSA -Name "$SSName Proxy" -DefaultProxyGroup
	Write-Host "Service created correctly"
} 
catch 
{ 
	Write-Output $_  
} 

 

Referencias: New-SPUsageApplication, New-SPStateServiceDatabase y New-SPStateServiceApplicationProxy

SharePoint 2013 – Script de aprovisionamiento de Machine Translation Service

powershellLa aplicación de servicio Traducción Automática (o Machine Translation) es una nueva aplicación de servicio en SharePoint 2013 que proporciona la traducción automática de archivos y los sitios. Cuando la aplicación de servicio de traducción automática procesa una solicitud de traducción, la reenvía al servicio de Microsoft Translator , el cual realiza el trabajo real de traducción.

Para crear este servicio en SharePoint 2013, aquí tenéis un script de PowerShell que os puede ser de utilidad, si estáis montando nuevos entornos:

#####################################################################################
## Create Machine Translation Service ##
#####################################################################################
$AppPool = "SharePoint Web Services"

$MTSInst = "Machine Translation Service"
$MTSName = "Translation Service"
$MTSDB = "SP2013_MachineTranslation"
#####################################################################################
## Administrative Privileges Check ##
#####################################################################################
function Use-RunAs 
{    
    # Check if script is running as Adminstrator and if not use RunAs 
    # Use Check Switch to check if admin 
    param([Switch]$Check) 
	$IsAdmin = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator") 
    if ($Check) { return $IsAdmin }     
    if ($MyInvocation.ScriptName -ne "") 
    {  
        if (-not $IsAdmin)  
        {  
            try 
            {  
                $arg = "-file $($MyInvocation.ScriptName)" 
                Start-Process "$psHome\powershell.exe" -Verb Runas -ArgumentList $arg -ErrorAction "stop"  
            } 
            catch 
            { 
                Write-Warning "Error - Failed to restart script with runas"  
                break
            } 
            exit # Quit this session of powershell 
        }  
    }  
    else
    {  
        Write-Warning "Error - Script must be saved as a .ps1 file first"  
        break  
    }  
} 
Use-RunAs
#####################################################################################
## Add Powershell SharePoint Snapin
Add-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue
#####################################################################################
try
{
	Write-Host "Creating Machine Translation Service and Proxy…"
	$AppPoolName = Get-SPServiceApplicationPool $AppPool
	Get-SPServiceInstance | ? {$_.GetType().Name -eq $MTSInst} | Start-SPServiceInstance
	$MTS = New-SPTranslationServiceApplication -Name $MTSName -ApplicationPool $AppPoolName -DatabaseName $MTSDB
	$MTSProxy = New-SPTranslationServiceApplicationProxy –Name "$MTSName Proxy" –ServiceApplication $MTS –DefaultProxyGroup
	Write-Host "Service created correctly"
} 
catch 
{ 
	Write-Output $_  
}

 

Referencias: New-SPTranslationServiceApplication y New-SPTranslationServiceApplicationProxy

SharePoint 2016 IT Preview

sp2016-ignite Microsoft acaba de liberar el producto: SharePoint 2016 IT Preview. Nos encontramos frente a la primera versión de la nueva versión de la plataforma SharePoint.

¿Pero que es lo que nos traerá SharePoint 2016 de nuevo? Esto es lo que nos cuenta Bill Baer, senior technical product manager del equipo de SharePoint:

SharePoint Server 2016 IT Preview ofrece un primer vistazo a un conjunto selecto de las nuevas inversiones en infraestructura que ayudará a definir el alcance, la escalabilidad y la fiabilidad de SharePoint Server 2016. Dado que estamos construyendo SharePoint Server 2016 en la misma plataforma básica para SharePoint Online, no se sorprenda de ver similitudes entre los dos. SharePoint Server 2016 abre nuevas experiencias de usuario intuitivas, pero familiar. Para profesionales de TI, ofrece un mejor rendimiento y escalabilidad con la gestión simplificada. Y para los desarrolladores, ofrece una oportunidad para construir soluciones en la nube o bien en entornos on-premise (mayor integración con Azure).

Han mejorado las capacidades de aprovisionamiento para ayudar a departamentos de IT y a proveedores de servicios de hosting maximizando las inversiones existentes en infraestructura, explorando nuevos servicios, mejorando la gestión y dando una mayor disponibilidad a través de una arquitectura mejorada la instalación basada en papel.

El lanzador de la aplicación (App Launcher) proporciona una nueva experiencia de navegación donde todas tus aplicaciones son fácilmente disponibles en la barra de navegación superior. Rápidamente puede iniciar su aplicación, navegar por sitios y acceder a sus archivos personales.

Basado en nuestras inversiones en SharePoint Online y OneDrive para Empresas, SharePoint Server 2016 mejoran los controles para trabajar con archivos y contenido, simplificando la experiencia de de usuario para la creación de archivos, uso compartido y administración.

Ha cambiado el mundo de la colaboración, y archivos basados en texto se están siendo desplazados por medios de comunicación modernos: vídeos, audio y demás formatos. SharePoint Server 2016 proporciona soporte para subir archivos hasta 10GB.

Lo que estamos compartiendo hoy en día es sólo una fracción de lo que será en 2016 SharePoint!

Aquí tenéis un vídeo para ir entrando en materia…

 

Podeis descargaros SharePoint 2016 IT Preview de la pagina de Microsoft: https://www.microsoft.com/en-us/download/details.aspx?id=48712

 

Windows 10 – Activar el Modo Dios

Win10 Con el Modo Dios, tendremos una serie de posibilidades de configuración y personalización de Windows 10 que se verán incrementadas. Pero ¿que es el Modo Dios? únicamente se trata de tener unificados en una pantalla todas las opciones de configuración y administración del sistemas operativo, a un simple click.

Como activar el Modo Dios:

1) Iniciamos sesión en Windows 10 con la cuenta principal –privilegios de administrador–

 

2) Sobre el escritorio pulsamos el botón derecho del ratón y seleccionamos Nuevo y Carpeta

 

3) Ponemos el siguiente nombre a la carpeta:

Modo Dios.{ED7BA470-8E54-465E-825C-99712043E01C}

 

4) El icono de la carpeta creada cambiará automáticamente y también el nombre por el de Modo Dios.

Windows-10-Modo-Dios

Workflows en correos entrantes en Biblioteca de Documentos de SharePoint 2010

sharepoint2010 Una de las ultimas cosas con la que me he pegado, es saber por que los Workflows de una biblioteca de documentos, no se lanzaban, en el caso únicamente de añadir documentos a través de email.

Para el que no lo sepa, SharePoint 2010 incluye la funcionalidad de poder añadir información a una biblioteca de documentos, a través de email, es decir: si quieres añadir un archivo concreto a una librería y no puedes acceder al entorno de SharePoint, siempre tienes la posibilidad de enviar un email con dicho archivo, a una cuenta en concreto (esto debes haberlo configurado previamente).

declarativeworkflow

Volviendo al problema, tengo una biblioteca de documentos, donde hay un workflow personalizado, el cual se lanza cuando se añade un elemento. Esto funciona correctamente, si subes el documento a través del interface web o usando el explorador (mediante el protocolo WebDav)… pero cuando se suben a través de email, el workflow no se lanza!!!

Buceando en Internet, he visto que para habilitar esto, tiene que estar activa la propiedad “DeclarativeWorkflowAutoStartOnEmailEnabled“.

Como es habitual, esto puede hacerse usando bien STSADM o PowerShell, únicamente indicar, que los comandos a través de STSADM desde la versión de SharePoint 2007 no denegrían utilizarse (esta marcado como deprecated), Microsoft te recomienda el uso de PowerShell.

Procedimiento con STSADM:

1) Primero debemos verificar si este parámetro se encuentra activo o no, para ello lanzamos el siguiente comando:

stsadm -o getproperty -pn declarativeworkflowautostartonemailenabled

2) Verificamos el valor de la propiedad “Value” y en el caso que sea “no” deberíamos activarlo

declarativeworkflow1

3) Para activarlo ejecutamos el siguiente comando:

stsadm -o setproperty -pn declarativeworkflowautostartonemailenabled -pv true

declarativeworkflow2

Procedimiento con PowerShell:

1) Primero debemos verificar si este parámetro se encuentra activo o no, para ello lanzamos el siguiente comando:

$spWebService = [Microsoft.SharePoint.Administration.SPWebService]::ContentService
$spWebService.DeclarativeWorkflowAutoStartOnEmailEnabled

2) Verificamos el valor que devuelve y en el caso que sea “False” deberíamos activarlo
3) Para activarlo ejecutamos el siguiente comando:

$spWebService = [Microsoft.SharePoint.Administration.SPWebService]::ContentService
$spWebService.DeclarativeWorkflowAutoStartOnEmailEnabled = $true
$spWebService.Update()

Puedes consultar mas información sobre la propiedad DeclarativeWorkflowAutostartOnEmailEnabled aquí.

 

Shrink todas las bases de datos de un servidor de una manera rapida en SQL Server

SqlServer1En mis maquinas virtuales de desarrollo de SharePoint 2010, muchas veces me encuentro con que, el tamaño de las bases de datos SQL Server de SharePoint se ha disparado y me estoy quedando sin espacio.

Para reducir el tamaño de las bases de datos, normalmente lo que suelo hacer es un shrink (procedimiento almacenado para reducir el tamaño de los archivos de datos y de registro de la base de datos especificada).

Aunque he leído varios posts en los que no se aconseja eliminar esta información en entornos SharePoint, aquí os dejo un articulo interesante de Microsoft sobre el mantenimiento de bases de datos SharePoint 2010: Database maintenance for SharePoint 2010 Products, donde comentan el correcto uso de este comando.

Volviendo a la cuestión que nos atañe… Para poder liberar de una forma cómoda y sencilla, espacio de todas la bases de datos de una instancia de SQL server, has de ejecutar esta sentencia SQL:

declare @db varchar(255)
declare cur cursor for
select name from sys.databases where is_read_only=0 and state=0
  and name not in ('master','model','tempdb','msdb')
open cur
fetch cur into @db
while @@fetch_status=0
begin
  exec SP_dboption @db,'trunc. log on chkpt.','true' 
  DBCC shrinkdatabase (@db)
  fetch next from c into @db
end
close cur
deallocate cur

 

Este script lo que hace es lo siguiente: obtener una lista de todas las bases de datos (exceptuando las del sistema: master, model, tempdb y msdb), posteriormente establece la base de datos en ReadOnly y luego reducir el tamaño del archivo.

El resultado es el siguiente, donde te informa el tamaño inicial y el resultante:

shrink

 

Script de PowerShell para rellenar una lista de SharePoint con elementos

powershell Este ejemplo es válido tanto para plataformas SharePoint 2010 como SharePoint 2013. Viene motivado por la necesidad de probar los limites del producto en cuanto a vistas de listas se refiere.

Tanto la versión 2010 como 2013 tienen los mismos limites en cuanto a listas/bibliotecas se refiere en cuanto a:

  • Numero de elementos por lista: 30.000.000
  • Limitación de vista de lista: 5000 elementos
  • Tamaño de filas de lista: 8.000 bytes por fila

Viendo estas limitaciones, aquí tenéis un script de PowerShell con el que podréis añadir de forma automática miles de elementos en una lista:

[System.Reflection.Assembly]::LoadWithPartialName(”Microsoft.SharePoint”)
function PopulateList
{
    param ($ListURL, $count)
    $mySite = new-object Microsoft.SharePoint.SPSite($ListURL)
    $myWeb = $mySite.OpenWeb()
    $mySrcList = $myWeb.GetList($ListURL)
    $itemCount=0
    write-host "Preparando la lista para la carga de datos: " $ListURL
    write-host "-----------------------------------------------------------------"
    while ($itemCount -lt $count)
    {
        $itemCount=$itemCount+1
        write-host "Creando elemento:" $itemCount
        $listItem = $mySrcList.Items.Add()
        $title="Titulo del elemento " + $itemCount
        $listItem["Title"]=$title
        $listItem.Update()
    }
    $myweb.Dispose()
    $mySite.Dispose()
}
#---------------------------------------------------------------
#Para usar este función solo tienes que llamarla pasando como parámetro la lista y el numero de elementos a crear
$sitecollection="http://intranet/sitio/Lists/listaPrueba/"
PopulateList $sitecollection 6000
#---------------------------------------------------------------

 

Hay que destacar, que la lista (como requisito) unicamente ha de tener el campo “Titulo” (campo por defecto en listas que hereden del tipo de contenido “Elemento”), único campo que rellena el script.

 

Ejecutar aplicacion de escritorio como Administrador

microsoft-logo Una de las cosas que he necesitado hacer, y que nunca lo recuerdo, es tener la posibilidad de ejecutar directamente una aplicación como administrador.

Esta claro, que siempre tienes la posibilidad de, utilizando el botón derecho del ratón, seccionar la opción de “Ejecutar como administrador” (como se aprecia en la siguiente imagen)

RunAs

Pero existe veces en los que quieres que tu aplicación, solo permita ejecutarse con permisos de Administrador de la maquina, lo que permite realizar ciertas acciones que de otra forma no podrías. En este caso lo que hay que hacer es añadir un archivo de manifiesto o (app.manifest), donde se especifican múltiples metadatos de la aplicación, entre los que destaca, la seguridad.

Para añadir un archivo app.manifest a nuestra aplicacion, solo tienes que:

  • Aañadir desde Visual Studio, un nuevo archivo del tipo “Archivo de manifiesto de aplicación” como podemos apreciar:

app-manifest

  • Una vez añadido, editamos el archivo y donde aparece:
 

lo modificamos para que sea:

 

 

  • Por ultimo, solo nos queda acceder a las propiedades del proyecto, y dentro de Aplicación, seleccionar el archivo de manifiesto que hemos añadido:

app-manifest_2

Así la próxima vez que ejecutes la aplicación, solicitará credenciales de Administrador.

Referencia: Assembly Manifest