VMware Global Community
Salalon
Contributor
Contributor
Jump to solution

listado con get-vm

Buenas:

Necesitaría un listado de maquinas apagadas durante más de 100 días, para poder borrarlas y liberar espacio de un filesystem.

He estado mirando informacion y conseguido con este comando sacar todas las maquinas apagadas en el datastore concreto 'Desarrollo' pero..o como puedo sacar la ultima vez que se encendio la maquina ??

C:\> get-vm -location Desarrollo | Where {$_.PowerState -eq 'PoweredOff' }

Seguiré investigando pero una ayuda me vendría genial.

He sacado informacion e ideas de aqui pero no puedo ejecutar el script que cuelgan porque me dice que no esta firmado:

http://blogs.vmware.com/vipowershell/2009/10/when-was-the-last-time-that-vm-was-powered-on.html

C:\> & '.\VM Last Poweron Time.ps1'

File C:\VM Last Poweron Time.ps1 cannot be loaded. The file C:\VM Last Poweron

Time.ps1 is not digitally signed. The script will not execute on the system. Pl

ease see "get-help about_signing" for more details..

At line:1 char:2

+ & <<<< '.\VM Last Poweron Time.ps1'

Salu2 y gracias a todos por la ayuda.

Reply
0 Kudos
1 Solution

Accepted Solutions
xacolabril
Expert
Expert
Jump to solution

Debes concatenar al comando GET-VM ...... el siguiente:

l export-csv c:\salida.csv

Sin olvidar la pipe l (he sustituido la pipe por una L minúscula, porque el formato del post lo interpreta como una sección).

Saludos.

Xavier

VMware Certified Professional VCP3 and VCP4.

-


Si encuentras que esta o cualquier otra respuesta ha sido de utilidad, vótalas. Gracias.

If you find this or any other information helpful or correct, please consider awarding points. Thank you.

Xavier Colomé Abril. VMware Certified Professional VCP3, VCP4 and VCP5. [Si encuentras que esta o cualquier otra respuesta ha sido de utilidad, vótalas. Gracias.] [If you find this or any other information helpful or correct, please consider awarding points. Thank you.]

View solution in original post

Reply
0 Kudos
27 Replies
xacolabril
Expert
Expert
Jump to solution

Hola. Cuando instalaste powerCLI te salió una pantalla que te decía que los scripts no firmados no podrían ser ejecutados. Por defecte seguramente le diste a continuar y la instalación finalizó correctamente. Se trata de una política de seguridad para evitar la ejecución remota de scripts contra un ESX o un Virtual Center.

Una vez instalado, desde PowerCLI ejecuta la siguiente sentencia para permitir scripts no firmados:

Set-ExecutionPolicy AllSigned

Luego vuelve a ejecutar el programa. si te sige sin funcionar ejecuta entonces:

Set-ExecutionPolicy RemoteSigned

Espero que te sea de ayuda

Saludos.

Xavier

VMware Certified Professional VCP3 and VCP4.

-


Si encuentras que esta o cualquier otra respuesta ha sido de utilidad, vótalas. Gracias.

If you find this or any other information helpful or correct, please consider awarding points. Thank you.

Xavier Colomé Abril. VMware Certified Professional VCP3, VCP4 and VCP5. [Si encuentras que esta o cualquier otra respuesta ha sido de utilidad, vótalas. Gracias.] [If you find this or any other information helpful or correct, please consider awarding points. Thank you.]
Salalon
Contributor
Contributor
Jump to solution

Hola

Lo que me has dicho me ha servido para conocer el problema pero no se me ha solucionado, sigue sin dejarme ejecutar el .ps1

Cuando he arrancado el PowerCli:

Do you want to run software from this untrusted publisher?

File C:\Archivos de programa\VMware\Infrastructure\vSphere

PowerCLI\VMware.VimAutomation.Format.ps1xml is published by CN="VMware, Inc.",

