Directivas y Preferencias

Si leemos GPMC, herramienta principal de creación de Directivas.

Una GPO es un objeto que contiene la configuración de valores que queremos aplicar a usuarios y/o equipos. En español, Directiva de Grupo.

Un Link de Directiva de Grupo es lo que enlaza la directiva a la parte del entorno de AD donde queremos aplicarla. Referido a su ámbito, en el que hay tres niveles donde las aplicamos: Sitios, dominios y OUs.

El Editor de Directivas de grupo es la herramienta que se utiliza para modificar los valores de las directivas, y los valores disponibles se basan en las plantillas administrativas disponibles y cargadas.

Los archivos ADMX tienen dos propósitos. El primero es definir los valores y la ubicación de configuración (en el equipo local) para aquéllos. La segunda es crear el interfaz que usamos para las modificaciones desde el Editor.

Las PREFERENCIAS proporcionan una alternativa para trabajar con imágenes en toda la organización y administrar valores que no se han configurado antes en una GPO. Inicialmente esta configuración establecida por el administrador del sistema refleja un estado predeterminado del sistema operativo y, estos valores no son obligatorios necesariamente.

Cuando hablamos de RSOP nos referimos al conjunto resultante de configuración de Directivas de Grupo aplicadas al finalizar completamente su proceso. Podría ser una combinación de varios niveles de Directivas.

Directivas vs Preferencias

Dos son las formas de configurar sistemas, las Directivas y las Preferencias. Ambas pueden modificar los objetos equipo y usuario, sin embargo la razón de su uso es muy diferente. La más importancia su obligatoriedad, las Directivas lo son, mientras que las Preferencias no lo son estrictamente.

Directivas:

Los valores e interfaz se basan en plantillas administrativas. Realizan cambios en el Registro según las indicaciones de la plantilla. Hay secciones especiales de las ramas del Registro que se controlan mediante Directivas, conocidas como las verdaderas. En caso de valores de Equipo:

    • HKEY_LOCAL_MACHINESOFTWAREpolicies
    • HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionpolicies

y para el Usuario:

    • HKEY_CURRENT_USERSOFTWAREpolicies
    • HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionpolicies

Cada vez que el sistema procesa una Directiva y obtiene el RSOP, estas ramas del Registro (claves y valores) son borrados y reescritos con la nueva RSOP. Esto pasa sólo en la medida que una Directiva de grupo válida se sigue aplicando al equipo o usuario.

Finalmente, podemos crear nuestros propios valores de Directiva modificando una de las plantillas administrativas existentes o creando una nueva. Esto nos permite trabajar con el Registro completo (exceptúando las ramas mencionadas antes). Sin embargo, es muy importante advertir que estos valores tatuarán el Registro. En otras palabras, los valores quedarán establecidos permanentemente hasta que específicamente los revertamos en la Directiva. Esto significa que si eliminamos nuestra Directiva, este tipo de valores no desaparecen y debemos revertirlos a mano.

Preferencias:

Introducidas desde MS Windows 2008, nos proporcionan una alternativa al uso de scripts para realizar tareas comunes. Estas tareas, en todo caso, no eran fáciles de hacer en las Directivas. Las preferencias nos permiten ahora modificar valores del Registro Local, grupos y usuarios locales, archivos y carpetas, impresoras, servicios locales, unidades de red, y otros muchos valores locales. Ya que las Preferencias no son obligatorias, los usuarios pueden realizar cambios. Además, son de utilidad para aplicaciones a las que las Directivas no cuenta y valores del sistema. Sin embargo, siempre que un usuario decide cambiar algo, lo más probable es que no disponga del permiso necesario para hacerlo ya que la mayoría de las Preferencias requieren algún tipo de credenciales administrativas.

También podemos aplicar elementos de preferencias individuales mediante el filtrado de Directivas, aunque de forma distinta a las Directivas verdaderas, ya que en las segundas no podemos individualizar valores dentro de la Directiva.

En Windows Server 2008 R2, la edición de Preferencias se ha mejorado.

Veamoslo con un ejemplo:

Hasta ahora, yo mismo usaba un script de vbs para asignar unidades de red e impresoras a los usuarios, por ejemplo –

Dim oNet
Set oNet = CreateObject("WScript.Network")
ONet.MapNetworkDrive "Z:", "\SRVDOMpruebascompartido"
Set WshNetwork = CreateObject("WScript.Network")
PrinterPath = "\SRVDOMpruebashpbusiness"
PrinterDriver = "HP BUSINESS injeck 1000"
WshNetwork.AddWindowsPrinterConnection PrinterPath, PrinterDriver
WshNetwork.SetDefaultPrinter "\SRVDOMpruebashpbusiness"

Una unidad mapeada como Z que apunta al recurso ‘compartido’ y una impresora instalada en SRVDOMpruebas denominada hpbusiness, que ademas se establecía como predeterminada.

Bien, ahora esto podemos hacerlo con una GPP , es decir, Group Policy Preferences o Preferencias de Directiva de Grupo.

Crear una GPP es como crear una GPO, abrimos la consola de Administración de Directivas y vamos con el ejemplo.

  1. Seleccionamos Objetos de Directiva de Grupo, clic derecho y NUEVA, le damos un nombre descriptivo y dejamos el origen como sale.

    newGPOPreferences00newGPOPreferences01
  2. Clic derecho en la nueva directiva y Editar.

    newGPOPreferences02
  3. Unidad de red:

    1. En el editor escogemos la ruta, Configuración de Usuario|Preferencias|Configuración de Windows|Unidades de red, clic derecho, Nueva Unidad y seguimos el asistente.

      newGPOPreferences03
    2. El valor de Acción es lo más importante, cuatro posibilidades:
      1. Crear. La preferencia se configurará si la configuración no existe, por el contrario si ya existe, no se realizará ninguna acción.
      2. Reemplazar. Se elimina y se recrea de nuevo la configuración.
      3. Actualizar. La más poderosa, con ella lo hacemos todo, lo crea si no existe y si existe la actualiza.
      4. Eliminar. Se quita la configuración.

      newGPOPreferences05newGPOPreferences04

    3. Realizada la configuración como queda en la imagen, seguimos con el siguiente paso, configurar a qué usuarios les afectará la preferencia. (En este caso, esta es una de las dos configuraciones que residirán en la misma GPO que se enlazará a los usuarios de una OU, la otra es la impresora.) Para elegir los destinatarios de la OU receptora que pertenecerán al grupo ‘pruebas’.
      1. Pestaña ‘Comunes’.

        newGPOPreferences06
      2. Marcar la casilla ‘Destinatarios de nivel de elemento’.
      3. Pulsar el botón ‘Destinatarios’.
    4. Aquí tenemos el Editor de Destinatarios, vamos a individualizar, en este caso usuarios pero podríamos hacerlo con equipos también.

      1. En este caso los destinatarios son los usuarios del grupo pruebas, Nuevo elemento, grupo de seguridad.

        newGPOPreferences07
        newGPOPreferences08
      2. Pulsamos en el botón y elegimos el grupo.

        newGPOPreferences09
      3. Aceptar para finalizar la configuración.

Aquí ya tenemos la UNIDAD DE RED en Z:, equivalente a la primera parte del script de ejemplo.

Para añadir la impresora realizaremos los mismos pasos, pero esta vez elegiremos Impresora compartida.

newGPOPreferences10 newGPOPreferences11

Y también escogeremos los destinatarios, en este caso por rango de IP.

 newGPOPreferences12

Juansa©2011

PowerSE Professional, editor scripts powershell free.

  powerSE01

Conocida herramienta de edición de scripts de PowerShell de Devfarm Software, Al parecer PowerSE está disponible gratuitamente ahora. PowerSE está diseñada para administradores, con el ánimo de ayudarles en las tareas diarias. PowerSE dispone de todas las características de los editores de gama alta, como remarcar con colores la sintáxis, Intellisense, y tabulación completa, pero lo que lo hace especial es la conjunción perfecta de editor y consola de comandos de PowerShell.

powerSE02

 

 

2008 R2: Automatizando tareas administrativas: Powershell(5)

Copiar y guardar los eventos, y al tiempo limpiar el registro.

Hay que descargarse la extensión Pscx-2.0.0.1.zip desde http://pscx.codeplex.com, y extraerla en el directorio de modulos del usuario: ‘Mis DocumentosWindowsPowerShellModules’, o en el directorio de modulos de PS, valor que devuelve la variable $PSHome desde el ISE, en mi caso:

variablePSHOME

El Script en castellano (más o menos).

<#

   .Sipnosis

    Este script guarda los log de Eventos

   .Descripción

    Se puede ejecutar de forma periódica (regularmente) para el archivo o copia de los log de eventos

    NB, este script los guarda y limpia el registro de eventos, no solamente hace una copia de seguridad.

    El script se ha diseñado con el ánimo de investigar y auditar los log de seguridad.

    De hecho copia los log en memoria, y luego los borra, y entonces los guarda en archivos csv, 

    por ello se recomienda ejecutarlo de forma local o vía PS en remoto.

   .Ejemplo

    .Inicia-copiasegEventLogs.ps1

   .Entradas

    Ninguna

   .Salidas

    Ninguna

   .Notas

    Nombre: Inicia-copiasegEventLogs.ps1

    AUTHOR: Benjamin R Wilkinson

    TRADUCCIÓN y ADAPTACIÓN CASTELLANO: Juansa

    DESARROLLADO: Mediante Windows PowerShell ISE.

    VERSIÓN: 1.0.0

    ULTIMA EDICIÓN: 20/07/2010

    CLAVES: 

   .Link

#>

#Se requiere -Versión 2.0

