Como obtener el nombre del dominio de NetBios de un equipo en .NET

Para poder obtener información de netbios nos vamos a tener que meter en código de bastante bajo nivel por lo que para poder usarlo en .NET vamos a recurrir a las pinvoke

    using System.Runtime.InteropServices;
    using System.ComponentModel;

    public class NetUtil
    {
        [DllImport("netapi32.dll", CharSet = CharSet.Auto)]
        static extern int NetWkstaGetInfo(string server,
            int level,
            out IntPtr info);

        [DllImport("netapi32.dll")]
        static extern int NetApiBufferFree(IntPtr pBuf);

        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
        class WKSTA_INFO_100
        {
            public int wki100_platform_id;
            [MarshalAs(UnmanagedType.LPWStr)]
            public string wki100_computername;
            [MarshalAs(UnmanagedType.LPWStr)]
            public string wki100_langroup;
            public int wki100_ver_major;
            public int wki100_ver_minor;
        }

        public static string GetMachineNetBiosDomain()
        {
            IntPtr pBuffer = IntPtr.Zero;

            WKSTA_INFO_100 info;
            int retval = NetWkstaGetInfo(null, 100, out pBuffer);
            if (retval != 0)
                throw new Win32Exception(retval);

            info = (WKSTA_INFO_100)Marshal.PtrToStructure(pBuffer, typeof(WKSTA_INFO_100));
            string domainName = info.wki100_langroup;
            NetApiBufferFree(pBuffer);
            return domainName;
        }
    }

Tras colocar el código anterior en una clase de nuestro proyecto ya podremos obtener el dominio usando:

   NetUtil.GetMachineNetBiosDomain()

Como cambiar o borrar una columna marcada como «sealed» en sharepoint

Si tienes en tu Sharepoint una columna marcada como «sealed» veras que no puedes ni borrarla ni cambiarla (ni por código ni en modo visual).

Para lograr nuestro objetivo recurriremos a PowerShell. Por que en nuestra consola de «Windows PowerShell ISE» vamos a escribir los siguientes comandos:

if ( (Get-PSSnapin -Name Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue) -eq $null ) {
    Add-PSSnapin Microsoft.SharePoint.Powershell
}

function RemoveSealedFlag([string]$siteUrl, [string]$columnGuid) {
$site = Get-SPSite $siteUrl
$web = $site.RootWeb
$wfield = $web.Fields[[System.Guid]$columnGuid]
$wfield.Sealed = $false
$wfield.Update()
$web.Update()
}

Ahora bastara con llamar al método RemoveSealedFlag para desmarcar la propiedad y de esta forma ya poder borrarlo o editarlo.

Como traducir una plantilla de wordpress

Si te has bajado una nueva plantilla de wordpress pero no te gusta que algunas partes salgan en ingles (por decir algo, pero puede ser alemán, italiano, etc…) entonces tienes dos soluciones:

1. Mirar por google a ver si alguien ya ha traducido la plantilla que usas (las que vienen por defecto, si buscas, ya las encontraras traducidas)

2. Realizar tu propia traducción, de lo que te puedes valer de ese amigo que ha estudiado filología inglesa y que siempre te engaña para que le repares su PC. Es el momento de devolverle la jugada.

Aquí te voy a enseñar que necesitas para realizar la opción 2, aunque la parte de engañar a tu amigo te la dejo a ti.

Sigue leyendo

Obtener el hostname y el dominio en .NET

Obtener el hostname y el dominio usando el lenguaje .NET y más concretamente C# es sencillo, no requiere de funciones complejas ni nada por el estilo.

Obtener el hostname:

El hostname se puede obtener con tan solo una linea, «System.Environment.MachineName» nos devolverá el nombre de la máquina donde se ejecuta.

Obtener el dominio o el grupo de trabajo:

Antes de nada debemos comprobar que nuestro proyecto tiene agregadas las referencias a System.Management, en caso negativo tenemos que agregarlas. Una vez que ya tengamos las referencias bien metidas hacemos lo siguiente:

System.Management.SelectQuery query = new System.Management.SelectQuery("Win32_ComputerSystem");
System.Management.ManagementObjectSearcher searcher = new System.Management.ManagementObjectSearcher(query);
 foreach (System.Management.ManagementObject mo in searcher.Get())
 {
  string Dominio = mo["domain"] as string;
 }

En la variable Dominio ya tendremos guardado el valor que actualmente tenga la máquina donde se ejecuta.