2011-03-24 20 views
6

Al encontrarse con un problema al usar Invoke-WmiMethod en una secuencia de comandos, que cuando se ejecuta contra algunas computadoras simplemente se cuelga. Lo que me gustaría hacer es ejecutar el comando y, si no regresa dentro de un período definido de tiempo (digamos 60 a 120 segundos), seguir adelante (registrar el rescate en un archivo también). La única forma que conozco actualmente intentar hacer esto es usar el parámetro -AsJob; sin embargo, cuando intento eso, el trabajo engendrado falla inmediatamente (incluso en computadoras donde la declaración Invoke-WmiMethod funciona sin el parámetro -AsJob agregado). Otros cmdlets relacionados con WMI funcionan contra estas máquinas con problemas, así que no creo que sea una autenticación. o problema de DCOM.¿Ejecutar instrucción con tiempo de espera?

De todos modos, ¿hay otras maneras de establecer un tiempo de espera en una declaración en un script que puedo probar?

Respuesta

3

Hmm, no sé por qué Invoke-WmiMethod falla pero quizás Invoke-Command funcionará (vale la pena intentarlo rápida supongo) por ejemplo:

$job = Invoke-Command -cn $computers { Invoke-WmiMethod ... } -AsJob 
Wait-Job $job -Timeout 60 

Esto supone que ya ha permitido la interacción remota en todos los equipos remotos y que se están ejecutando PowerShell 2.0. Asegúrese de ejecutar esto desde un aviso elevado si está en Vista/Windows 7 o como administrador en XP.

+0

Finalmente recibí un error en la instrucción 'Invoke-WmiMethod' colgada -' Invoke-WmiMethod: Falló la llamada al procedimiento remoto. (Excepción de HRESULT: 0x800706BE) '- así que tendremos que investigar eso. No tengo PS/WinRM 2.0 en todas las PC de destino, así que esa no es realmente una opción para mí ... –

Cuestiones relacionadas