Duda con WMI

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
avechuche
Hacker del Foro
Mensajes: 188
Registrado: 13 Ago 2009, 09:53

Duda con WMI

Mensaje por avechuche »

Hola tengo una pregunta/duda. Para hacer una consulta WMI hago lo siguiente:

Código: Seleccionar todo

Local $oColItems = $oWMIService.ExecQuery("SELECT * FROM Win32_Volume WHERE DriveLetter = " & _addDoubleCuotes(@HomeDrive), "WQL", 0x30)
Hasta ahi todo perfecto. Lo que busco ahora, es poder cambiar un valor, por ejemplo, la propiedad "Label".

Código: Seleccionar todo

Local $oColItems = $oWMIService.ExecQuery("UPDATE Win32_Volume SET Label = " & _addDoubleCuotes("PROBANDO") & " WHERE DriveLetter = " & _addDoubleCuotes(@HomeDrive), "WQL", 0x30)
Pero no hay caso, no cambia, siceramente, no se si se puede. ¿Hay alguna solución? Gracias!

Código: Seleccionar todo

Func _addDoubleCuotes($sString)

	Return '"' & $sString & '"'

EndFunc   ;==>_addDoubleCuotes
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Duda con WMI

Mensaje por Chefito »

Para cambiar el nombre de la Unidad autoit tiene una función: DriveSetLabel. Y para obtenerlo DriveGetLabel.

Si quieres cambiar el label de la unidad donde está instalado windows, requieres ejecutar el código en modo administrador. Utiliza para eso #RequireAdmin.

Para hacerlo con WMI mira este código.

Código: Seleccionar todo

#RequireAdmin

Const $wbemFlagReturnImmediately = 0x10
Const $wbemFlagForwardOnly = 0x20
Local $Unidad=@HomeDrive

$objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Volume WHERE DriveLetter = '" & $Unidad & "'", "WQL", _
        $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

For $objItem In $colItems
	$objitem.label="Cambio"
	$objitem.put_
Next
Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
avechuche
Hacker del Foro
Mensajes: 188
Registrado: 13 Ago 2009, 09:53

Re: Duda con WMI

Mensaje por avechuche »

Chefito escribió:Para cambiar el nombre de la Unidad autoit tiene una función: DriveSetLabel. Y para obtenerlo DriveGetLabel.

Si quieres cambiar el label de la unidad donde está instalado windows, requieres ejecutar el código en modo administrador. Utiliza para eso #RequireAdmin.

Para hacerlo con WMI mira este código.

Código: Seleccionar todo

#RequireAdmin

Const $wbemFlagReturnImmediately = 0x10
Const $wbemFlagForwardOnly = 0x20
Local $Unidad=@HomeDrive

$objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Volume WHERE DriveLetter = '" & $Unidad & "'", "WQL", _
        $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

For $objItem In $colItems
	$objitem.label="Cambio"
	$objitem.put_
Next
Saludos.

Gracias Chefito, ya habia probado con $objitem.put() pero no funciono, voy a probar con guión bajo. En realidad no quiero cambiar el label del disco, uso este ejemplo para no romper nada xD.

Tambien encontre una forma más linda y resumida.

Get-WmiObject -Class Win32_Volume -Filter "DriveLetter='C:'" | Set-WmiInstance -Arguments @{Label = "NUEVO LABEL"}

El problema es que solo funciona desde PowerShell (ya lo probe y anda de 10), pero no se como hacerlo desde AU3, intente todas las formas para poder llamar a powershell.exe pero nada :S. En un rato te aviso como me fue

EDITO:

Funciona perfecto con $objitem.put_. Voy a ver si puedo hacer andar la version con PowerShell. GRACIAS!
Responder