OU=Marketing, OU=Digital ID Class 3 - Microsoft Software Validation v2,

O="VMware, Inc.", L=Palo Alto, S=California, C=US and is not trusted on your

system. Only run scripts from trusted publishers.

Never run Do not run Run once Always run Help

(default is "D"):

Le he dado a A, arrancar siempre y nada.

File C:\VM Last Poweron Time.ps1 cannot be loaded. The file C:\VM Last Poweron

Time.ps1 is not digitally signed. The script will not execute on the system. Pl

ease see "get-help about_signing" for more details..

At line:1 char:2

+ & <<<< '.\VM Last Poweron Time.ps1'

Salu2 y gracias.

Reply
0 Kudos
xacolabril
Expert
Expert
Jump to solution

Hola Salalon, realiza la siguiente comprabación:

Desde PowerCLI, ejecuta el comando:

Get-ExecutionPolicy

Esto te devolverá la política configurada de seguridad. Debería retornarte Unrestricted para que te funcione el script.

Saludos.

Xavier

VMware Certified Professional VCP3 and VCP4.

-


Si encuentras que esta o cualquier otra respuesta ha sido de utilidad, vótalas. Gracias.

If you find this or any other information helpful or correct, please consider awarding points. Thank you.

Xavier Colomé Abril. VMware Certified Professional VCP3, VCP4 and VCP5. [Si encuentras que esta o cualquier otra respuesta ha sido de utilidad, vótalas. Gracias.] [If you find this or any other information helpful or correct, please consider awarding points. Thank you.]
xacolabril
Expert
Expert
Jump to solution

Ah. por otra parte, si no lo tienes en unrestricted, monta una sentencia similar a la siguiente, que te permite certificat el script sign-file.ps1, pero hazlo con el nombre de tu script:

$cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]

Set-AuthenticodeSignature sign-file.ps1 $cert

Luego vuelve a probar.

Saludos.

Xavier

VMware Certified Professional VCP3 and VCP4.

-


Si encuentras que esta o cualquier otra respuesta ha sido de utilidad, vótalas. Gracias.

If you find this or any other information helpful or correct, please consider awarding points. Thank you.

Xavier Colomé Abril. VMware Certified Professional VCP3, VCP4 and VCP5. [Si encuentras que esta o cualquier otra respuesta ha sido de utilidad, vótalas. Gracias.] [If you find this or any other information helpful or correct, please consider awarding points. Thank you.]
Reply
0 Kudos
Salalon
Contributor
Contributor
Jump to solution

C:\> Get-ExecutionPolicy

AllSigned

C:\> $cert = @(Get-ChildItem cert:\CurrentUser\My -codesignin

g)[0]

C:\> Set-AuthenticodeSignature sign-cripi.ps1 $cert

Set-AuthenticodeSignature : Cannot bind argument to parameter 'Certificate' bec

ause it is null.

At line:1 char:26

+ Set-AuthenticodeSignature <<<< sign-cripi.ps1 $cert

Pero con esta otra sentencia Set-ExecutionPolicy -ExecutionPolicy RemoteSigned me ha reportado un error totalmente distinto el cual no se por donde seguir.

C:\> get-vm | ./cripi.ps1

Parameter declarations are a comma-separated list of variable names with option

al initializer expressions.

At C:\cripi.ps1:9 char:11

+ )] <<<<

Salu2,

Reply
0 Kudos
xacolabril
Expert
Expert
Jump to solution

Mmm... pienso que ya se de qué va. Ejecuta:

Set-ExecutionPolicy Unrestricted

Y luego ejecuta el script.

Saludos.

Xavier

VMware Certified Professional VCP3 and VCP4.

-


Si encuentras que esta o cualquier otra respuesta ha sido de utilidad, vótalas. Gracias.

If you find this or any other information helpful or correct, please consider awarding points. Thank you.

Xavier Colomé Abril. VMware Certified Professional VCP3, VCP4 and VCP5. [Si encuentras que esta o cualquier otra respuesta ha sido de utilidad, vótalas. Gracias.] [If you find this or any other information helpful or correct, please consider awarding points. Thank you.]
Reply
0 Kudos
Salalon
Contributor
Contributor
Jump to solution

Nada. sigue igual, me ha comentado un compañero que a lo mejor en vez de ejecutar así el comando debería de crear un comando propio llamado lo que sea que tenga dentro el script o algo así.

Tu piensas que esto debería de leerlo correctamente ??

get-vm | ./cripi.ps1

EDITO: El problema es del script estoy intentando ver que leches está mal aunque lo he copiado directamente de la web.

Salu2,

Reply
0 Kudos
xacolabril
Expert
Expert
Jump to solution

Hola Salalon,

sí, he charlado alguna vez con el creador de ese script (LucD) pero debes tener en cuenta que el script te permite obtener la fecha de último inicio de la VM a través de un bug que por casualidad permite obtener esa información. Debes y PowerShell 2.0 para que funcione el script (¿Lo tiene instalado? o quizá tienes powershell 1.0?) Por otra con PowerCLI 4.0 creo que han solventado el bug que dejaba ver esta información (si tienes PowerCLI 4.0 seguramente el script no te funcionará...)

Revisa estas versiones a ver y dime qué tienes instalado...

Saludos.

Xavier

VMware Certified Professional VCP3 and VCP4.

-


Si encuentras que esta o cualquier otra respuesta ha sido de utilidad, vótalas. Gracias.

If you find this or any other information helpful or correct, please consider awarding points. Thank you.

Xavier Colomé Abril. VMware Certified Professional VCP3, VCP4 and VCP5. [Si encuentras que esta o cualquier otra respuesta ha sido de utilidad, vótalas. Gracias.] [If you find this or any other information helpful or correct, please consider awarding points. Thank you.]
Reply
0 Kudos
xacolabril
Expert
Expert
Jump to solution

Prueba también esto:

Ejecuta:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

Y luego ejecuta el script

Saludos.

Xavier

VMware Certified Professional VCP3 and VCP4.

-


Si encuentras que esta o cualquier otra respuesta ha sido de utilidad, vótalas. Gracias.

If you find this or any other information helpful or correct, please consider awarding points. Thank you.

Xavier Colomé Abril. VMware Certified Professional VCP3, VCP4 and VCP5. [Si encuentras que esta o cualquier otra respuesta ha sido de utilidad, vótalas. Gracias.] [If you find this or any other information helpful or correct, please consider awarding points. Thank you.]
Reply
0 Kudos
xacolabril
Expert
Expert
Jump to solution

Salalon,

he preparado este script donde, le especificas la máquina virtual que quieres en "NOMBRE DE TU MAQUINA VIRTUAL", con el nombre de la VM, que aparece en el VC o si prefiueres que se ejecute para todos los servidores, quitale ese literal. Esto te devolverá la última vez que el servidor hizo Power On, pero revisando de los eventos de la máquina (tasks and events) cuándo fue la última vez, teniendo en cuenta que sólo podremos revisar los últimos 1000 eventos que es el límite máximo que permite VMWare:

Get-VM "NOMBRE DE TU MAQUINA VIRTUAL" | Get-VIEvent -Types Info -MaxSamples 1000 | Where-Object {$_.fullFormattedMessage -match "Powered On"} | Sort-Object -property createdTime | select -last 1 | %{ Write-Host $_.createdTime | Out-Default }

A mi me funciona, Ya me dirás!

Saludos.

Xavier

VMware Certified Professional VCP3 and VCP4.

-


Si encuentras que esta o cualquier otra respuesta ha sido de utilidad, vótalas. Gracias.

If you find this or any other information helpful or correct, please consider awarding points. Thank you.

Xavier Colomé Abril. VMware Certified Professional VCP3, VCP4 and VCP5. [Si encuentras que esta o cualquier otra respuesta ha sido de utilidad, vótalas. Gracias.] [If you find this or any other information helpful or correct, please consider awarding points. Thank you.]
Reply
0 Kudos
Salalon
Contributor
Contributor
Jump to solution

