martes, 25 de septiembre de 2012

Lync 2010: No se pudo realizar una operación de Active Directory

He estado esta mañana levantando un servidor de Lync 2010 y al dar de alta los usuarios me aparecía un error muy feo que venia a decirme:
No se pudo realizar una operación de Active Directory en "****.***". No se puede repetir la operación "Los derechos de acceso son onsuficientes para realizar la operación" 00002098: SecErr: DSID-03150BC1, problem 4003 (INSUFF_ACCESS_RIGHTS), data 0"

Al parecer suele pasar con los usuarios del grupo de administradores, la solución muy simple.
Vamos a la consola del directorio activo y habilitamos las características avanzadas en el menú "VER"
En el usuario que nos falle entramos en la pestaña seguridad y en Opciones Avanzadas habilitamos el botón de permitir herencia.

Probadlo y me contáis .
Un Saludo.

martes, 11 de septiembre de 2012

Cisco VPN:"failed to enable virtual adapter" en Windows 8

Buenos días.
Como buen probador de Windows 8 ( Con el que estoy bastante satisfecho) , hoy me he encontrado con un problema al intentar instalar el cliente VPN de Cisco . Al intentar levantar una conexión me aparecía un error muy feo.

"failed to enable virtual adapter"

Me he puesto a investigar un poco ,por si era un problema de compatibilidad con el sistema operativo y he encontrado una solución muy simple.

Paso 1:
Abrir REGEDIT

-Pulsamos Win+R o buscamos el botón de ejecutar.
-Escribimos REGEDIT

Paso 2:

Buscamos la entrada

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CVirtA y en la entrada
"Display Name" tenemos que cambiar su valor.

  • Para 32 bits, "Cisco Systems VPN Adapter”
  • Para 64 bits,"Cisco Systems VPN Adapter for 64-bit Windows"

  • Y listo, no hace falta ni reiniciar el cliente ni el equipo.

    Espero que os sirca

    martes, 24 de mayo de 2011

    No se puede cargar el archivo C:\Fichero.ps1 porque en el sistema está deshabilitada la ejecución de scripts.

    Buenos Días de nuevo.

    Intentando programar unas tareas de Powershell en unos servidores nuevos me
    ha aparecido el siguiente mensaje de error.

    No se puede cargar el archivo C:\Fichero.ps1 porque en el sistema está
    deshabilitada la ejecución de scripts. Vea “get-help about_signing” para
    obtener más información.

    Y la verdad es que no me acordaba del significado, parece trivial, pero la
    memoria a veces falla.

    Por defecto la ejecución de scripts viene deshabilitada en Windows 2008, por
    motivos de seguridad, así que os voy a dar la receta para solucionarlo.

    Abrimos Powershell como "administrador" (Muy importante porque
    vamos a tocar claves de registro).

    Ejecutamos Get-ExecutionPolicy

    Si nos devuelve Restricted, este es nuestro problema.

    Ejecutamos:

    Set-ExecutionPolicy Unrestricted

    Y ya lo tendríamos habilitado.

    Volvemos a ejecutar Get-ExecutionPolicy y nos debería devolver Unrestricted.

    Ya tenemos habilitada la ejecución de Scripts.

    Un Saludo



    lunes, 23 de mayo de 2011

    Listar ficheros y tamaños de SQL SERVER

    Buenas Tardes a todos ,
    Os voy a compartir un procedimiento almacenado que lista todos los ficheros de todas las bases de datos que tenemos y nos dirá su tamaño y su nivel de ocupación.

    Es relativamente simple utilizando el comando sp_msforeachdb , pero me ha parecido interesante compartirlo con todos vosotros.

    Lo dejará en una tabla en tempdb llamada ocupacion que podremos consultar.

    SET ANSI_NULLS ONGO

    SET QUOTED_IDENTIFIER ON

    GO

    CREATE PROCEDURE  [dbo].[ocupacions] as

    IF EXISTS (SELECT * FROM tempdb.sys.objects WHERE name = ('ocupacion') AND type in (N'U'))
     
    drop table tempdb.dbo.ocupacion
     
    CREATE TABLE tempdb.dbo.ocupacion(
     
    [name] [varchar](256) NULL,

    [Filename] [varchar](256) NULL,

    [size] [int] NULL,

    [usedspace] [int] NULL,

    [id] [int] NULL,

    ) ON [PRIMARY]

    EXECUTE sp_msforeachdb 'USE  [?]

    insert into tempdb.dbo.ocupacion SELECT

    DB_NAME() AS [Name],

    s.physical_name AS [FileName],

    s.size * CONVERT(float,8) AS [Size],

    CAST(FILEPROPERTY(s.name, ''SpaceUsed'') AS float)* CONVERT(float,8) AS [usedspace],

    s.file_id AS [ID]

    FROM

    sys.master_files AS s

    WHERE

    (s.type = 1 and s.database_id = db_id())

    ORDER BY

    [ID] ASC'
    EXECUTE sp_msforeachdb 'USE  [?]

    create table #tmpspc (Fileid int, FileGroup int, TotalExtents int, UsedExtents int, Name sysname, FileName nchar(520))

    insert #tmpspc EXEC (''dbcc showfilestats'')

    insert into tempdb.dbo.ocupacion SELECT 
    s.name AS [Name],

    s.physical_name AS [FileName],

    s.size * CONVERT(float,8) AS [Size],

    CAST(tspc.UsedExtents*convert(float,64) AS float) AS [UsedSpace],

    s.file_id AS [ID]

    FROM

    sys.filegroups AS g

    INNER JOIN sys.master_files AS s ON (s.type = 0 and s.database_id = db_id() and (s.drop_lsn IS NULL)) AND (s.data_space_id=g.data_space_id)

    LEFT OUTER JOIN #tmpspc tspc ON tspc.Fileid = s.file_id

    ORDER BY

    [ID] ASC

    DROP TABLE #tmpspc'
    GO
    EXEC [dbo].[ocupacion]
    SELECT * FROM tempdb.dbo.Ocupacion
     


    martes, 17 de mayo de 2011

    Aparecer en busquedas de Google,Bing y Yahoo.

    Muy Buenos Días.

    Buscando como hacer para que este nuevo blog aparezca en los buscadores me he interesado un poquito en el tema y la verdad es que es curioso.

    Si no apareces en Google o Bing o Yahoo no eres nadie y a veces es mejor animarles a que te encuentren de manera que os paso unas direcciones donde dar de alta vuestra web y empezar a aparecer en las busquedas.
    Google:
    http://www.google.com/addurl/?continue=/addurl
    Bing:
    http://www.bing.com/webmaster/SubmitSitePage.aspx
    Yahoo:
    https://siteexplorer.search.yahoo.com/submit

    Yahoo y Bing piden que te conectes con una cuenta de usuario para dar de alta vuestra URL.

    Espero que os resulte útil.
    Un Saludo.

    Correo entrante en Sharepoint sin SMTP - Parte 2.

    Saludos a todos .
    Viendo la solución me han surgido dudas con respecto al tema de reflejar la fecha en los correos entrantes.
    Sharepoint cuando recoje los correos de la carpeta de correo entrante utiliza el Subject para dar el nombre a la entrada en la biblioteca, ignorando el nombre del fichero y marcando como fecha y hora la que tiene en el momento de la recogida, no la original del envio.

    Si queremos reflejar de alguna manera este dato, podemos añadirlo al comienzo del nombre con esta modificación del Script Original.



    Set-ExecutionPolicy RemoteSigned -force
    import-module messageops-exchange
    $path = "c:\CARPETA TEMPORAL"
    $path2= "C:\CARPETA DONDE SHAREPOINT RECOGE CORREO"
    $apppath="C:\CARPETA DONDE INSTALAS TODO"
    cd $apppath
    $Inbox="\\bandeja de entrada"
    import-module ./messageops-exchange.psd1
    $user = "TUDIRECCION@TUEMPRESA.COM"
    $ewsProfile = New-MessageOps.EWSProfile -usedefaultcredentials 1 -id $user/*captura usuario actual*/
    $ItemCollection = Get-MessageOps.Messages -p $ewsprofile -fp $inbox  -messagecount 1 -fulldetails $true
    /*recoge  un correo*/
    if ($itemcollection.sender.address -ne $null)
    {
    if ($itemcollection.subject -eq $null) /*si no tiene asunto se le añade como título “Sin Asunto”*/
    {$name = "Sin Asunto"}
    else
    {$name = $itemcollection.subject -replace(':',' ') }/* Eliminamos caracteres especiales que puedan provocar error en el asunto error*/
    $name = $name -replace("`""," ")
    $name = $name.replace("\"," ")
    $name = $name.replace('+',' ')
    $name = $name.replace('*',' ')
    $name = $name.replace('?',' ')
    $name = $name.replace('=',' ')
    $name = $name.replace('-',' ')
    $name = $name.replace('[',' ') 
    $name = $name.replace(']',' ')
    $name = $name.replace('''',' ')
    $sender = "x-sender: " + $itemcollection.sender.address /* añadimos cabeceras para SharePoint*/
    $receiver = "x-receiver: " + $itemcollection.receivedby.address/* añadimos cabezeras para SharePoint*/
    $file =$path + $name + ".eml" /*Construimos el nombre del fichero con el asunto*/
    Export-MessageOps.MessageToEml -EWSProfile $ewsprofile -ewsid $itemcollection.id  -filename $file
    add-content ($path +"temp.eml") $sender
    add-content ($path + "temp.eml") $receiver
    $texto =  get-content $file
    add-content ($path + "temp.eml")  $texto
    del $file /* borramos el fichero si existe  en la carpeta de destino*/
    $temp = Get-Content ($path +"temp.eml")  | Foreach-Object { $_ -replace ("Subject:", ("Subject: " + $date + " ")) }  /* buscamos la cadena de texto Subject y le añadimos la fecha original*/
    add-content $file $temp /*salvamos el fichero en el destino final*/
    del ($path + "temp.eml")  /*Borramos el fichero temporal*/
    Remove-MessageOps.Message -ewsid $itemcollection.id -ewsprofile $ewsprofile /*borramos el correo del buzón.*/
    }
    Como siempre se dice en estos casos, esto es un ejemplo, no lo uséis en producción, probarlo y reprobarlo antes de hacer uso de él.

    Saludos a todos.

    martes, 10 de mayo de 2011

    Primer Plato: Correo entrante en sharepoint sin SMTP.

    En los últimos días me ha tocado lidiar con un problema, no tan extraño, pero a la vez poco documentado.

    Os comento, tengo una granja de SharePoint 2007, sobre Windows 2008 y no tengo posibilidad de redirigir un conector Smtp desde Exchange, en mi caso 2010.

    Tras mucho buscar he encontrado recursos para montar una solución domestica para este proceso, la solución:
    POWERSHELL.

    Desde luego no es la opción que hubiese elegido para realizar esta conexión, pero ha resultado tremendamente efectiva. Descargo los ficheros con formato .eml con sus adjuntos y me permite añadir las cabeceras x-sender y x-receiver.

    Comencemos.

    Para empezar he instalado las herramientas de administración de Exchange, desde el DVD de instalación, en el servidor donde quería recibir los correos.

    A continuación encontré un kit de herramientas para Exchange, gratuito por supuesto en MessageOps.
    Una gente muy maja a la que le agradezco encarecidamente este Kit.
    Lo descomprimimos en una carpeta que será donde guardemos nuestro script.

    Por otro lado descargue la Api de los Web services de Exchange.

    Ya tenemos todos los ingredientes.
    -Instalamos el Api de Exchange.
    -Descomprimimos el kit de messageops a una carpeta y abrimos la shell de Exchange como administrador y ejecutamos el script 
    .\install-module.ps1 del kit.

    Ahora comprobamos como en la carpeta
    C:\Users\usuario\Documents\WindowsPowerShell\Modules\MessageOps-Exchange
    Tenemos tres ficheros:
    MessageOps-Exchange.psd1
    MessageOps-Exchange-Powershell-Module.dll
    Microsoft.Exchange.WebServices.dll
    Si no los tenéis podéis copiarlos manualmente.

    Ahora viene la parte crítica de la solución. EL SCRIPT.

    Set-ExecutionPolicy RemoteSigned -force
    import-module messageops-exchange
    $path = "c:\CARPETA TEMPORAL"
    $path2= "C:\CARPETA DONDE SHAREPOINT RECOGE CORREO"
    $apppath="C:\CARPETA DONDE INSTALAS TODO"
    cd $apppath
    $Inbox="\\bandeja de entrada"
    import-module ./messageops-exchange.psd1
    $user = "TUDIRECCION@TUEMPRESA.COM"
    $ewsProfile = New-MessageOps.EWSProfile -usedefaultcredentials 1 -id $user/*captura usuario actual*/
    $ItemCollection = Get-MessageOps.Messages -p $ewsprofile -fp $inbox  -messagecount 1 -fulldetails $true
    /*recoge  un correo*/
    if ($itemcollection.sender.address -ne $null)
    {
    if ($itemcollection.subject -eq $null) /*si no tiene asunto se le añade como título “Sin Asunto”*/
    {$name = "Sin Asunto"}
    else
    {$name = $itemcollection.subject -replace(':',' ') }/* Eliminamos caracteres especiales que puedan provocar error en el asunto error*/
    $name = $name -replace("`""," ")
    $name = $name.replace("\"," ")
    $name = $name.replace('+',' ')
    $name = $name.replace('*',' ')
    $name = $name.replace('?',' ')
    $name = $name.replace('=',' ')
    $name = $name.replace('-',' ')
    $name = $name.replace('[',' ') 
    $name = $name.replace(']',' ')
    $name = $name.replace('''',' ')
    $sender = "x-sender: " + $itemcollection.sender.address /* añadimos cabeceras para SharePoint*/
    $receiver = "x-receiver: " + $itemcollection.receivedby.address/* añadimos cabezeras para SharePoint*/
    $file =$path + $name + ".eml" /*Construimos el nombre del fichero con el asunto*/
    Export-MessageOps.MessageToEml -EWSProfile $ewsprofile -ewsid $itemcollection.id  -filename $file
    add-content ($path +"temp.eml") $sender
    add-content ($path + "temp.eml") $receiver
    $texto =  get-content $file
    add-content ($path + "temp.eml")  $texto
    del $file /* borramos el fichero si existe */
    ren ($path +"temp.eml") $file /*renombramos el fichero */
    MOVE $file $path2  /*se mueve a la carpeta de SharePoint*/
    Remove-MessageOps.Message -ewsid $itemcollection.id -ewsprofile $ewsprofile /*borramos el correo del buzón.*/
    }

    Para ejecutarlo tendréis que eliminar todos los comentarios.
    Salvamos el fichero con extensión ps1.

    Lo guardaremos en la carpeta donde descomprimimos messageops.

    Por últimos, como programar la ejecución. Pues muy simple desde el programador de tareas ponemos en acciones la siguiente línea.

    c:\windows\system32\windowspowershell\v1.0\powershell "C:\ruta\correo.ps1"

    Y elegimos la programación que deseemos, 
    Nota: El script se descarga únicamente un correo cada vez, por lo que recomiendo ejecutarlo cada poco tiempo.

    Como siempre se dice en estos casos, esto es un ejemplo, no lo uséis en producción, probarlo y reprobarlo antes de hacer uso de él.

    Dejo para otra ocasión el desarrollo que hice hace tiempo para conectar con servidores de Exchange 2003.

    Un Saludo.

    Agradecimientos: