martes, 8 de septiembre de 2015

Windows 7 no arranca tras la instalación en Hyper-v

Si tras instalar windows 7 en un Hyper-v no os arranca:

Parece que la instalación tiene problemas para escribir el arranque del disco correctamente durante el proceso de instalación.
  1. Arrancar con el CD de Windows
  2. Entrar en modo recovery
  3. ejecutar bootsect.exe /nt60 c: /force
  4. Reinciar. 
/nt60 escribe el código de arranque <unidad> /force desmonta el volumen de manera forzada y escribe el código de arranque aunque no tenga acceso exclusivo en el siguiente reinicio.

viernes, 4 de septiembre de 2015

Type Accelerators en powershell (o como leer datos de directorio activo sin usar cmdlets del módulo de AD)

Powershell cuenta con los type accelerators, ¿Qué es un type accelerator? en realidad no es más que un alias que nos permite llamar de forma muy facil a clases del framework de .net
 
LA lista de estos es bastante larga, para listar todos los Type Acceleratos que tenemos a nuestra disposición:

[psobject].Assembly.GetType("System.Management.Automation.TypeAccelerators")::get

Uno de los más interesantes es  [adsisearcher] que nos permite hacer búsquedas en el directorio activo sin usar cmdlets de otros módulos.

Un ejemplo:
             
function Get-DomainUser {
    PARAM($SamAccountname)
    $Search = [adsisearcher]"(&(objectCategory=person)(objectClass=User)(samaccountname=$SamAccountname))"
    foreach ($user in $($Search.FindAll())){
        New-Object -TypeName PSObject -Property @{
            "DisplayName" = $user.properties.displayname
            "Description" = $user.properties.description}
    }
}
 
 

martes, 1 de septiembre de 2015

Uso de contadores de perfmon con Zabbix en servidores con diversos idiomas

Hay empresas con la mala costumbre de no tener sus servidores en el idioma de Shakespeare, cuando eso ocurre y llegas con tus flamantes plantillas de Zabbix te das cuenta de que no puedes leer ni un solo contador.

Los contadores de Perfmon usan un índice numérico de forma interna, pero una descripción de cara a los usuarios que usan el perfmon. Por ejemplo:

Si queremos leer el contador perf_counter[\System\File Write Bytes/sec] nos encontramos que en castellano será perf_counter[\Sistema\Operaciones de escritura de archivo/s]

Para encontrar la relación numérica nos iremos a la clave de registro:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib

 La clave 009 es la relación entre el número de los contadores de perfmon y su nombre "humano", si la abrimos encontramos:
La clave 00A es la relación es lo mismo pero para el idioma castellano. Con esto ahora tenemos toda la información para usar la clave con números, de forma que sera "language-insensitive" ;)

perf_counter[\System\File Write Bytes/sec]  >>  perf_counter[\2\18]

lunes, 31 de agosto de 2015

¿Hay forma de que los pc’s se descarguen el cliente de SCCM desde un distribution point concreto?


Cuando estamos definiendo la arquitectura de nuestro SCCM en entornos donde tenemos una sede central y diferentes edificios diseminados geográficamente, una de las tendencias en cuanto a las boundaries es hacer un grupo general que las contenga a todas. Este Boundary group se suele vincular al servidor que tenemos en central.

Si tenemos una sede por ejemplo en BCN, agruparemos las boundaries correspondientes a BCN y las agruparemos bajo el nombre de Edificio BCN vinculando a este grupo el distribution point que tenemos instalado allí.
Así las cosas, cuando instalamos un cliente veremos que éste intenta localizar cual es su distribution point:
<![LOG[Found local location 'http://SERVIDORCENTRAL /SMS_DP_SMSPKG$/ORI00001']LOG]!>
<![LOG[Found remote location 'http://SERVIDORMADRID/SMS_DP_SMSPKG$/ORI00001']LOG]!>
<![LOG[Found local location 'http://SERVIDORBCN/SMS_DP_SMSPKG$/ORI00001']LOG]!>
<![LOG[Found remote location 'http://SERVIDORTENERIFE/SMS_DP_SMSPKG$/ORI00001']LOG]!>
<![LOG[PROPFIND 'http://SERVIDORCENTRAL/SMS_DP_SMSPKG$/ORI00001']LOG]!>
<![LOG[Will be using DP location 'http://SERVIDORCENTRAL/SMS_DP_SMSPKG$/ORI00001']LOG]!>


¿Qué ha ocurrido?, el cliente en lugar de asignarse el distribution point más cercano que sería el de BCN en este caso, se ha asignado el distribution point de central. Si seguimos instalando equipos en estas circunstancias veremos algunos clientes sí se conectan al DP que le corresponde, pero otros no.
Hay dos motivos para que ocurra esto. Uno de ellos es que normalmente al crear boundary groups para las diferentes localizaciones nos olvidamos de sacar del boundary group general las boundaries que pertenecen a localizaciones con distribution point propio. Esto provoca que una misma boundary tenga más de un distribution point asignado.
El segundo motivo es que tenemos marcado en las propiedades de distribution point el fallback habilitado. 
Si queremos garantizar que los clientes de una localización siempre se descarguen el cliente o el software que distribuyamos desde un DP sin excepción debemos tener esto en cuenta.

SCCM da un error XML en determinados Reports relacionados con "Add and Remove programs"

Al intentar usar reports relacionados con "Add and Remove programs" SCCM falla dando este error.
Este error es debido a un bug del producto, supuestamente con SP1 quedará solucionado. En mi caso la solución fue esta:

Cambiar la clave de registro HKLM\SOFTWARE\Wow6432Node\Microsoft\ConfigMgr10\AdminUI\Reporting  cambiando el valor de “ReportBuilder_2_0_0_0.application” a “ReportBuilder_3_0_0_0.application”

ir a http://servidorreports/reports y navegar hasta el report que falla y ejecutarlo, nos dará error, pero esta vez nos da más información:



Ejecutamos esta query:
use CM_UV2
Select distinct
 CHARINDEX(cast(0x1C as varchar(1)),DisplayName0),
 DisplayName0
from 
 dbo.v_Add_Remove_Programs
Where 
 CHARINDEX(cast(0x1C as varchar(1)),DisplayName0) > 0

y obtenemos este resultado:

Vemos que hay una entrada con caracteres chinos. que provocan el problema.


miércoles, 1 de octubre de 2014

Crear Aplicación en IIS6 con Powershell

Crear Aplicación en IIS6 con Powershell.

Function CrearIISApp {
    Param ([Parameter(Mandatory=$False,Position=0)][string]$AppNom,
    [Parameter(Mandatory=$False,Position=0)][string]$AppPath,
    [Parameter(Mandatory=$False,Position=0)][string]$AppDefDoc,
    [Parameter(Mandatory=$False,Position=0)][string]$AppPoolNom,
    [Parameter(Mandatory=$False,Position=0)][string]$AppSite)
    $path = [ADSI]"IIS://localhost/$AppSite/ROOT"
    $app = $path.Create("IIsWebVirtualDir", $AppNom)
    $app.AppCreate2(1)
    $app.Put("AppFriendlyName", $AppNom)
    $app.Put("Path", $AppPath)
    $app.Put("DefaultDoc", "$AppDefDoc")
    $app.Put("AppPoolId", "$AppPoolNom")
    $app.SetInfo()
    }



martes, 13 de mayo de 2014

No funcionan los certificados GEOTrust con Firefox

Hay que agregar en Trusted Root Certificates el certificado internmedio de GEOTRUST

https://knowledge.geotrust.com/support/knowledge-base/index?page=content&actp=CROSSLINK&id=SO15687