Tengo PowerShell 1.0 de windows XP, PowerShell de Exchange 2007 y la ultima version del CLI... asi que ya supongo por donde van los tiros, aunque el error que me da es raro como estuviese mal el script, voy a probar a desinstalar el CLI e instalarme una version vieja del Toolkit a ver que pasa.

Reply
0 Kudos
xacolabril
Expert
Expert
Jump to solution

Prueba el script que te he pasado que en esencia hace lo mismo:

Get-VM "NOMBRE DE TU MAQUINA VIRTUAL" | Get-VIEvent -Types Info -MaxSamples 1000 | Where-Object {$_.fullFormattedMessage -match "Powered On"} | Sort-Object -property createdTime | select -last 1 | %{ Write-Host $_.createdTime | Out-Default }

Luego con un poco más de trabajo podrás calcular en función a la fecha actual si lleva más de 100 días sin arrencarse o no.

Saludos.

Xavier

VMware Certified Professional VCP3 and VCP4.

-


Si encuentras que esta o cualquier otra respuesta ha sido de utilidad, vótalas. Gracias.

If you find this or any other information helpful or correct, please consider awarding points. Thank you.

Xavier Colomé Abril. VMware Certified Professional VCP3, VCP4 and VCP5. [Si encuentras que esta o cualquier otra respuesta ha sido de utilidad, vótalas. Gracias.] [If you find this or any other information helpful or correct, please consider awarding points. Thank you.]
Reply
0 Kudos
Salalon
Contributor
Contributor
Jump to solution

Estoy en ello ese comando ya lo había probado pero se queda como colgado (es que no esperaba lo suficiente), si pongo una sola maquina si que me funciona pero si pongo esto no funciona:

get-vm -location Desarrollo | Where {$_.PowerState -eq 'PoweredOff' } | Get-VIEvent -Types Info -MaxSamples 1000 | Where-Object {$_.fullFormattedMessage -match "Powered On"} | Sort-Object -property createdTime | select -last 1 | %{ Write-Host $_.createdTime | Out-Default }

resultado: 17/02/2010 12:26:44

Solo me saca una maquina, como si solo sacase la ultima que lee o algo asi. Megustaría que sacase un listado con maquinas a la izquierda y la hora del ultimo encendido a la derecha.

MAQUINA HORA

Salu2,

Reply
0 Kudos
xacolabril
Expert
Expert
Jump to solution

Buenas,

sustituye:

Write-Host $_.createdTime | Out-Default }

por lo siguiente:

Write-Host 'Nombre VM: ' $_.vm.name 'Último PowerOn: ' $_.createdTime | Out-Default }

Esto te dirá qué máquina ha detectado.

Luego ejecuta:

get-vm -location Desarrollo

y comprueba que la máquina que te ha dicho la fecha de último reinicio corresponda con la última máquina que aparece en el listado de este último comando.

A ver si desciframos el porqué.

Saludos.

Xavier

VMware Certified Professional VCP3 and VCP4.

-


Si encuentras que esta o cualquier otra respuesta ha sido de utilidad, vótalas. Gracias.

If you find this or any other information helpful or correct, please consider awarding points. Thank you.

Xavier Colomé Abril. VMware Certified Professional VCP3, VCP4 and VCP5. [Si encuentras que esta o cualquier otra respuesta ha sido de utilidad, vótalas. Gracias.] [If you find this or any other information helpful or correct, please consider awarding points. Thank you.]
Reply
0 Kudos
Salalon
Contributor
Contributor
Jump to solution

Buenas:

1000gracias por tu ayuda, al final saque este comando y me ha sacado lo que necesito, aunque voy a añadir los detalles que tu me has dicho para que salga OK por pantalla, había que quitar | select -last 1, que parece que solo sacaba el ultimo.