[CmdletBinding()]

 Param 

   (

    [Parameter(Mandatory=$false,

               ValueFromPipeline=$true,

               ValueFromPipelineByPropertyName=$true)]

    [String]

    $computer = "$ENV:COMPUTERNAME",            

    [ValidateSet("Application", "Security", "System")]

    [Alias("l","log")]

    [String]

    $LogName = "Security",

    #$MinBackupSize = "209715200", # 200MB

    #$MinBackupSize = "204472320", # 195MB

    $MinBackupSize = "1024", # 1MB

    [String]$BackupLocal = "D:COPIALOGS",

    #[String]$Backupremote = "D:COPIALOGS"

    #[String]$Backupremote = "\ADTEST04logsseclogs"

    [String]$Backupremote = "srvpl01COPIALOGS"

   )#End Param

Begin

{

 # El cmdlet para exportar a zip es de: http://pscx.codeplex.com/

 Import-Module PSCX

 Write-Host "Procesando $Logname Logs .. .. Server:"$computer (get-date)

}

Process

{

    $BaseDirLocal = "$BackupLocal{0:yyyy_MM}-Logs" -f [DateTime]::now

    $LogFileName = "{0}-{1:yyyyMMdd_HHmm}-{2}.csv" -f $Computer,[DateTime]::now,$LogName

    $PathLocal = Join-Path -Path $BaseDirLocal -ChildPath $LogFileName

    Write-Host "  + Procesando $LogName Log"

    Write-Host "    - Leyendo $LogName Log"

    

    $Query = "Select * from Win32_NTEventLogFile where LogfileName = '$LogName'"

    if ((Get-WmiObject -Query $Query -ComputerName "localhost").FileSize -gt $MinBackupSize)

       {

        #Guarda los log a un Objeto de PS en memoria

        $SecLogs = get-eventlog -LogName $LogName

        

        #Limpia los log de eventos

        Write-Host "    - Limpiando $LogName Log"

        Clear-EventLog -LogName $LogName

        

        # Se asegura que existe el directorio local

        If(!(Test-Path $BaseDirLocal))

        {

          New-Item $BaseDirLocal -type Directory -force | out-Null

        }

        Write-Host "    - Exportando a CSV"

        

        # Exporta desde la memoria a CSV 

        $SecLogs | ForEach-Object {$RString = $_.ReplacementStrings | ForEach-Object {$_}

        $Hash = @{             

        EventID       =$_.EventID

        MachineName   =$_.MachineName

        Category      =$_.Category

        CategoryNumber=$_.CategoryNumber

        EntryType     =$_.EntryType

        ReplStrings   ="$RString"

        TimeGenerated =$_.TimeGenerated

        UserName      =$_.UserName}

        New-Object PSObject -Property $Hash

        } | Export-Csv -Path $PathLocal -NoTypeInformation

        Write-Host "    - exportación a CSV completada"

        

        # Empaquetar en Zip

        Write-Host "    - Empaquetando Zip"

        $ZipLogArchiveFile = Get-ChildItem $PathLocal | write-zip -level 9

        if (Test-Path -Path $ZipLogArchiveFile)

        {

         Remove-Item -Path $PathLocal

        }

        

        # Copia los Log/CSV a carpeta compartida

        $BaseDirRemote = "$Backupremote{0:yyyy_MM}-Logs" -f [DateTime]::now

        If(!(Test-Path -Path $BaseDirRemote))

        {

          New-Item $BaseDirRemote -type Directory -force | out-Null

        }

        

        # Elimina el archivo anterior

        If(Test-Path -Path $BaseDirLocal)

        {

          # Mueve todos los archivos desde el directorio local y lo limpia

          Write-Host "    - Archivando en Zip:"$ZipLogArchiveFile.Name

          Move-Item "$BaseDirLocal*.zip" -Destination $BaseDirRemote -Force

          Remove-Item -Path $BaseDirLocal

        }

       }

    else

       {

        $Skip = $True

       }    

}

End

{

 if (!$Skip)

    {

     $Msg = "Proceso de $LogName log completado, hay {0} logs exportados." -f $SecLogs.count

     $Msg2 = "Logs guardados a {0}{1}" -f $BaseDirRemote, $ZipLogArchiveFile.Name

     Write-Host $Msg

     Write-Host $Msg2

     (get-date)

    }

 else

    {

     Write-Host "El tamaño de los Log es menor de $($MinBackupSize/1MB) MB, no se realizan cambios" 

    }

$Skip = $Null

}

limpiasecuritylog

Este scrip nos sirve para vaciar los logs. En el ejemplo lo hace con el de seguridad, pero podemos cambiar el valor de la variable $LogName a Application o System.

Por supuesto hay otras variables a explicar:

$LogName Security, Application o Security

$MinBackupSize Tamaño mínimo del registro de Seguridad, Aplicación o Sistema para realizar la copia, guardado y limpieza.

$BackupLocal Directorio local donde se vuelca la info a archivos CSV que serán empaquetados en zip y eliminados de dicho directorio (temporal)

$BackupRemote Directorio donde se guarda el zip empaquetado con el CSV.