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:
"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
Etichette:
attivazione,
locale,
script,
windows
martedì 28 luglio 2009
apnet_perf.dll e l'errore Event id 1008
Questa mattina mentre controllavo una procedura notturna che lavora su Microsoft Active Directory, ho notato qualcosa che non andava: tale procedura era stranamente ancora in esecuzione e procedeva con estrema e sospetta lentezza. Cosi' dopo la consultazione dei vari log (Event Viewer di Windows e quelli generati dall'applicazione) mi sono reso conto che il problema era altrove: l'unico altro elemnto in gioco, oltre alla macchina su cui viene giornalmente eseguita l'applicazione, e' il Domain Controller di riferimento. Mi connetto al Domain Controller e vedo il registro applicazione di Windows completamente rosso e saturo dell'errore:
Tipo evento: Errore
Origine evento: Perflib
Categoria evento: Nessuno
ID evento: 1008
Data: 17/07/2008
Ora: 13.29.04
Utente: N/D
Computer: XXXXXXXX
Descrizione:
La procedura Open per il servizio "ASP.NET" nella DLL
"C:\WINNT\Microsoft.NET\Framework\v2.0.50727\aspnet_perf.dll" non è riuscita.
I dati delle prestazioni per questo servizio non sono disponibili.
Il codice di stato restituito è DWORD 0.
Dati:
0000: 05 40 00 80 .@.€
Fortuna :) il messaggio dell'errore e' abbastanza eloquente: ci sono problemi con i performance counters di aspnet.
Prima di cominciare consulto comunque la rete per verificare la presenza di eventuali note sulla KB di Microsoft o su post o forum tecnici, non si sa mai qualcuno puo' aver avuto il mio stesso problema e magari l'ha pure risolto ... ed infatti dopo una brevissima ricerca su google trovo il post http://www.archivum.info/microsoft.public.it.winserver/2008-07/msg00748.html che, guarda caso, descrive esattamente il mio problema.
Fondamentalmente la soluzione sta nel disabilitare i performance counters di aspnet in quanto trattasi di un'issue nota a Microsoft e su cui, nel momento in cui scrivo, non hanno ancora rilasciato patch (per dovere di cornaca devo dire che il sistema affetto dall'errore e' un Windows 2000 SP4, quindi un sistema operativo ormai in disuso e fuori manutenzione). Di seguito i passaggi da me intrapresi per la risoluzione del problema:
Tipo evento: Errore
Origine evento: Perflib
Categoria evento: Nessuno
ID evento: 1008
Data: 17/07/2008
Ora: 13.29.04
Utente: N/D
Computer: XXXXXXXX
Descrizione:
La procedura Open per il servizio "ASP.NET" nella DLL
"C:\WINNT\Microsoft.NET\Framework\v2.0.50727\aspnet_perf.dll" non è riuscita.
I dati delle prestazioni per questo servizio non sono disponibili.
Il codice di stato restituito è DWORD 0.
Dati:
0000: 05 40 00 80 .@.€
Fortuna :) il messaggio dell'errore e' abbastanza eloquente: ci sono problemi con i performance counters di aspnet.
Prima di cominciare consulto comunque la rete per verificare la presenza di eventuali note sulla KB di Microsoft o su post o forum tecnici, non si sa mai qualcuno puo' aver avuto il mio stesso problema e magari l'ha pure risolto ... ed infatti dopo una brevissima ricerca su google trovo il post http://www.archivum.info/microsoft.public.it.winserver/2008-07/msg00748.html che, guarda caso, descrive esattamente il mio problema.
Fondamentalmente la soluzione sta nel disabilitare i performance counters di aspnet in quanto trattasi di un'issue nota a Microsoft e su cui, nel momento in cui scrivo, non hanno ancora rilasciato patch (per dovere di cornaca devo dire che il sistema affetto dall'errore e' un Windows 2000 SP4, quindi un sistema operativo ormai in disuso e fuori manutenzione). Di seguito i passaggi da me intrapresi per la risoluzione del problema:
- dal prompt dei comandi mi sono portato nella cartella v2.0* del .Net Framework
- ho lanciato il comando aspnet_regiis -ua
- ho riavviato la macchina
venerdì 17 luglio 2009
WISP CitrixRedirectionNewMenu ed il messaggio "Failed to find xml file"
Durante l'installazione e la configurazione di Citrix Web Interface for SharePoint, mi e' capitato di riscontrare la segnalazione:
unable to find xml file 'C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\Template\features\CitrixRedirectionNewMenu\feature.xml'
Googla e rigoogla, non ottengo alcuna informazione utile alla risuluzione del mio probelma... dopo aver effettuato tutti i controlli di rito (ACL Windows e MOSS) sono sempre piu' perplesso ma, sicuro che si trattasse di un problema di permessi dell'utente con cui cercavo di attivare la feature CitrixRedirectionNewMenu (SharePoint Farm Administrator Account), rieseguo il comando con un utente diverso dal precedente (Amministratore della macchina e Site Collection Administrator del sito su cui cerco di attivare la Feature). Anche se i due utenti hanno praticamente gli stessi privilegi, anzi il secondo account, non e' amministratore della Farm di SharePoint, con quest'ultimo riesco ad attivare la feature senza la segnalazione del fastidiosissimo errore di cui sopra...
Riporto, per chiarezza, i privilegi dell'account con cui sono riuscito ad attivare la feature:
Amministratore della macchina
Domain Admin
Site Collection Administrator
Il comando con cui attivare la feature:
CitrixContentRedirectionNewMenu -url http://myserver
unable to find xml file 'C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\Template\features\CitrixRedirectionNewMenu\feature.xml'
Googla e rigoogla, non ottengo alcuna informazione utile alla risuluzione del mio probelma... dopo aver effettuato tutti i controlli di rito (ACL Windows e MOSS) sono sempre piu' perplesso ma, sicuro che si trattasse di un problema di permessi dell'utente con cui cercavo di attivare la feature CitrixRedirectionNewMenu (SharePoint Farm Administrator Account), rieseguo il comando con un utente diverso dal precedente (Amministratore della macchina e Site Collection Administrator del sito su cui cerco di attivare la Feature). Anche se i due utenti hanno praticamente gli stessi privilegi, anzi il secondo account, non e' amministratore della Farm di SharePoint, con quest'ultimo riesco ad attivare la feature senza la segnalazione del fastidiosissimo errore di cui sopra...
Riporto, per chiarezza, i privilegi dell'account con cui sono riuscito ad attivare la feature:
Amministratore della macchina
Domain Admin
Site Collection Administrator
Il comando con cui attivare la feature:
CitrixContentRedirectionNewMenu -url http://myserver
venerdì 24 aprile 2009
Disinstallazione forzata AD LDS (Active Directory LigthWeight Directory Services)
AD LDS e' "la versione 2008" di ADAM (Active Directory Application Mode). Se avete mai provato ad installare Microsoft ISA Server 2006, ADAM viene installato a corredo di Internet Security and Accelration Server. Fin qui, tutto regolare dira' qualcuno... ma veniamo al punto cruciale di questo post, ovvero la rimozione manuale di AD LDS quando non e' possibile rimuoverlo utilizzando lo snapin Application Wizard di Microsoft Windows.
Ultimamente ho lavorato su una installazione Microsoft Forefront TMG Server che, in seguito a "incasinamenti vari, ho deciso di disintallare e reinstallare da zero. Come ogni altro utente Windows, apro Application Wizard (appwiz.cpl) ed avvio la disinstallazione processo che avviene in maniera impeccabile e come ci si aspetta. Il problema pero' era la disinstallazione di AD LDS. Dopo la disinstallazione di TDM, infatti, in Application Wizard rimane traccia dell'istanza di AD LDS installata con TDM ma la voce di menu' che ci permette di avviare il processo di disinstallazione anche per questo componente, non veniva visualizzata.
Googlando non ho ottenuto alcuna informazione utile alla risoluzione del mio problema, cosi' ho deciso di prendere il toro per le corna e procedere con la pulizia manuale del registry finche', nella chiave di registro HKLM\SOFTWARE\Microsoft\CurrentVersion\Uninstall\ADAM_ISASTGCTRL$0 (dove l'ultima chiave ISASTGCTRL e' da interpretare come il nome dell'istanza AD LDS installata sulla vostra maccchina), ho trovato un simpaticissimo valore denominato UninstallString contente il comando di disnstallazione dell'istanza stessa, ovvero:
"C:\Windows\ADAM\adamuninstall.exe" /i:ISASTGCTRL
In definitiva, se vi doveste trovare, come me, nella situazione di voler/dover disinstallare una instanza di AD LDS e in Application Wizard non compare piu' il comando di disinstallazione come ci si aspetta, lanciate il comando:
C:\Windows\ADAM\adamuninstall.exe /i:
Ultimamente ho lavorato su una installazione Microsoft Forefront TMG Server che, in seguito a "incasinamenti vari, ho deciso di disintallare e reinstallare da zero. Come ogni altro utente Windows, apro Application Wizard (appwiz.cpl) ed avvio la disinstallazione processo che avviene in maniera impeccabile e come ci si aspetta. Il problema pero' era la disinstallazione di AD LDS. Dopo la disinstallazione di TDM, infatti, in Application Wizard rimane traccia dell'istanza di AD LDS installata con TDM ma la voce di menu' che ci permette di avviare il processo di disinstallazione anche per questo componente, non veniva visualizzata.
Googlando non ho ottenuto alcuna informazione utile alla risoluzione del mio problema, cosi' ho deciso di prendere il toro per le corna e procedere con la pulizia manuale del registry finche', nella chiave di registro HKLM\SOFTWARE\Microsoft\CurrentVersion\Uninstall\ADAM_ISASTGCTRL$0 (dove l'ultima chiave ISASTGCTRL e' da interpretare come il nome dell'istanza AD LDS installata sulla vostra maccchina), ho trovato un simpaticissimo valore denominato UninstallString contente il comando di disnstallazione dell'istanza stessa, ovvero:
"C:\Windows\ADAM\adamuninstall.exe" /i:ISASTGCTRL
In definitiva, se vi doveste trovare, come me, nella situazione di voler/dover disinstallare una instanza di AD LDS e in Application Wizard non compare piu' il comando di disinstallazione come ci si aspetta, lanciate il comando:
C:\Windows\ADAM\adamuninstall.exe /i:
sabato 12 luglio 2008
Start/Shutdown SAP
Da qualche mese in azienda siamo alle prese con SAP, l'ERP dell'omonima casa tedesca SAP AG. Mondo nuovo per noi abituati a lavorare in ambito Microsoft che ha richiesto non poco tempo dedicato allo studio da parte del team impegnatp nello sviluppo e nella personalizzazione della soluzione che gravita attorno la tecnologia SAP.
In modo particolare per il sottoscritto (Developer prestato al ramo sistemistico ed infrastrutturale) e' stata una sfida riuscire ad automatizzare l'avvio e l'accensione dei servizi altrimenti avviabili attarverso la mmc di amministrazione del prodotto (quindi manualmente, e di conseguenza non molto comodo). Come ben sapranno tutti coloro che, per un motivo o per un'altro, devono spegnere SAP (perche' magari devono effettuare un backup della macchina virtuale su cui e' installato, o perche' devono effettuare un banalissimo aggiornamento di Microsoft Windows) possono capire la necessita' di un sistema che permetta di automatizzare i processi di accensione/spegnimento delle varie istanze del prodotto, poiche' il Database di SAP pare essere molto delicato (stando a quanto detto dal tecnico che che ha installato il prodotto presso la nostra azienda) e, come dire... suscettibile ad un arresto o riavvio di Windows senza aver preso le necessarie precauzioni (shutdown delle istanze, per l'appunto).
Ebbene studiando un po' la documentazione SAP (molto scarsa dal punto di vista dei comandi disponibili per la shell), sono riuscito a trovare un comando che, lanciato da command shell, permette spegnimento ed accensione dell'istanza di SAP desiderata: sapcontrol.exe.
Di seguito il comando da utilizzare per lo spegnimento di un'istanza
D:\usr\sap\DEV\DVEBMGS02\exe\sapcontrol.exe -user -function Shutdown -format script -nr
ed il comando per l'accensione
D:\usr\sap\DEV\DVEBMGS02\exe\sapcontrol.exe -user -function Start -format script -nr
per completare l'automatismo occorre solo verificare che l'istanza si sia arrestata per poi spegnere la macchina. A questo scopo ho scritto uno script, in vbscript che attende lo spegnimento dell'istanza selezionata prima di terminare la sua esecuzione:
Option Explicit
Dim wso
set wso = CreateObject( "WSCript.Shell")
Dim InstanceNumber
InstanceNumber = WScript.Arguments(0)
Dim ServiceAccount
ServiceAccount = WScript.Arguments(1)
Dim Password
Password = WScript.Arguments(2)
Dim Status, ExitCode
ExitCode = Shutdown(InstanceNumber, ServiceAccount, Password)
if ExitCode = 0 Then
Dim Stopped
Stopped = false
do while Not Stopped
Status = GetStatus( InstanceNumber, ServiceAccount, Password)
if Status = "Stopped" Then
Stopped = true
elseif Status = "NotFound" then
exit Do
else
WScript.Sleep 5000
end if
Loop
WScript.StdOut.WriteLine Status
else
WScript.StdOut.WriteLine "Error Shutting down " & InstanceNumber
end if
set wso = nothing
function Shutdown( instanceNumber, serviceAccount, password)
Dim oExec
set oExec = wso.Exec( "D:\usr\sap\DEV\DVEBMGS02\exe\sapcontrol.exe -user " & service Account & " " & password & " -function GetProcessList -format script -nr " & instanceNumber)
do while oEXec.Status = 0
WScript.Sleep 100
Loop
Shutdown = oExec.ExitCode
set oExec = nothing
end function
function GetStatus( instanceNumber, serviceAccount, password)
Dim Line, Result
Dim oExec
Result = "NotFound"
set oExec = wso.Exec( "D:\usr\sap\DEV\DVEBMGS02\exe\sapcontrol.exe -user " & service Account & " " & password & " -function GetProcessList -format script -nr " & instanceNumber)
do while oEXec.Status = 0
WScript.Sleep 100
Loop
do while not oExec.StdOut.AtEndOfStream
Line = oExec.StdOut.ReadLine
if InStr( Line, "0 textstatus:") then
Result = Right( Line, len(Line) - 14)
Exit do
end if
Loop
GetStatus = Result
set oExec = nothing
end function
Questo e' tutto, spero lo script vi sia utile cosi' come lo e' per il sottoscritto. Alla prossima. :)
In modo particolare per il sottoscritto (Developer prestato al ramo sistemistico ed infrastrutturale) e' stata una sfida riuscire ad automatizzare l'avvio e l'accensione dei servizi altrimenti avviabili attarverso la mmc di amministrazione del prodotto (quindi manualmente, e di conseguenza non molto comodo). Come ben sapranno tutti coloro che, per un motivo o per un'altro, devono spegnere SAP (perche' magari devono effettuare un backup della macchina virtuale su cui e' installato, o perche' devono effettuare un banalissimo aggiornamento di Microsoft Windows) possono capire la necessita' di un sistema che permetta di automatizzare i processi di accensione/spegnimento delle varie istanze del prodotto, poiche' il Database di SAP pare essere molto delicato (stando a quanto detto dal tecnico che che ha installato il prodotto presso la nostra azienda) e, come dire... suscettibile ad un arresto o riavvio di Windows senza aver preso le necessarie precauzioni (shutdown delle istanze, per l'appunto).
Ebbene studiando un po' la documentazione SAP (molto scarsa dal punto di vista dei comandi disponibili per la shell), sono riuscito a trovare un comando che, lanciato da command shell, permette spegnimento ed accensione dell'istanza di SAP desiderata: sapcontrol.exe.
Di seguito il comando da utilizzare per lo spegnimento di un'istanza
D:\usr\sap\DEV\DVEBMGS02\exe\sapcontrol.exe -user
ed il comando per l'accensione
D:\usr\sap\DEV\DVEBMGS02\exe\sapcontrol.exe -user
per completare l'automatismo occorre solo verificare che l'istanza si sia arrestata per poi spegnere la macchina. A questo scopo ho scritto uno script, in vbscript che attende lo spegnimento dell'istanza selezionata prima di terminare la sua esecuzione:
Option Explicit
Dim wso
set wso = CreateObject( "WSCript.Shell")
Dim InstanceNumber
InstanceNumber = WScript.Arguments(0)
Dim ServiceAccount
ServiceAccount = WScript.Arguments(1)
Dim Password
Password = WScript.Arguments(2)
Dim Status, ExitCode
ExitCode = Shutdown(InstanceNumber, ServiceAccount, Password)
if ExitCode = 0 Then
Dim Stopped
Stopped = false
do while Not Stopped
Status = GetStatus( InstanceNumber, ServiceAccount, Password)
if Status = "Stopped" Then
Stopped = true
elseif Status = "NotFound" then
exit Do
else
WScript.Sleep 5000
end if
Loop
WScript.StdOut.WriteLine Status
else
WScript.StdOut.WriteLine "Error Shutting down " & InstanceNumber
end if
set wso = nothing
function Shutdown( instanceNumber, serviceAccount, password)
Dim oExec
set oExec = wso.Exec( "D:\usr\sap\DEV\DVEBMGS02\exe\sapcontrol.exe -user " & service Account & " " & password & " -function GetProcessList -format script -nr " & instanceNumber)
do while oEXec.Status = 0
WScript.Sleep 100
Loop
Shutdown = oExec.ExitCode
set oExec = nothing
end function
function GetStatus( instanceNumber, serviceAccount, password)
Dim Line, Result
Dim oExec
Result = "NotFound"
set oExec = wso.Exec( "D:\usr\sap\DEV\DVEBMGS02\exe\sapcontrol.exe -user " & service Account & " " & password & " -function GetProcessList -format script -nr " & instanceNumber)
do while oEXec.Status = 0
WScript.Sleep 100
Loop
do while not oExec.StdOut.AtEndOfStream
Line = oExec.StdOut.ReadLine
if InStr( Line, "0 textstatus:") then
Result = Right( Line, len(Line) - 14)
Exit do
end if
Loop
GetStatus = Result
set oExec = nothing
end function
Questo e' tutto, spero lo script vi sia utile cosi' come lo e' per il sottoscritto. Alla prossima. :)
giovedì 22 novembre 2007
Disabilitare la funzionalita' di Hybernate in Windows Vista
Come tutti sanno, la funzionalita' di Hybernate permette di spegnere una macchina windows e di conservare il lavoro fino al prossimo riavvio. Benissimo, la feature ha i suoi vantaggi... se non fosse per il fatto che sul disco vengono occupati una quantita' di giga bytes pari alle dimensioni della vostra memoria RAM.
Fino alla edizione XP di windows era possibile con pochi click e con agili movimenti della mano vostra mano destra, disabilitare o, abilitare questa caratteristica, ma con l'avvento di Windows Vista, be' ... le cose sono cambiate un po'. E' ancora possibile controllare la funzionalita' di hybernate della vostra macchina nuova fiammante che monta l'ultima versione del S.O. di casa Microsoft, state tranquilli, ma bisognera' agire da riga di comando:
1. Avviare il prompt di sistema con dirirtti amministrativi (se avete abilitato l'UAC)
2. digitate powercfg -h off per disabilitare l'hybernate(o powercfg -h on se vole abilitare l'hybernate) e premete il tasto invio.
Fino alla edizione XP di windows era possibile con pochi click e con agili movimenti della mano vostra mano destra, disabilitare o, abilitare questa caratteristica, ma con l'avvento di Windows Vista, be' ... le cose sono cambiate un po'. E' ancora possibile controllare la funzionalita' di hybernate della vostra macchina nuova fiammante che monta l'ultima versione del S.O. di casa Microsoft, state tranquilli, ma bisognera' agire da riga di comando:
1. Avviare il prompt di sistema con dirirtti amministrativi (se avete abilitato l'UAC)
2. digitate powercfg -h off per disabilitare l'hybernate(o powercfg -h on se vole abilitare l'hybernate) e premete il tasto invio.
Iscriviti a:
Post (Atom)