Get-VM -Location DesarrolloExterno | Where {$_.PowerState -eq 'PoweredOff'} | Get-VIEvent -Types Info -MaxSamples 1000 | Where-Object {$

.fullFormattedMessage -match "Powered On"} | Sort-Object -property createdTime %{ Write-Host $.vm.name $_.createdTime}

Ahora voy a intentar sacarlo a CSV por si acaso no consigo comparar las fechas y tenga que hacer una formula en Excell. Para exportar con excell es export-csv c:\fichero.csv ?? me crea el fichero pero me lo hace en blanco.

Salu2 y gracias

Reply
0 Kudos
xacolabril
Expert
Expert
Jump to solution

Debes concatenar al comando GET-VM ...... el siguiente:

l export-csv c:\salida.csv

Sin olvidar la pipe l (he sustituido la pipe por una L minúscula, porque el formato del post lo interpreta como una sección).

Saludos.

Xavier

VMware Certified Professional VCP3 and VCP4.

-


Si encuentras que esta o cualquier otra respuesta ha sido de utilidad, vótalas. Gracias.

If you find this or any other information helpful or correct, please consider awarding points. Thank you.

Xavier Colomé Abril. VMware Certified Professional VCP3, VCP4 and VCP5. [Si encuentras que esta o cualquier otra respuesta ha sido de utilidad, vótalas. Gracias.] [If you find this or any other information helpful or correct, please consider awarding points. Thank you.]
Reply
0 Kudos
Salalon
Contributor
Contributor
Jump to solution

No funciona, lo he intentado pq ya lo había encontrado antes pero me lo saca por pantalla pero luego crea el fichero y lo deja en blanco.

He probado otros comandos más facil como por ejemplo:

get-vm | select Name, Description, PowerState, Memory,@{Name="Host"; Expression={$_.Host.Name}} | export-csv c:\output.csv*

y me lo hace perfectamente, pero con el mio nada.

En pantalla me lo saca bien con este formato:

MAQUINA 17/02/2010 13:49:11 separado por espacios, que podría dejarlo genial en un csv pero...

EDITO: me he dado cuenta ordenando por nombre en vez de por CreatedTime me saca algo que no quiero, no me había dado cuenta que devuelve todos los ultimos powerON y no solo el ultimo, a lo mejor tiene que ver algo con el | select -last 1 que habia quitado pero ese solo me saca el ultimo que lee... menudo lio.

Salu2,

Reply
0 Kudos
xacolabril
Expert
Expert
Jump to solution

Me deja perplejo, porque a mi me funciona bien... ¿No será por la versión de Pwoershell que tienes instalada? Al fin y al cabo el cmdlet export-csv es nativa de Powershell. Tiernes 1.0 o 2.0?

Saludos.

Xavier

VMware Certified Professional VCP3 and VCP4.

-


Si encuentras que esta o cualquier otra respuesta ha sido de utilidad, vótalas. Gracias.

If you find this or any other information helpful or correct, please consider awarding points. Thank you.

Xavier Colomé Abril. VMware Certified Professional VCP3, VCP4 and VCP5. [Si encuentras que esta o cualquier otra respuesta ha sido de utilidad, vótalas. Gracias.] [If you find this or any other information helpful or correct, please consider awarding points. Thank you.]
Reply
0 Kudos
Salalon
Contributor
Contributor
Jump to solution

Tengo PowerShell 1.0 de windows XP, PowerShell de Exchange 2007 y la ultima version del CLI, esto supongo que te refieres al tema del |export-csv, pero lo raro es que si funcione con unos comandos y con otros no. Has probado el mismo comando que yo y si que te funciona ?

Que me dices del tema de que me saque todas las entradas del registro donde ponde POWERON de una maquina, hay alguna manera de sacar solo la ultima vez que lo hizo ? pq sino las 1000 entradas esas que se que son el maximo se me van a quedar muy cortas.

Salu2,

Reply
0 Kudos