Mi e' capitato di ritrovare una VM fantasma nella console di Hyper-V e di non riuscire ad elimarla in maniera ortodssa (Menu' contestuale/elimina) cosi', intestardito ho deciso di percorrere altre vie.
Grazie ad un tool molto utile denominato WMI Code Creator, ho generato il codice seguente:
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\virtualization")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Msvm_ComputerSystem Where EnabledState >= 2",,48)
For Each objItem in colItems
Wscript.Echo "-----------------------------------"
Wscript.Echo "Msvm_ComputerSystem instance"
Wscript.Echo "-----------------------------------"
If isNull(objItem.AssignedNumaNodeList) Then
Wscript.Echo "AssignedNumaNodeList: "
Else
Wscript.Echo "AssignedNumaNodeList: " & Join(objItem.AssignedNumaNodeList, ",")
End If
Wscript.Echo "Caption: " & objItem.Caption
Wscript.Echo "CreationClassName: " & objItem.CreationClassName
If isNull(objItem.Dedicated) Then
Wscript.Echo "Dedicated: "
Else
Wscript.Echo "Dedicated: " & Join(objItem.Dedicated, ",")
End If
Wscript.Echo "Description: " & objItem.Description
Wscript.Echo "ElementName: " & objItem.ElementName
Wscript.Echo "EnabledDefault: " & objItem.EnabledDefault
Wscript.Echo "EnabledState: " & objItem.EnabledState
Wscript.Echo "HealthState: " & objItem.HealthState
If isNull(objItem.IdentifyingDescriptions) Then
Wscript.Echo "IdentifyingDescriptions: "
Else
Wscript.Echo "IdentifyingDescriptions: " & Join(objItem.IdentifyingDescriptions, ",")
End If
Wscript.Echo "InstallDate: " & objItem.InstallDate
Wscript.Echo "Name: " & objItem.Name
Wscript.Echo "NameFormat: " & objItem.NameFormat
Wscript.Echo "OnTimeInMilliseconds: " & objItem.OnTimeInMilliseconds
If isNull(objItem.OperationalStatus) Then
Wscript.Echo "OperationalStatus: "
Else
Wscript.Echo "OperationalStatus: " & Join(objItem.OperationalStatus, ",")
End If
If isNull(objItem.OtherDedicatedDescriptions) Then
Wscript.Echo "OtherDedicatedDescriptions: "
Else
Wscript.Echo "OtherDedicatedDescriptions: " & Join(objItem.OtherDedicatedDescriptions, ",")
End If
Wscript.Echo "OtherEnabledState: " & objItem.OtherEnabledState
If isNull(objItem.OtherIdentifyingInfo) Then
Wscript.Echo "OtherIdentifyingInfo: "
Else
Wscript.Echo "OtherIdentifyingInfo: " & Join(objItem.OtherIdentifyingInfo, ",")
End If
If isNull(objItem.PowerManagementCapabilities) Then
Wscript.Echo "PowerManagementCapabilities: "
Else
Wscript.Echo "PowerManagementCapabilities: " & Join(objItem.PowerManagementCapabilities, ",")
End If
Wscript.Echo "PrimaryOwnerContact: " & objItem.PrimaryOwnerContact
Wscript.Echo "PrimaryOwnerName: " & objItem.PrimaryOwnerName
Wscript.Echo "ProcessID: " & objItem.ProcessID
Wscript.Echo "RequestedState: " & objItem.RequestedState
Wscript.Echo "ResetCapability: " & objItem.ResetCapability
If isNull(objItem.Roles) Then
Wscript.Echo "Roles: "
Else
Wscript.Echo "Roles: " & Join(objItem.Roles, ",")
End If
Wscript.Echo "Status: " & objItem.Status
If isNull(objItem.StatusDescriptions) Then
Wscript.Echo "StatusDescriptions: "
Else
Wscript.Echo "StatusDescriptions: " & Join(objItem.StatusDescriptions, ",")
End If
Wscript.Echo "TimeOfLastConfigurationChange: " & objItem.TimeOfLastConfigurationChange
Wscript.Echo "TimeOfLastStateChange: " & objItem.TimeOfLastStateChange
Next
Lo script genera una lista con tutte le proprieta' delle macchine virtuali che si trovano sull'Hyper-V server in un determinato momento, producendo un Output come questo:
Msvm_ComputerSystem instance
-----------------------------------
AssignedNumaNodeList:
Caption: Virtual Machine
CreationClassName: Msvm_ComputerSystem
Dedicated:
Description: Microsoft Virtual Machine
ElementName: EN_BPB_BPBEXCH
EnabledDefault: 2
EnabledState: 3
HealthState: 5
IdentifyingDescriptions:
InstallDate: 20091007075603.000000-000
Name: 5975D3F3-EE3D-412A-AC92-DFBAB45F58D0
NameFormat:
OnTimeInMilliseconds: 0
OperationalStatus: 10
OtherDedicatedDescriptions:
OtherEnabledState:
OtherIdentifyingInfo:
PowerManagementCapabilities:
PrimaryOwnerContact:
PrimaryOwnerName:
ProcessID: 0
RequestedState: 12
ResetCapability: 1
Roles:
Status:
StatusDescriptions:
TimeOfLastConfigurationChange: 20091007085737.000000-000
TimeOfLastStateChange: 20091007091948.000000-000
Supponendo che la macchina fantasma si chiamasse PHANTOM_VM, ricaviamo il nome file di configurazione della macchina dalla proprieta' name: 5975D3F3-EE3D-412A-AC92-DFBAB45F58D0.
A questo punto sara' sufficiente trovare il file lnk collegato al file di configurazione della macchina fantasma e procedere alla sua cancellazione. Nel mio caso il file si trovava in C:\Users\All Users\Microsoft\Windows\Hyper-V\Virtual Machines\
giovedì 29 ottobre 2009
martedì 13 ottobre 2009
Esecuzione locale script disattivata
Oggi mi e' capitato, a seguito dello spostamento di una Virtual Machine da un Server con Hyper-V 2008 R2 ad un altro praticamente identico, di dover riattivare la VM.
Come da prassi ho cliccato sulla notify icon in basso a destra sulla taskbar di Windows ma, invece di comparire la solita finestra di dialogo con la scelta del tipo di attivazione, mi compare questo simpatico messaggio:
"Impossibile eseguire l'Attivazione di Windows. L'esecuzione locale di script e' stata disattivata su questo computer. Cio' puo' essere stato fatto a scopo preventivo contro i virus o come misura di sicurezza. Una volta attivata l'esecuzione locale dello script, riavvare l'attivazione"
Dopo qualche ora di ricerche (vane) sulla KB di Microsoft, mi imbatto nella seguente soluzione:
1. Avviare Regedit
2. Impostare "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\0\1400" a 0
3. Impostare "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\0\1400" a 0
4. Chiudere il Registry Editor
5. Rilanciare il processo di attivazione di Microsoft Windows
Il valore 1400 corrisponde alla policy di Attivazione Scripting Locale
Come da prassi ho cliccato sulla notify icon in basso a destra sulla taskbar di Windows ma, invece di comparire la solita finestra di dialogo con la scelta del tipo di attivazione, mi compare questo simpatico messaggio:

Dopo qualche ora di ricerche (vane) sulla KB di Microsoft, mi imbatto nella seguente soluzione:
1. Avviare Regedit
2. Impostare "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\0\1400" a 0
3. Impostare "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\0\1400" a 0
4. Chiudere il Registry Editor
5. Rilanciare il processo di attivazione di Microsoft Windows
Il valore 1400 corrisponde alla policy di Attivazione Scripting Locale
Etichette:
attivazione,
locale,
script,
windows
Iscriviti a:
Post (Atom)