Bueno, vamos a darle un poco mas de vidilla al tema de Powershell, que lo tenemos un poco parado.
En este caso, vamos a crear un script que nos va a generar un fichero de texto con la lista del software instalado en un equipo remoto. ¿a que mola?
Os pongo el script completo como lo tengo yo y luego explico un par de cosas.
#Script: Softinstaladoequipo.ps1
#Version: 1.0
#
#Autor: Oscar Abad Folgueira
#Web: https://www.aprendeinformaticaconmigo.com
#
#Tipo: Powershell
#Funcion: Obtener una lista en un fichero de texto de todo el software instalado en un equipo.
#Parametros: Necesita un nombre de equipo como parametro de entrada.
#Uso: ./softinstaladoequipo.ps1
#
#
Param($equipo) #parametro de entrada
$softinstalado = Get-WmiObject -class win32_Product -computername ‘$equipo’
$softinstalado > softwareinstalado.txt
———————————————————
Ya se que no es necesario decirlo, pero por si acaso os comento que todo lo que va detras del caracter almoadilla (#), es un comentario.
Por consiguiente, solo tenemos 3 lineas de codigo en el script.
La primera:
Param($equipo)
Ya sabreis del script anterior que esto nos sirve para indicar que nos hace falta un parametro para ejecutar el script. En este caso un nombre de equipo valido.
La seguna linea efectiva del script:
$softinstalado = Get-WmiObject -class win32_Product -computername ‘$equipo’
Gracias a Get-WmiObject, y a la clase win32_product, lo que hacemos es decirle que guarde en la variable $softinstalado, la informacion del software instalado en el equipo remoto «$equipo«.
Y la ultima linea:
$softinstalado > softwareinstalado.txt
Vuelca esa informacion en un fichero de texto para que podamos revisarlo con mas detenimiento.
Creo que es bastante sencillo pero de mucha utilidad.
La pega que parece tener este script, es que solo nos devuelve el software instalado en el equipo con MSI, pero no me hagais mucho caso. Podeis probar a sacar un listado del equipo local y posteriormente compararlo con la lista en «Agregar o quitar programas» del panel de control de Windows y vereis que hay diferencia.
Aun asi, a mi me hace un gran servicio.
Esto no va a quedar aqui ni mucho menos, en posteriores scripts,veremos como obtener la informacion de un programa en concreto y no toda la lista. Y si teneis paciencia, mas adelante desinstalaremos software remotamente. Como mola esto ¿que no?
Venga, de momento es todo por hoy. Lo probais y me comentais si os ha funcionado correctamente u os ha dado algun tipo de error.
A pasarlo bien!!
—–
Oscar Abad
http://www.xulak.com – Consultoría informática
Programador WordPress freelance
A ver no tengo mucha idea de informatica pero por lo que \"conozco\" he de crear un .bat y editarlo con el block de notas mismo…
#Script: Softinstaladoequipo.ps1
#Version: 1.0
#
#Autor: Oscar Abad Folgueira
#Web: https://www.aprendeinformaticaconmigo.com
#
#Tipo: Powershell
#Funcion: Obtener una lista en un fichero de texto de todo el software instalado en un equipo.
#Parametros: Necesita un nombre de equipo como parametro de entrada.
#Uso: ./softinstaladoequipo.ps1
#
#
Param($equipo) #parametro de entrada
$softinstalado = Get-WmiObject -class win32_Product -computername ‘$//Mostrador/automovil’
$softinstalado > softwareinstalado.txt
Asi me generaria un txt con el equipo que tengo en la red \"MOSTRADOR/AUTOMOVIL\"… ¿No?… pues no sale nada.. Indicame como he de hacerlo muchas gracias de antemano.
Saludos, Joseangel.
Me pillas recien llegado de vacaciones y un poco espeso todavia con el tema de Powershell, pero mirando las modificaciones que has realizado en el script «softinstaladoequipo.ps1«, algo veo…
en le línea: $softinstalado = Get-WmiObject -class win32_Product -computername ‘$//Mostrador/automovil’
no comprendo la ultima parte: ‘$//Mostrador/automovil’
despues de -computername debes poner el nombre del equipo. En el caso del script, no debes modificar esta parte puesto que ‘$equipo’ hace referencia al nombre del equipo que le has indicado en la llamada.
Para que me entiendas mejor, deja el script como estaba originalmente, si modificar nada y cuando lo ejecutes, le indicas el nombre del equipo:
>softinstaladoequipo.ps1 automovil
Haz pruebas con esto a ver que tal te va.
Venga, animos y sigue adelante.
Una cosa, no es un archivo .bat, sino .ps1
Haces muy bien en usar el bloc de notas si quieres hacerlo, pero si vas a hacer mas cosillas prueba el POWERGUI que se recomienda en esta web.
Aprovecho para agradecer tu secciones de Powershell y todo lo que hablas de montar dominios etc…..Espero que añadas muchos scripts y lo mas rapido posible (lo disfruto bastante) 🙂
Saludos a todos!!
Jo**r oscar y sergio soys un cracks, ayer postee y me contestastes en 0’…. gracias lo primero…
Ahora te indico lo que «necesito» y lo que tengo… con el bat este que he ejecutado o «ps1» (os vuelvo a recordar que estoy un poco pez en este tema), al ejecutarlo en un equipo me crea un txt con el software que tiene instalado.
Sobre la ultima fila añadida \\Servidor\COMPARTIR\listado_programas.txt’ usando esa direccion me sube el txt a un servidor
Este es el bat que estoy currandome a ver como lo veis..
@echo off
regedit /a %TEMP%\filename.reg «HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall»
for /f «Skip=1 Tokens=*» %%i in (‘type %TEMP%\Filename.reg’) do set line=»%%i»&call :parse
goto :EOF
:parse
set work=%line:~2,11%
set work=%work:»=%
If NOT «%work%» EQU «DisplayName» goto :EOF
set work=%line:~16,120%
set work=%work:»=%
@echo %work%
@echo %work% >> \\Servidor\COMPARTIR\listado_programas.txt
La «idea» seria modificarlo para que guardara el txt con el nombre del equipo que lo genera o la ip del equipo que lo guarda ya que en la empresa hay unos 40 equipos y deberian guardarse con un orden o un nombre al menos del equipo que lo genera, no se si me explico…
Estoy viendo tambien software para la conexion remota e identificacion del software instalado en equipos de la red como «AdvancedRemoteInfo», «Everest», «EMCO Network Inventory Enterprise», «ARI» entre otros pero la idea del bat me parece bastante buena.
Gracias nuevamente por vuestro tiempo.
Buenos dias Joseangel.
En primer lugar tengo que decir que veo que te manejas muy bien con esto de los scripts. Digas lo que digas…
En segundo lugar, creo que la cuestion que planteas se reduce todo a que quieres que el nombre del fichero que se crea, quieres que tenga el nombre del equipo del que pides la informacion de software instalado, ¿no? Pues bien, si este es el caso, te aconsejaria que modificaras la ultima linea y donde pones el nombre del fichero «listado_programas.txt» lo modificaras por la variable que contiene el nombre del equipo: $equipo. Es decir, por ejemplo:
dir | out-file «$equipo.txt»
Este comando crea un fichero cuyo nombre es el nombre de la variable equipo y con la extension .txt.
Para terminar, me gustaria saber exactamente que que es lo que hace la primera parte de tu sript por que se me escapa un poco. Si lo que quieres es obtener la lista de los programas que estan dentro de esa cadena de registro, yo utilizaria el comando Get-WmiObject -class win32_Product.
De todas formas, creo que lo que estas haciendo tu es crear un script cd cmd sin tocar para nada Powershell, con los beneficios que esto tiene.
Bueno, me lo explicas en un momento si puedes.
Venga, espero que te haya servido de ayuda.
Yo estoy haciendo un «bat» desde el block de notas de windows, de echo es un bat que encontre googleando, no se si el scrip que tu has echo funcionara igual que el bat que yo te comento si es asi agradeceria que me dijeses como hacer funcionar los scripts ya que segun «creo» no hablamos de lo mismo *.bat y scripts ¿Puedes ayudarme tu a lo que necesito?
Ya sabes como he comentado antes es para controlar que hay instalado en cada equipo de una red de unos 30 ordenadores sin que el dueño del pc se entere, seria interesante poder hacerlo desde un ordenador en remoto aunque me puedo colar dentro de los pc’s y dejarle «el regalito oculto».
Gracias nuevamente por tu pronta respuesta.
Yo estoy haciendo un “bat” desde el block de notas de windows, de echo es un bat que encontre googleando, no se si el scrip que tu has echo funcionara igual que el bat que yo te comento si es asi agradeceria que me dijeses como hacer funcionar los scripts ya que segun “creo” no hablamos de lo mismo *.bat y scripts ¿Puedes ayudarme tu a lo que necesito?
Ya sabes como he comentado antes es para controlar que hay instalado en cada equipo de una red de unos 30 ordenadores sin que el dueño del pc se entere, seria interesante poder hacerlo desde un ordenador en remoto aunque me puedo colar dentro de los pc’s y dejarle “el regalito oculto”.
Gracias nuevamente por tu pronta respuesta.
help me please!!!!
Saludos, Jose Angel.
Ambos son scripts. Tanto los «bat» o «cmd» como los «ps».
Para ejecutar los scripts de powershell que he puesto en el blog, necesitas tener instalado en tu equipo (no hace falta que este instalado en el equipo de destino) el Powershell 1.0.
Desde tu equipo lanzas el script hacia cualquier equipo que tengas en tu red. Pruebalo y veras.
Venga, animo y palante!
hola, sabes me interesa mucho powershell quieciera conocer si hay un script para encender un equipo de forma remota.
espero su pronta respuesta.
Saludos con todos. Cómo debo ejecutar el comando para que me saque el inventario pues al ejecutarlo me genera el archivo de salida vacío. He intentado ejecutarlo así:
softinstalado -equipo mipc
softinstalado mipc
y nada
Estoy tratando de poner en marchar tu script pero nada. Le he pasado el parámetro -credential para usar el usuario administrador del dominio donde pretendo utilizarlo pero 0. Siempre me saca error ManagementException del Get-WmiObject cuando uso Win32_product pero si utilizo Win32_services, por ejemplo, si que me lo coge todo correctamente. Sugerencias?