2011-06-30 14 views
5

Usando Powershell, ¿cómo puedo enumerar el LastWriteTime de una clave de registro especificada en un equipo remoto?Devuelve el LastWriteTime de una clave de registro especificada en un equipo remoto

La máquina remota no tiene instalado Powershell, por lo que la conexión remota de Powershell está desactivada. .NET y WMI están disponibles. He utilizado con éxito la función RegEnumKeyEx en Advapi32.dll para obtener el lpftLastWriteTime en una máquina local.

+0

No puedo encontrar ninguna alternativa a Advapi32.dll excepto regedt32.exe, que no creo que funcione remotamente. :( – JasonMArcher

+0

Busqué y no me vino nada obvio. [Microsoft.Win32.RegistryKey] :: OpenRemoteBaseKey() es lo que he usado en el pasado para el acceso remoto al registro, pero no creo que exponga los tiempos de escritura – EBGreen

+0

Gracias Jason y EB. Todavía estamos buscando. Te mantendré informado si encontramos algo. – Shaun

Respuesta

1

¿Qué le parece usar el LogParser, disponible en Microsoft?

Y aquí es un ejemplo de código que emplea el objeto COM:

$query = @" 

    SELECT 
     Path, 
     KeyName, 
     ValueName, 
     Value, 
     LastWriteTime 
    INTO $outfile 
    FROM \\remotecomputername\HKLM\etc\etc 
    WHERE LastWriteTime BETWEEN 
     TIMESTAMP('2011/08/01 00:00:00', 'yyyy/MM/dd hh:mm:ss') AND 
     TIMESTAMP('2011/09/06 00:00:00', 'yyyy/MM/dd hh:mm:ss') 
    ORDER BY LastWriteTime DESC 

"@ 

$inputtype = New-Object -comObject MSUtil.LogQuery.RegistryInputFormat 
$outputtype = New-Object -comObject MSUtil.LogQuery.CSVOutputFormat 
$outfile = 'c:\temp\outfile.csv' 
$logObject = new-object -com MSUtil.LogQuery 
$result = $logObject.ExecuteBatch($query, $inputtype, $outputtype) | Out-Null 

Se podría proporcionar múltiples valores separados por comas en la cláusula FROM de la consulta a más de un ordenador si es necesario. Lectura adicional here.

Cuestiones relacionadas