Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
I LIBRIdi
per Windows
AMMINISTRATIVI
SCRIPT
• Gestione dei servizi e delle applicazioni
• Condivisioni, connessioni e amministrazione
della rete AMMINISTRATIVI
60
per Windows
Francesco Lippo
60 SCRIPT AMMINISTRATIVI
PER WINDOWS
uante volte vi è capitato di voler
i libri di
60 SCRIPT
AMMINISTRATIVI per Windows
Francesco Lippo
Frontespizio 02/02/07 14:52 Pagina 2
Ind 31/01/07 17:18 Pagina 3
60 SCRIPT
AMMINISTRATIVI
Indice per Windows
INDICE
Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5
Cercare un file su più server . . . . . . . . . . . . . . . . . . . . . . . . . . . .7
Estrarre informazioni da un log . . . . . . . . . . . . . . . . . . . . . . . . . .7
Eliminare le condivisioni nascoste . . . . . . . . . . . . . . . . . . . . . . . .9
Check drive space . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11
Controllo hotfix su più server . . . . . . . . . . . . . . . . . . . . . . . . . .14
Ricercare una determinata patch su più computer . . . . . . . . . . .16
Controllo dei file modificati . . . . . . . . . . . . . . . . . . . . . . . . . . .18
Copia di una cartella su più server . . . . . . . . . . . . . . . . . . . . . .21
Creare file di log in base alla data . . . . . . . . . . . . . . . . . . . . . . .23
Cancellare file in base alla data . . . . . . . . . . . . . . . . . . . . . . . .24
Cancellare tutte le cartelle tranne le ultime 3 . . . . . . . . . . . . . .26
Controllo del numero d’istanze di un processo . . . . . . . . . . . . .28
Monitoring degli utenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30
Monitoring dei gruppi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33
Monitoring della creazione/cancellazione di file . . . . . . . . . . . .35
Monitoring dei servizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .38
Monitoring delle Server Connection . . . . . . . . . . . . . . . . . . . . .41
Monitoring delle condivisioni . . . . . . . . . . . . . . . . . . . . . . . . . .43
Elencare le condivisioni di più server . . . . . . . . . . . . . . . . . . . . .45
Salvare l’elenco delle condivisioni . . . . . . . . . . . . . . . . . . . . . . .47
Eseguire il ping verso un host con e senza WMI . . . . . . . . . . . . .50
Creare un report delle corrispondenze Server – Indirizzo IP . . . .52
Creare un report delle corrispondenze Server – MAC Address . .55
Ricercare una particolare applicazione DCOM . . . . . . . . . . . . . .58
Inviare una mail con e senza parametri . . . . . . . . . . . . . . . . . . .60
Intercettare l’evento SHUTDOWN . . . . . . . . . . . . . . . . . . . . . . .64
SQL Server Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65
DBF Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .67
Impostare l’expiration date su un gruppo di utenti . . . . . . . . . .69
60 SCRIPT
AMMINISTRATIVI
per Windows Indice
60 SCRIPT
AMMINISTRATIVI
Introduzione per Windows
INTRODUZIONE
Chi di voi ha deciso di sfogliare il presente libro per far-
sene un’idea sommaria ed immediata dei suoi contenu-
ti, si accorgerà subito di quale sia il taglio editoriale del-
l’intero testo. Questa raccolta di script, infatti, è nata per
lo più da problematiche reali, raccolte durante il tempo
ed opportunamente modificate per renderla maggior-
mente chiara a ciascuno di voi. Lo scopo di questo testo
è fornire un supporto a chi deve risolvere problemi ana-
loghi che, spesso, sembrano essere di semplice risolu-
zione.
In questo libro non troverete sicuramente lo script per-
fetto né tantomeno si può pensare che ci sia una rispo-
sta a tutto. Mi auguro tuttavia che attraverso qualche
modifica e la fusione tra due o più listati mostrati, qual-
cuno di voi possa essere in grado di portare a termine
parte dei propri compiti.
Il linguaggio utilizzato per realizzare questi script è
esclusivamente Visual Basic Script, coadiuvato in molti
casi dal potente WMI e qualche volta da ADSI.
Prima di lasciarvi, ancora una piccola nota sulle imple-
mentazioni che troverete nel testo. Tutti gli script sono
stati provati in un ambiente di produzione e su macchi-
ne Windows (XP/2000/2003). Per alcuni di essi è neces-
saria l’esecuzione su macchine del dominio all’interno
delle quali l’utente che lancia lo script, ha diritti ammi-
nistrativi sulla macchina corrente o su quella remota
sulla quale opera lo script. In altri casi, invece, sono state
previste le istruzioni utili a fornire le credenziali corrette
per agire su server remoti.
Per tutti quegli script che prevedono l’esecuzione di
azioni su più server in sequenza, è stato previsto un file
contenente l’elenco dei nomi o degli IP di questi sistemi.
60 SCRIPT
AMMINISTRATIVI
per Windows Introduzione
60 SCRIPT
AMMINISTRATIVI
Cercare un file su più server per Windows
Option Explicit
60 SCRIPT
AMMINISTRATIVI
per Windows Cercare un file su più server
' Leggi il file con l'elenco dei server e, per ognuno, cerca il file
' Per ipotesi, immaginiamo di dover cercare il file MyLibrary.DLL
' contenuto sotto %systemdir%\System32.
Do While Not LeggiFile.AtEndOfStream
' Preleva il nome del server su cui operare
ServerCorrente = LeggiFile.ReadLine
60 SCRIPT
AMMINISTRATIVI
Estrarre informazioni da un log per Windows
Loop
LogFile.Close
LeggiFile.Close
ESTRARRE INFORMAZIONI
DA UN LOG
Questo script d’esempio è basato su un problema reale che si è
dovuto risolvere ossia quello di leggere da un file di log deter-
minate informazioni, estraendo ad ogni ricorrenza della strin-
ga Failed after 3 retries questa e la riga precedente e generan-
do di conseguenza un nuovo file di log “pulito”. Il log di parten-
za, per semplice informazione, rappresentava il log di una migra-
zione di file da un sistema all’altro. La riga Failed after 3 retries
veniva scritta all’interno del log subito dopo quella del file (com-
pleto di percorso) che si stava tentando di copiare.
Option Explicit
60 SCRIPT
AMMINISTRATIVI
per Windows Estrarre informazioni da un log
RigaA = LeggiFile.ReadLine
RigaB = LeggiFile.ReadLine
60 SCRIPT
AMMINISTRATIVI
Eliminare le condivisioni nascoste per Windows
End If
Loop
LeggiFile.Close
LogFile.Close
ELIMINARE
LE CONDIVISIONI NASCOSTE
Il problema delle condivisioni nascoste è certamente uno tra
quelli che maggiormente possono creare problemi ad un siste-
mista. Questo perché, mentre da un lato si può prevenire la con-
divisione delle cosiddette Administrative Share (che vedremo in
un altro script), dall’altro non è possibile impedire che vengano
impostate share nascoste sui sistemi diverse da quest’ultime.
Per essere sicuri di eliminare tutte le condivisioni nascoste di
un sistema (quelle per intenderci che riportano il suffisso $) pos-
siamo ricorrere a WMI, avviando una query che, servendosi del-
la classe Win32_Share, cerchi proprio questo genere di nomi di
condivisione.
Al termine dell’avvio dello script, tutte le condivisioni nascoste,
esclusa la IPC$, verranno eliminate. Al riavvio, però, si tenga
presente che, se non diversamente predisposto con alcune mo-
difiche al Registry, tutte le restanti share amministrative (AD-
MIN$, C$, ecc.) verranno comunque ripristinate.
Option Explicit
60 SCRIPT
AMMINISTRATIVI
per Windows Check drive space
strComputer = "."
' Estrai le informazioni sulle condivisioni nascoste
Set objWMIService = GetObject("winmgmts:\\" & strComputer &
"\root\cimv2")
Set colShares = objWMIService.ExecQuery ("Select Name from
Win32_Share Where Name LIKE '%$'")
60 SCRIPT
AMMINISTRATIVI
Check drive space per Windows
Option Explicit
60 SCRIPT
AMMINISTRATIVI
per Windows Check drive space
If Drv.DriveType = 4 Then
DriveSpecification = "N/A"
Elseif Drv.FreeSpace < 1024^2 Then
DriveSpecification = FormatNumber(Drv.FreeSpace /1024,0)
& " KB"
Elseif Drv.FreeSpace < 10240^2 Then
DriveSpecification = FormatNumber(Drv.FreeSpace /(1024^2),2)
& " MB"
Else
DriveSpecification = FormatNumber(Drv.FreeSpace /(1024^2),0)
& " MB"
End If
60 SCRIPT
AMMINISTRATIVI
Controllo hotfix su più server per Windows
' Crea la stringa che andrà nel log. Volendo è possibile scartare
' una certa tipologia di drive.
DriveInfo = strDriveMsg & "Drive " & Drv.DriveLetter & " Spazio
Libero: " & DriveSpecification & vbCrlf
End If
Next
LogFile.Close
Option Explicit
60 SCRIPT
AMMINISTRATIVI
per Windows Controllo hotfix su più server
ServerCorrente = LeggiFile.ReadLine
' Ottieni la lista delle hotfix via WMI
Set objWMIService = GetObject("winmgmts:" &
"{impersonationLevel=impersonate}!\\" & ServerCorrente &
"\root\cimv2")
Set colListFixes = objWMIService.ExecQuery ("Select
Description,HotFixID,InstallDate,InstalledBy from
Win32_QuickFixEngineering")
LogFile.WriteLine "----------------------------------------------------------
--------"
LogFile.WriteLine vbTab & ServerCorrente
LogFile.WriteLine "----------------------------------------------------------
--------"
60 SCRIPT
AMMINISTRATIVI
Ricercare una determinata patch su più computer per Windows
LogFile.Close
LeggiFile.Close
Option Explicit
60 SCRIPT
AMMINISTRATIVI
per Windows Ricercare una determinata patch su più computer
PatchID = Wscript.Arguments(0)
' Leggi il file con l'elenco dei server e per ognuno controlla l'esistenza
' della patch.
LogFile.WriteLine "SERVER;PATCH"
60 SCRIPT
AMMINISTRATIVI
Controllo dei file modificati per Windows
ServerCorrente = LeggiFile.ReadLine
LeggiFile.Close
LogFile.Close
60 SCRIPT
AMMINISTRATIVI
per Windows Controllo dei file modificati
Option Explicit
LOGFolder = "C:\LogFiles"
Set FSO = CreateObject("Scripting.FileSystemObject")
Set FolderObject = FSO.GetFolder(LOGFolder)
Set FilesObject = FolderObject.Files
60 SCRIPT
AMMINISTRATIVI
Controllo dei file modificati per Windows
60 SCRIPT
AMMINISTRATIVI
per Windows Copia di una cartella su più server
If DateDiff("n",file.datelastmodified,now)>INTERVAL then
' Scatta allarme
Msgbox "Il file " & file.name & " da " &
DateDiff(IntervalExpr,file.DateLastModified,now) & _" " &
IntervalUnit(IntervalExpr) & "!!!",, "LISTA FILE"
End if
End if
Next
60 SCRIPT
AMMINISTRATIVI
Copia di una cartella su più server per Windows
Option Explicit
' Leggi il file che contiene l'elenco dei server su cui copiare la cartella
Set FSO = CreateObject("Scripting.FileSystemObject")
Set LeggiFile = FSO.OpenTextFile("ElencoServer.txt")
ServerCorrente = LeggiFile.ReadLine
DestinationFolder = "\\" & ServerCorrente & "\C$\"
60 SCRIPT
AMMINISTRATIVI
per Windows Creare file di log in base alla data
Loop
LeggiFile.Close
LogFile.Close
Option Explicit
60 SCRIPT
AMMINISTRATIVI
Cancellare file in base alla data per Windows
AnnoCorrente = Year(Date)
MeseCorrente = Month(Date)
GiornoCorrente = Day(Date)
LogFile.Close
CANCELLARE FILE
IN BASE ALLA DATA
Questo script consente di cancellare file temporanei (per ipote-
si .TMP) che non risultino avere una data di creazione pari al
mese corrente. Solitamente questo genere di attività si compio-
no su cartelle di appoggio che temporaneamente memorizzano
dati che poi, per una qualunque ragione, non vengono cancel-
lati.
Option Explicit
60 SCRIPT
AMMINISTRATIVI
per Windows Cancellare file in base alla data
Next
LogFile.Close
60 SCRIPT
AMMINISTRATIVI
Cancellare tutte le cartelle tranne le ultime 3 per Windows
CANCELLARE TUTTE
LE CARTELLE TRANNE
LE ULTIME 3
Questo script è nato da un’esigenza particolare ossia elimina-
re tutte le sottocartelle contenute all’interno di una cartella prin-
cipale conservando solo quelle relative agli ultimi 3 giorni. Per
ipotesi, le sottocartelle hanno un nome del tipo 20060927 (os-
sia nel formato AAAAMMGG). Tecnicamente lo script non è mol-
to complesso da realizzare. Occorre solo tenere conto della cor-
retta gestione dei giorni precedenti a quello corrente. Con un pò
di pazienza può essere migliorato parametrizzando il numero
di giorni da “mantenere” ed inserendo un comodo file di log.
Option Explicit
60 SCRIPT
AMMINISTRATIVI
per Windows Cancellare tutte le cartelle tranne le ultime 3
FolderName = "C:\Script"
Next
60 SCRIPT
AMMINISTRATIVI
Controllo del numero d’istanze di un processo per Windows
Option Explicit
60 SCRIPT
AMMINISTRATIVI
per Windows Monitoring degli utenti
strComputer = "."
Processo = "svchost.exe"
Istanze = 3
60 SCRIPT
AMMINISTRATIVI
Monitoring degli utenti per Windows
Option Explicit
Const EVENT_SUCCESS = 0
strComputer = "."
60 SCRIPT
AMMINISTRATIVI
per Windows Monitoring degli utenti
Case "__InstanceCreationEvent"
Messaggio = "E' stato creato l'utente: " &
UCase(objEventObject.TargetInstance.Name) & vbCrlf
Messaggio = Messaggio & "Ecco alcuni dettagli:" & vbCrlf
& "------------------------" & vbCrlf
Messaggio = Messaggio & "AccountType: " &
objEventObject.TargetInstance.AccountType & vbCrlf
Messaggio = Messaggio & "Description: " &
objEventObject.TargetInstance.Description & vbCrlf
Messaggio = Messaggio & "SID: " &
objEventObject.TargetInstance.SID
Wscript.Echo Messaggio
' Scrivi il messaggio nell'Application Log
objShell.LogEvent EVENT_SUCCESS, Messaggio
Case "__InstanceDeletionEvent"
Messaggio = "E' stato eliminato l'utente: " &
UCase(objEventObject.TargetInstance.Name) & vbCrlf
Messaggio = Messaggio & "Ecco alcuni dettagli:" & vbCrlf
& "------------------------" & vbCrlf
Messaggio = Messaggio & "AccountType: " &
objEventObject.TargetInstance.AccountType & vbCrlf
Messaggio = Messaggio & "Description: " &
objEventObject.TargetInstance.Description & vbCrlf
Messaggio = Messaggio & "SID: " &
objEventObject.TargetInstance.SID
Wscript.Echo Messaggio
' Scrivi il messaggio nell'Application Log
objShell.LogEvent EVENT_SUCCESS, Messaggio
End Select
60 SCRIPT
AMMINISTRATIVI
Monitoring dei gruppi per Windows
Loop
Option Explicit
Const EVENT_SUCCESS = 0
strComputer = "."
60 SCRIPT
AMMINISTRATIVI
per Windows Monitoring dei gruppi
Wscript.Echo Messaggio
objShell.LogEvent EVENT_SUCCESS, Messaggio
Case "__InstanceDeletionEvent"
Messaggio = "E' stato eliminato il gruppo: " &
UCase(objEventObject.TargetInstance.Name) & vbCrlf
Messaggio = Messaggio & "Ecco alcuni dettagli:" & vbCrlf
& "------------------------" & vbCrlf
60 SCRIPT
AMMINISTRATIVI
Monitoring della creazione/cancellazione di file per Windows
Wscript.Echo Messaggio
objShell.LogEvent EVENT_SUCCESS, Messaggio
End Select
Loop
MONITORING DELLA
CREAZIONE/CANCELLAZIONE
DI FILE
Abbiamo visto che, attraverso la classe WMI __InstanceOpera-
tionEvent, possiamo rilevare in tempo reale diversi cambiamen-
ti che avvengono all’interno di un sistema, specificando oppor-
tunamente le informazioni da monitorare. Ecco di seguito uno
script piuttosto particolare perché permette di tenere sotto con-
trollo i cambiamenti che avvengono all’interno di una cartella (nel-
l’esempio C:\Windows). Per maggiori dettagli si riporta al sito del-
la Microsoft
Nota: il controllo rimane attivo sino al riavvio del sistema o si-
no a quando non viene manualmente distrutto il processo wscript
o cscript relativo.
Option Explicit
60 SCRIPT
AMMINISTRATIVI
per Windows Monitoring della creazione/cancellazione di file
Const EVENT_SUCCESS = 0
strComputer = "."
' Crea l'oggetto FSO per ottenere info sui file creati/eliminati
Set FSO = CreateObject("Scripting.FileSystemObject")
60 SCRIPT
AMMINISTRATIVI
Monitoring della creazione/cancellazione di file per Windows
& "'Win32_Directory.Name=""c:\\\\Windows""'")
NameFile =
Mid(objEventObject.TargetInstance.PartComponent,FileNamePos+1,
Len(objEventObject.TargetInstance.PartComponent))
strPartComp =
objEventObject.TargetInstance.PartComponent
FilePath = Split(strPartComp, "CIM_DataFile.Name=")(1)
FilePath = Replace(FilePath, """", "")
FilePath = Replace(FilePath, "\\", "\")
60 SCRIPT
AMMINISTRATIVI
per Windows Monitoring dei servizi
strPartComp =
objEventObject.TargetInstance.PartComponent
FilePath = Split(strPartComp, "CIM_DataFile.Name=")(1)
FilePath: = Replace(FilePath, """", "")
FilePath = Replace(FilePath, "\\", "\")
Loop
60 SCRIPT
AMMINISTRATIVI
Monitoring dei servizi per Windows
Option Explicit
strComputer = "."
Const EVENT_SUCCESS = 0
60 SCRIPT
AMMINISTRATIVI
per Windows Monitoring dei servizi
ServiceStateToMon = "Stopped"
ServiceStartModeToMon = "Auto"
' Raccogli tutti gli eventi legati a servizi in automatic che vengono
fermati
60 SCRIPT
AMMINISTRATIVI
Monitoring dei servizi per Windows
ISA " _
& "'Win32_Service' AND (PreviousInstance.State <>
TargetInstance.State) AND " &
ServiceQuery)
fermato!"
' Scrivi il messaggio nell'Application Log
objShell.LogEvent EVENT_SUCCESS, "Il servizio: " &
UCase(objEventObject.TargetInstance.Name) & " è stato fermato!"
End Select
Loop
60 SCRIPT
AMMINISTRATIVI
per Windows Monitoring delle Server Connection
MONITORING
DELLE SERVER CONNECTION
L’utilizzo della classe WMI __InstanceOperationEvent è parti-
colarmente utile anche per rilevare tentativi d’intrusione. Ecco
un “semplice” esempio che rileva i tentativi di connessione ad
una qualunque risorsa del sistema considerato.
Nota: il controllo rimane attivo sino al riavvio del sistema o si-
no a quando non viene manualmente distrutto il processo wscript
o cscript relativo.
Option Explicit
Const EVENT_SUCCESS = 0
strComputer = "."
60 SCRIPT
AMMINISTRATIVI
Monitoring delle Server Connection per Windows
Do While True
Set objEventObject = colMonitoredEvents.NextEvent()
Wscript.Echo Messaggio
objShell.LogEvent EVENT_SUCCESS, Messaggio
Case "__InstanceDeletionEvent"
Messaggio = "La sessione aperta da " &
UCase(objEventObject.TargetInstance.UserName) _
& " su " & objEventObject.TargetInstance.ShareName
& " è stata eliminata"
Wscript.Echo Messaggio
objShell.LogEvent EVENT_SUCCESS, Messaggio
End Select
Loop
60 SCRIPT
AMMINISTRATIVI
per Windows Monitoring delle condivisioni
MONITORING DELLE
CONDIVISIONI
Oltre al controllo sulla creazione di Server Session, è possibile con-
trollare il tentativo di modifiche apportate alle condivisioni (crea-
zione, modifica e cancellazione). Anche questo esempio, come
i precedenti, sfrutta WMI.
Nota: il controllo rimane attivo sino al riavvio del sistema o si-
no a quando non viene manualmente distrutto il processo wscript
o cscript relativo.
Option Explicit
Const EVENT_SUCCESS = 0
strComputer = "."
60 SCRIPT
AMMINISTRATIVI
Monitoring delle condivisioni per Windows
Wscript.Echo Messaggio
objShell.LogEvent EVENT_SUCCESS, Messaggio
Case "__InstanceDeletionEvent"
Messaggio = "E' stata cancellata la share: " &
UCase(objEventObject.TargetInstance.Name) & vbCrlf
Messaggio = Messaggio & "Ecco alcuni dettagli:" & vbCrlf
& "------------------------" & vbCrlf
Messaggio = Messaggio & "Descrizione: " &
objEventObject.TargetInstance.Description & vbCrlf
Wscript.Echo Messaggio
objShell.LogEvent EVENT_SUCCESS, Messaggio
End Select
Loop
60 SCRIPT
AMMINISTRATIVI
per Windows Elencare le condivisioni di più server
ELENCARE LE CONDIVISIONI
DI PIÙ SERVER
Questo script consente di ottenere un file .CSV con la lista del-
le condivisioni di tutti i server indicati all’interno del file di testo
ElencoServer.txt. Come molti altri listati, si serve di WMI e più pre-
cisamente della classe Win32_Share.
Option Explicit
' Leggi il file con l'elenco dei server e, per ognuno, cerca
le condivisioni
60 SCRIPT
AMMINISTRATIVI
Salvare l’elenco delle condivisioni per Windows
LogFile.WriteLine "SERVER;NOME;PERCORSO"
LeggiFile.Close
LogFile.Close
SALVARE L’ELENCO
DELLE CONDIVISIONI
L’elenco delle condivisioni di un sistema è contenuto all’interno
di un’opportuna chiave del Registry indicata in testa allo script
60 SCRIPT
AMMINISTRATIVI
per Windows Salvare l’elenco delle condivisioni
Option Explicit
strComputer = "."
strKeyPath =
60 SCRIPT
AMMINISTRATIVI
Salvare l’elenco delle condivisioni per Windows
"System\CurrentControlSet\Services\LanmanServer\Shares"
Cont = 0
For Each ItemShare In colElencoShare
oReg.GetMultiStringValue
HKEY_LOCAL_MACHINE,strKeyPath,colElencoShare(Cont),
ColElencoShare2
LogFile.WriteLine colElencoShare(Cont)
For Cont2 = 0 To Ubound(colElencoShare2)
If Cont2 = 0 Then
LogFile.Write colElencoShare2(Cont2)
Else
LogFile.Write "," & colElencoShare2(Cont2)
End If
Next
Cont = Cont + 1
60 SCRIPT
AMMINISTRATIVI
per Windows Eseguire il ping verso un host con e senza WMI
LogFile.WriteLine
Next
LogFile.Close
Set FSO = Nothing
Set colElencoShare= Nothing
Set LogFile = Nothing
Set oReg = Nothing
Option Explicit
strComputer = "."
60 SCRIPT
AMMINISTRATIVI
Eseguire il ping verso un host con e senza WMI per Windows
ToHost = "127.0.0.1"
60 SCRIPT
AMMINISTRATIVI
per Windows Creare un report delle corrispondenze Server – Indirizzo IP
Option Explicit
60 SCRIPT
AMMINISTRATIVI
Creare un report delle corrispondenze Server – Indirizzo IP per Windows
ToHost = "127.0.0.1"
60 SCRIPT
AMMINISTRATIVI
per Windows Creare un report delle corrispondenze Server – Indirizzo IP
FirstBracket = Instr(PingResults,"[")
If FirstBracket <> 0 Then
SecondBracket = InstrRev(PingResults,"]")
IPAddress = Mid(PingResults, FirstBracket+1, SecondBracket-
FirstBracket-1)
LogFile.WriteLine ToHost & ";" & IPAddress
Else
LogFile.WriteLine ToHost & ";Sconosciuto"
End If
Loop
LogFile.Close
LeggiFile.Close
' ---------------------------------------------------------------------------------------
-------
' Nel caso il server supporti WMI, l’indirizzo IP può anche essere
ottenuto così:
' strComputer = "."
' Set objWMIService = GetObject( "winmgmts:\\" & strComputer &
"\root\cimv2")
' Set IPConfigSet = objWMIService.ExecQuery("SELECT IPAddress
FROM Win32_NetworkAdapterConfiguration" _
' & " WHERE IPEnabled = TRUE","WQL",
wbemFlagReturnImmediately + wbemFlagForwardOnly)
60 SCRIPT
AMMINISTRATIVI
Creare un report delle corrispondenze Server – MAC Address per Windows
Option Explicit
60 SCRIPT
AMMINISTRATIVI
per Windows Creare un report delle corrispondenze Server – MAC Address
corrente
Dim Descrizione ' Stringa che memorizza la descizione
dell'interfaccia di rete
Dim objMacAddress ' Generico item della collection
di MAC Address
Dim objLocator ' Oggetto WMI
ToHost = "127.0.0.1"
Utente = "MyDomain\Utente"
Password = "Password"
60 SCRIPT
AMMINISTRATIVI
Creare un report delle corrispondenze Server – MAC Address per Windows
ToHost = "-"
MACAddress = "-"
Descrizione = "-"
_
& "Win32_NetworkAdapterConfiguration WHERE
IPEnabled=True","WQL",
wbemFlagReturnImmediately + wbemFlagForwardOnly)
Loop
60 SCRIPT
AMMINISTRATIVI
per Windows Ricercare una particolare applicazione DCOM
LogFile.Close
LeggiFile.Close
Option Explicit
60 SCRIPT
AMMINISTRATIVI
Inviare una mail con e senza parametri per Windows
If Wscript.Arguments.Count = 0 Then
DCOMApp = Inputbox ("Inserire il CLSID dell'applicazione:",
"Inserimento DCOM CLSID")
Else
' Leggi l’argomento passato allo script che indica il CLSID
DCOMApp = Wscript.Arguments(0)
End If
60 SCRIPT
AMMINISTRATIVI
per Windows Inviare una mail con e senza parametri
Option explicit
Const SMTP_PORT = 25
60 SCRIPT
AMMINISTRATIVI
Inviare una mail con e senza parametri per Windows
60 SCRIPT
AMMINISTRATIVI
per Windows Inviare una mail con e senza parametri
= Wscript.Arguments.Named("MailFrom")
If Wscript.Arguments.Named.Exists("DescrFrom") Then
DescrizioneMittente = Wscript.Arguments.Named("DescrFrom")
If Wscript.Arguments.Named.Exists("MailTo") Then Destinatario =
Wscript.Arguments.Named("MailTo")
If Wscript.Arguments.Named.Exists("Subject") Then Oggetto =
Wscript.Arguments.Named("Subject")
If Wscript.Arguments.Named.Exists("BodyMsg") Then Testo =
Wscript.Arguments.Named("BodyMsg")
If Wscript.Arguments.Named.Exists("SMTPServer") Then SMTPServer
= Wscript.Arguments.Named("SMTPServer")
If Wscript.Arguments.Named.Exists("Attach") Then AttachmentFile =
Wscript.Arguments.Named("Attach")
.From = Mittente
.To = Destinatario
.Subject = Oggetto
.Textbody = Testo
.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") =
2
.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") =
60 SCRIPT
AMMINISTRATIVI
Inviare una mail con e senza parametri per Windows
SMTPServer
.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/
smtpserverport") = SMTP_PORT
60 SCRIPT
AMMINISTRATIVI
per Windows Intercettare l’evento SHUTDOWN
INTERCETTARE
L’EVENTO SHUTDOWN
Per intercettare lo spegnimento di un server possiamo lanciare
una query asincrona sfruttando WMI. Malgrado l’utilità di que-
sto script possa essere “dubbia”, credo sia interessante com-
prenderne il funzionamento per imparare ad utilizzare gli uti-
lissimi oggetti SwbemSink di WMI.
Option Explicit
strComputer = "."
Set objWMIService =
GetObject("winmgmts:{impersonationLevel=impersonate,
(Security)}!\\" & strComputer & "\root\cimv2")
60 SCRIPT
AMMINISTRATIVI
SQL Server Connection per Windows
End Sub
Option Explicit
If (FSO.FileExists("Rubrica.log")) Then
60 SCRIPT
AMMINISTRATIVI
per Windows SQL Server Connection
FileRubrica.Close
60 SCRIPT
AMMINISTRATIVI
DBF Connection per Windows
DBF CONNECTION
In alcune realtà esistono ancora i vecchi archivi DBF. Anche se ap-
parentemente possono costituire un problema, la loro gestio-
ne non è molto diversa da quanto visto in precedenza. Pertan-
to non dovrebbe essere complicato intuirne le differenze.
Option Explicit
Dim FSO ' Oggetto File System Object
Dim FileRubrica ' File che conterrà i risultati
Dim Conn ' Oggetto ADODB.Connection
Dim Tabella ' Tabella (archivio DBF)
Dim Path ' Percorso del file DBF
Dim OpenDBFConn ' Oggetto ADODB.Connection
Dim QueryStr ' Stringa che identifica la query al DB
Path = "\\Server\C$\Archivio\"
If (FSO.FileExists("Rubrica.log")) Then
Set FileRubrica= FSO.OpenTextFile("Rubrica.log",8)
Else
Set FileRubrica= FSO.CreateTextFile("Rubrica.log", True)
End If
60 SCRIPT
AMMINISTRATIVI
per Windows Impostare l’expiration date su un gruppo di utenti
FileRubrica.Close
IMPOSTARE L’EXPIRATION
DATE SU UN GRUPPO DI UTENTI
Questo script utilizza ADSI per impostare l’expiration date di un
gruppo di utenti specificati all’interno di un file d’input. Lo script
preleva dal file ElencoDN.txt tutti i Distinguished Name degli
60 SCRIPT
AMMINISTRATIVI
Impostare l’expiration date su un gruppo di utenti per Windows
CN=Pippo1,CN=Users,DC=Mydomain,DC=it
CN=Pippo2,CN=Users,DC=Mydomain,DC=it
Option Explicit
' Leggi il file con l'elenco dei Distinguished Name degli utenti
' da modificare
Do While Not LeggiFile.AtEndOfStream
60 SCRIPT
AMMINISTRATIVI
per Windows Verificare se un giorno equivale ad un weekend
CurrentUserDN = LeggiFile.ReadLine
Loop
LogFile.Close
LeggiFile.Close
VERIFICARE SE UN GIORNO
EQUIVALE AD UN WEEKEND
Ecco un comodissimo script che consente di recuperare il gior-
no di una settimana per consentire d’intraprendere le giuste
azioni. Questo script, in particolare, è utile per comprendere ed
apprezzare l’oggetto Dictionary di VBS, utilizzato anche in altri
script ed in questa sede in luogo delle apposite costanti messe
60 SCRIPT
AMMINISTRATIVI
Verificare se un giorno equivale ad un weekend per Windows
a disposizione da VBScript.
Option Explicit
60 SCRIPT
AMMINISTRATIVI
per Windows Elencare gli utenti di un gruppo locale specificato
strComputer = "."
Gruppo = "Administrators"
Messaggio = "Elenco dei membri del gruppo " & Gruppo & vbCrlf &
vbCrlf
60 SCRIPT
AMMINISTRATIVI
Leggere una chiave del Registry sul sistema locale per Windows
Option Explicit
60 SCRIPT
AMMINISTRATIVI
per Windows Leggere una chiave del Registry su un sistema remoto
RegKey = "HKEY_LOCAL_MACHINE\SOFTWARE\Network
Associates\TVD\Shared Components\VirusScan Engine\4.0.xx\"
Wscript.Echo "Engine Version: " & vbTab & EngineVer & vbCrlf &
"Virus Definition: " & vbTab &VirDef
Option Explicit
60 SCRIPT
AMMINISTRATIVI
Leggere una chiave del Registry su un sistema remoto per Windows
VirDef = "szVirDefVer"
EngineVer = "szEngineVer"
60 SCRIPT
AMMINISTRATIVI
per Windows Leggere una chiave del Registry su un sistema remoto
' Leggi il file con l'elenco dei server e, per ognuno, leggi
' le informazioni che trovi nel Registry
ServerCorrente = LeggiFile.ReadLine
Set rRegistry = GetObject("winmgmts:{impersonationLevel
=impersonate}//" & _
ServerCorrente & "/root/default:StdRegProv")
rRegistry.GetStringValue
HKEY_LOCAL_MACHINE,strKeyPath,VirDef,VirDef
rRegistry.GetStringValue
HKEY_LOCAL_MACHINE,strKeyPath,EngineVer,EngineVer
LogFile.WriteLine ServerCorrente & ";" & VirDef & ";" & EngineVer
& ";"
Loop
LogFile.Close
LeggiFile.Close
60 SCRIPT
AMMINISTRATIVI
Disabilitare le Administrative Shares per Windows
DISABILITARE
LE ADMINISTRATIVE SHARES
Le share amministrative, com’è facile intuire, rappresentano del-
le condivisioni nascoste che vengono precaricate all’avvio di un
sistema proprio per consentire di effettuare operazioni ammini-
strative sulle macchine. In realtà, però, questo genere di condi-
visioni, in alcuni ambienti, sono inutili e, comunque, costitui-
scono per certi versi un punto debole della sicurezza del siste-
ma stesso. Comunque sia, per evitare che vengano ripristinate
ad ogni riavvio del sistema, possiamo disabilitarle intervenendo
direttamente sul registro di sistema. La procedura varia legger-
mente a seconda se la macchina è un server o una workstation.
Option Explicit
Dim strComputer ' Computer sul quale operare
Dim objWMIService ' Oggetto WMI
Dim colOperatingSystems ' Collection d'informazioni
sul sistema operativo
Dim objOperatingSystem ' Item della
collection colOperatingSystem
Dim WshShell ' Oggetto WShell
Dim strAdminShare ' Chiave del Registry con le impostazioni
delle share amministrative
Dim SystemType ' Identifica il tipo di sistema
strComputer = "."
Set objWMIService =
GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &
strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery("Select
60 SCRIPT
AMMINISTRATIVI
per Windows Disabilitare le Administrative Shares
SystemType = objOperatingSystem.ProductType
Next
60 SCRIPT
AMMINISTRATIVI
Disabilitare le Administrative Shares per Windows
Case Else
' Il sistema operativo è un SERVER
60 SCRIPT
AMMINISTRATIVI
per Windows Leggere un file INI
&
"LanManServer\Parameters\AutoShareServer",0, "REG_DWORD"
End If
End Select
Option Explicit
60 SCRIPT
AMMINISTRATIVI
Leggere un file INI per Windows
Riga = LeggiFile.ReadLine
' Wscript.Echo Riga
If SezioneTrovata = 1 Then
' La sezione è stata trovata. Cerchiamo il parametro
' Fermati se incontri prima un'altra sezione. Questo
' significherebbe che il parametro non esiste.
If MID(Riga,1,1) = "[" Then
Wscript.Echo "Il parametro selezionato non esiste!"
Wscript.quit
End If
60 SCRIPT
AMMINISTRATIVI
per Windows Scrivere in un file INI
End If
If ParamTrovato = 0 Then
Wscript.Echo "Ricerca parametro fallita!"
End If
LeggiFile.Close
60 SCRIPT
AMMINISTRATIVI
Scrivere in un file INI per Windows
Option Explicit
SezioneTrovata = 0
ParamTrovato = 0
FileINI = "Configurazione.ini"
FileINI2 = "Configurazione.new"
60 SCRIPT
AMMINISTRATIVI
per Windows Scrivere in un file INI
Riga = LeggiFile.ReadLine
60 SCRIPT
AMMINISTRATIVI
Scrivere in un file INI per Windows
End If
End If
' Scrivi la riga nel nuovo file
NewFileINI.WriteLine Riga
Loop
FSO.DeleteFile FileINI
Set newFileINI = Nothing
60 SCRIPT
AMMINISTRATIVI
per Windows Ricercare e disinstallare un programma
RICERCARE E DISINSTALLARE
UN PROGRAMMA
Spesso può essere necessario rimuovere un determinato softwa-
re che si è scoperti essere stato installato “clandestinamente”.
Lo script necessita della stringa precisa del programma incrimi-
nato, ottenuta attraverso l’utilizzo della classe WMI Win32_Pro-
duct. Attraverso un’opportuna query WMI su questa classe e
mediante il metodo Uninstall(), il programma può essere disni-
stallato dal sistema.
Option Explicit
strComputer = "."
NomeProgramma = "<Inserire qui la stringa che identifica
il software>"
60 SCRIPT
AMMINISTRATIVI
Comparare due file per Windows
60 SCRIPT
AMMINISTRATIVI
per Windows Comparare due file
Option Explicit
FileA = "File1.txt"
FileB = "File2.txt"
60 SCRIPT
AMMINISTRATIVI
Ricercare una stringa all’interno di una cartella per Windows
Option Explicit
Folder = "C:\Temp"
colFiles = "*.log"
StringaDaCercare = "LIPPO"
60 SCRIPT
AMMINISTRATIVI
per Windows Ricercare una stringa all’interno di una cartella
Occorrenze = 1
If Occorrenze = 1 Then
' Adesso creati un file temporaneo per i risultati
Set FSO = CreateObject("Scripting.FileSystemObject")
60 SCRIPT
AMMINISTRATIVI
Informazioni sugli attributi di un file per Windows
LogFile.Close
INFORMAZIONI SUGLI
ATTRIBUTI DI UN FILE
Questo è un semplicissimo script al quale viene passato il nome
di un file, completo di path e viene visualizzato a video l’elen-
co degli attributi. Lo script controlla sia l’esistenza del file sia
la possibilità che il parametro passato corrisponda ad una direc-
tory.
Option Explicit
' ----------------------------------------------------------------------------------
' ATTRIBUTI:
'
60 SCRIPT
AMMINISTRATIVI
per Windows Informazioni sugli attributi di un file
60 SCRIPT
AMMINISTRATIVI
Informazioni sugli attributi di un file per Windows
Sub ElencaAttributi(objFile2)
' Attributi del file. Alcuni sono di sola lettura, altri di lettura/
scrittura
' HIDDEN
If (objFile2.Attributes And 2) Then
ElencoAttributi = ElencoAttributi & "H"
End If
' READ ONLY
If (objFile2.Attributes And 1) Then
ElencoAttributi = ElencoAttributi & "R"
End If
' SYSTEM
If (objFile2.Attributes And 4) Then
ElencoAttributi = ElencoAttributi & "S"
End If
60 SCRIPT
AMMINISTRATIVI
per Windows Avviare un’installazione remota
' VOLUME
If (objFile2.Attributes And 8) Then
ElencoAttributi = ElencoAttributi & "V"
End If
' DIRECTORY
If (objFile2.Attributes And 16) Then
ElencoAttributi = ElencoAttributi & "D"
End If
' ARCHIVE
If (objFile2.Attributes And 32) Then
ElencoAttributi = ElencoAttributi & "A"
End If
' ALIAS
If (objFile2.Attributes And 64) Then
ElencoAttributi = ElencoAttributi & "L"
End If
' COMPRESSED
If (objFile2.Attributes And 2048) Then
ElencoAttributi = ElencoAttributi & "C"
End If
Msgbox ElencoAttributi
End Sub
AVVIARE
UN’INSTALLAZIONE REMOTA
Un’esigenza ricorrente in un ambiente di rete è quella d’instal-
60 SCRIPT
AMMINISTRATIVI
Avviare un’installazione remota per Windows
Option Explicit
60 SCRIPT
AMMINISTRATIVI
per Windows Avviare un’installazione remota
Password = "MyPassword"
LogFile.WriteLine "SERVER;RESULT"
' Leggi il file con l'elenco dei server e, per ognuno avvia
' l'installazione del programma
Do While Not LeggiFile.AtEndOfStream
ServerCorrente = LeggiFile.ReadLine
60 SCRIPT
AMMINISTRATIVI
Rinominare tutti i file di una cartella per Windows
If Result = 0 Then
LogFile.WriteLine ServerCorrente & ";OK"
Else
LogFile.WriteLine ServerCorrente & ";ERRORE"
End If
Loop
LeggiFile.Close
LogFile.Close
RINOMINARE TUTTI
I FILE DI UNA CARTELLA
Come fa intuire il nome stesso, questo script permette di rino-
minare tutti i file di un certo tipo contenuti all’interno di una
certa cartella.
Option Explicit
60 SCRIPT
AMMINISTRATIVI
per Windows Rinominare tutti i file di una cartella
If FSO.FolderExists(SourceFolder) Then
Set colFiles = FSO.GetFolder(SourceFolder)
Else
Wscript.Echo "La cartella specificata non esiste"
Wscript.Quit
End If
60 SCRIPT
AMMINISTRATIVI
Rinominare/Spostare una cartella su più server per Windows
RINOMINARE/SPOSTARE
UNA CARTELLA SU PIÙ SERVER
Questo script sposta semplicemente una cartella sorgente in un
altro punto del disco ed effettua l’operazione su diversi server.
Option Explicit
60 SCRIPT
AMMINISTRATIVI
per Windows Rinominare/Spostare una cartella su più server
SourceFolder = "C:\SourceFolder"
DestinationFolder = "C:\DestFolder"
' Leggi il file che contiene l'elenco dei server su cui copiare
' la cartella
Set FSO = CreateObject("Scripting.FileSystemObject")
Set LeggiFile = FSO.OpenTextFile("ElencoServer.txt")
60 SCRIPT
AMMINISTRATIVI
Abilitare le NULL Session Share per Windows
LeggiFile.Close
LogFile.Close
Option Explicit
60 SCRIPT
AMMINISTRATIVI
per Windows Abilitare le NULL Session Share
' On a new line in the NullSessionPipes key, type the name of the pipe
that you want to access with a null session.
' 5. Locate And click the following key In the registry:
' HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA
' 6. On the Edit menu, click Add Value, and then add the following
registry value:
' Value Name: RestrictAnonymous
' Data Type: REG_DWORD
' Value: 0
60 SCRIPT
AMMINISTRATIVI
Abilitare le NULL Session Share per Windows
strComputer = "."
strKeyPath =
"System\CurrentControlSet\Services\LanmanServer\Parameters"
' Leggi le impostazioni dal Registry (ossia l'elenco delle Null Session
Share)
colNullSessionShare = WshShell.RegRead("HKEY_LOCAL_
MACHINE\System\CurrentControlSet\Services" _
&
"\LanmanServer\Parameters\NullSessionShares")
60 SCRIPT
AMMINISTRATIVI
per Windows Elencare le NULL Session Share
Cont = 0
' PS: Allo stesso modo si può procedere per le Null Session Pipes...
60 SCRIPT
AMMINISTRATIVI
Elencare le NULL Session Share per Windows
denziato.
Option Explicit
' Ecco dove sono memorizzate le null session share e le null session
pipes(fonte MS)
' http://support.microsoft.com/?scid=kb%3
Ben-us%3B289655&x=19&y=11
'
' > NULL SESSION SHARE <
'
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Lanman
Server\Parameters\NullSessionShares
' > NULL SESSION PIPES <
'
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Lanman
Server\Parameters\NullSessionPipes
strComputer = "."
Set objWMIService =
GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &
strComputer & "\root\cimv2")
60 SCRIPT
AMMINISTRATIVI
per Windows Modificare la password di un utente su più server
colNullSessionPipes = WshShell.RegRead("HKEY_LOCAL_
MACHINE\System\CurrentControlSet\Services" _
&
"\LanmanServer\Parameters\NullSessionPipes")
MODIFICARE LA PASSWORD
DI UN UTENTE SU PIÙ SERVER
Questo script consente di modificare la password di un utente
locale presente su più server. Allo stesso modo di quanto visto
in precedenti script, questo preleva il nome del server su cui
60 SCRIPT
AMMINISTRATIVI
Modificare la password di un utente su più server per Windows
Option Explicit
ServerCorrente = LeggiFile.ReadLine
60 SCRIPT
AMMINISTRATIVI
per Windows Ottenere l’elenco dei job schedulati
Loop
LeggiFile.Close
LogFile.Close
OTTENERE L’ELENCO
DEI JOB SCHEDULATI
Questo script elenca tutti i job schedulati su di un sistema sem-
plicemente elencando tutti i file .JOB che si trovano nella cartel-
la %WinDir%\Tasks. La directory d’installazione di Windows
può essere ottenuta in vari modi. Qui è stato sfruttato WMI. Un
altro sistema è utilizzare un’istruzione del tipo WshShell.Expan-
60 SCRIPT
AMMINISTRATIVI
Ottenere l’elenco dei job schedulati per Windows
dEnvironmentStrings("%WINDIR%").
Option Explicit
strComputer = "."
60 SCRIPT
AMMINISTRATIVI
per Windows Ottenere la lista dei processi e dei relativi thread
Wscript.Echo "Ecco l'elenco dei job" & vbCrlf & vbCrlf & ListaJob
60 SCRIPT
AMMINISTRATIVI
Ottenere la lista dei processi e dei relativi thread per Windows
Option Explicit
60 SCRIPT
AMMINISTRATIVI
per Windows Ottenere la lista dei processi e dei relativi thread
ServerCorrente = LeggiFile.ReadLine
60 SCRIPT
AMMINISTRATIVI
Ottenere la lista dei processi e dei relativi thread per Windows
LeggiFile.Close
LogFile.Close
60 SCRIPT
AMMINISTRATIVI
per Windows Impostare l’IP Address da statico a dinamico
Option Explicit
' Inserisci “alcuni” dei possibili msg di errore (sito MS) legati
all’operazione
DictErr.Add "0", "Successful completion, no reboot required."
DictErr.Add "1", "Successful completion, reboot required."
DictErr.Add "64", "Method Not supported On this platform."
DictErr.Add "65", "Unknown failure."
DictErr.Add "74", "Invalid host name."
DictErr.Add "79", "Invalid security parameter."
DictErr.Add "80", "Unable To configure TCP/IP service."
DictErr.Add "81", "Unable To configure DHCP service."
DictErr.Add "82", "Unable To renew DHCP lease."
60 SCRIPT
AMMINISTRATIVI
Ottenere informazioni sulle variabili d’ambiente per Windows
strComputer = "."
Set objWMIService =
GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &
strComputer & "\root\cimv2")
If colNetAdapters.Count = 0 Then
Wscript.Echo "Non ci sono Network Adapter da configurare"
Wscript.Quit
End If
OTTENERE INFORMAZIONI
SULLE VARIABILI D’AMBIENTE
Molti degli script che vengono implementati in un ambiente di
60 SCRIPT
AMMINISTRATIVI
per Windows Ottenere informazioni sulle variabili d’ambiente
Option Explicit
strComputer = "."
60 SCRIPT
AMMINISTRATIVI
Svuotare la cartella di Prefetch per Windows
SVUOTARE
LA CARTELLA DI PREFETCH
Il prefetching è una tecnica in base alla quale Windows XP “ten-
ta” di aumentare le performance del sistema operativo creando
dei file .PF, all’interno di un’apposita cartella, per velocizzare
l’esecuzione dei programmi. Senza entrare troppo nel dettaglio,
questo meccanismo finisce ben presto con l’occupare spazio di-
sco che dovrebbe essere periodicamente liberato. Ecco un sem-
plicescript che fa questo lavoro. In quest’esempio, come in qual-
che altro, è stata variata la modalità di accesso al sistema, uti-
lizzando per l’appunto, un oggetto WMI istanziato con l’istruzio-
ne CreateObject("WbemScripting.SwbemLocator"). Attraverso
esso, come vedremo, vengono passate le informazioni di auten-
ticazione utili ad accedere alla macchina.
60 SCRIPT
AMMINISTRATIVI
per Windows Svuotare la cartella di Prefetch
Option Explicit
Utente = "MyDomain\FLIPPO"
Password = "MyPassword"
' Leggi il file che contiene l'elenco dei server su cui copiare
' la cartella
Set FSO = CreateObject("Scripting.FileSystemObject")
Set LeggiFile = FSO.OpenTextFile("ElencoServer.txt")
60 SCRIPT
AMMINISTRATIVI
Svuotare la cartella di Prefetch per Windows
60 SCRIPT
AMMINISTRATIVI
per Windows Avviare il controllo antivirus su di una cartella
Loop
LeggiFile.Close
LogFile.Close
AVVIARE IL CONTROLLO
ANTIVIRUS SU DI UNA CARTELLA
Lo script che stiamo per mostrare, assieme ad alcuni che lo se-
guiranno, è molto particolare. Senza entrare troppo nei dettagli,
diciamo che, attraverso l’utilizzo di opportuni oggetti (Shell
Object), possiamo avviare azioni molto particolari su cartelle,
sul cestino, ecc. L’argomento è senza dubbio difficile da spie-
gare in questa sede ed in poche righe. Oltretutto esula dall’obiet-
tivo che mi sono prefisso scrivendo questo libro e pertanto non
aggiungerò null’altro a riguardo. Tuttavia, seguiranno altri script
“simili” che dovrebbero aiutare a comprenderne meglio il fun-
zionamento.
Tornando a questo, invece, possiamo solo aggiungere qualche
60 SCRIPT
AMMINISTRATIVI
Avviare il controllo antivirus su di una cartella per Windows
Option Explicit
60 SCRIPT
AMMINISTRATIVI
per Windows Avviare il controllo antivirus su di una cartella
Const ssfDRIVES = 17
60 SCRIPT
AMMINISTRATIVI
Determinare gli utenti in modalità console per Windows
Option Explicit
60 SCRIPT
AMMINISTRATIVI
per Windows Determinare gli utenti in modalità console
60 SCRIPT
AMMINISTRATIVI
Determinare gli utenti in modalità console per Windows
ServerCorrente = LeggiFile.ReadLine
' Wscript.Echo "Sto processando il server " & ServerCorrente
Loop
LogFile.Close
60 SCRIPT
AMMINISTRATIVI
per Windows Eliminare una connessione di rete
LeggiFile.Close
ELIMINARE UNA
CONNESSIONE DI RETE
Anche questo script utilizza le tecniche viste in precedenza e,
malgrado il raggiungimento di quest’operazione poteva essere
portato a termine in altro modo, il codice riportato dovrebbe
aiutare ad avvicinare l’utente che ne farà uso con meno diffiden-
za. Lo scopo dello script è proprio quello di eliminare una con-
nessione (per ipotesi quella di Loopback).
Option Explicit
60 SCRIPT
AMMINISTRATIVI
Eliminare una connessione di rete per Windows
Const ssfCONTROLS = 3
60 SCRIPT
AMMINISTRATIVI
per Windows Disabilitare una connessione di rete
Wscript.Echo "L'item " & ItemToSearch & " non è stato trovato."
Wscript.Quit
End If
DISABILITARE
UNA CONNESSIONE DI RETE
Anche questo script utilizza le tecniche viste in precedenza e,
malgrado il raggiungimento di quest’operazione poteva essere
portato a termine in altro modo, il codice riportato dovrebbe
60 SCRIPT
AMMINISTRATIVI
Disabilitare una connessione di rete per Windows
Option Explicit
Const ssfCONTROLS = 3
60 SCRIPT
AMMINISTRATIVI
per Windows Disabilitare una connessione di rete
60 SCRIPT
AMMINISTRATIVI
Disabilitare una connessione di rete per Windows
Option Explicit
Const ssfRECENT = 8
60 SCRIPT
AMMINISTRATIVI
per Windows Disabilitare una connessione di rete
Msgbox ListaDocRecenti
Option Explicit
Const ssfBITBUCKET = 10
60 SCRIPT
AMMINISTRATIVI
Controllare l’abilitazione al controllo remoto per Windows
Const iColumn = 3
CONTROLLARE L’ABILITAZIONE
AL CONTROLLO REMOTO
Questo script crea un report di tutti i sistemi che hanno preim-
postato l’accesso al sistema mediante Remote Desktop. Per ef-
fettuare questo controllo, lo script verifica il valore di una oppor-
tuna chiave del Registry denominata fsDenyTSConnections.
Option Explicit
60 SCRIPT
AMMINISTRATIVI
per Windows Controllare l’abilitazione al controllo remoto
fDenyTSConnection = "fDenyTSConnections"
60 SCRIPT
AMMINISTRATIVI
Controllare l’abilitazione al controllo remoto per Windows
If (FSO.FileExists("ReportTS.csv")) Then
Set LogFile = FSO.OpenTextFile("ReportTS.csv",8)
Else
Set LogFile = FSO.CreateTextFile("ReportTS.csv", True)
End If
' Leggi il file con l'elenco dei server e, per ognuno, leggi
' le informazioni che trovi nel Registry
dwfDenyTSConnection = 0
ServerCorrente = LeggiFile.ReadLine
strKeyPath = "SYSTEM\CurrentControlSet\Control\Terminal
Server"
60 SCRIPT
AMMINISTRATIVI
per Windows Controllare l’esecuzione di uno script
RetVal = rRegistry.GetDWORDValue
(HKEY_LOCAL_MACHINE,strKeyPath,fDenyTSConnection,dwfDenyTSC
onnection)
Loop
LeggiFile.Close
LogFile.Close
CONTROLLARE
L’ESECUZIONE DI UNO SCRIPT
Questo piccolo script consente di controllare se un determina-
60 SCRIPT
AMMINISTRATIVI
Controllare l’esecuzione di uno script per Windows
to “altro” script VBS sta girando ed, in caso non lo fosse, con-
sente di avviarlo in maniera nascosta. Per ipotesi, il nome del-
lo script, completo di percorso, è C:\IPAddress.vbs. Questo pic-
colo programma cerca tra i processi la lista di quelli denomina-
ti wscript o cscript. In seguito, senza preoccuparsi se la collec-
tion è formata da almeno un elemento (lo è sicuramente perché
lo script corrente crea proprio un processo di questo tipo), cer-
ca nella proprietà CommandLine che riporta l’esatto comando
avviato (qualcosa del tipo “c:\cscript.exe” “c:\IPAddress.vbs”).
Se non trova nulla, allora mostra un popup per 3 secondi e poi
avvia un processo nascosto che lancia il vbs.
Option Explicit
Const POPUP_DURATION = 3
Const OK_BUTTON = 0
Const HIDDEN_WINDOW = 12
60 SCRIPT
AMMINISTRATIVI
per Windows Controllare l’esecuzione di uno script
NomeScript = "C:\IPAddress.vbs"
strComputer = "."
Trovato = False
"Errore", OK_BUTTON
Set newProcess =
GetObject("winmgmts:root\cimv2:Win32_Process")
60 SCRIPT
AMMINISTRATIVI
Eseguire uno script direttamente su macchine remote per Windows
60 SCRIPT
AMMINISTRATIVI
per Windows Eseguire uno script direttamente su macchine remote
Option Explicit
60 SCRIPT
AMMINISTRATIVI
Eseguire uno script direttamente su macchine remote per Windows
ServerCorrente = LeggiFile.ReadLine
Set objRegProv =
GetObject("winmgmts:{impersonationLevel=Impersonate}" & _
"!\\" & ServerCorrente &
"\root\default:StdRegProv")
objRegProv.SetStringValue
HKEY_LOCAL_MACHINE,strKeyPath,"Remote","1"
60 SCRIPT
AMMINISTRATIVI
per Windows Eseguire uno script direttamente su macchine remote
Loop
Sub Remote_Error
End Sub
LeggiFile.Close
LogFile.Close
60 SCRIPT
AMMINISTRATIVI
IIS: Prelevare informazioni sui Web Site per Windows
Option Explicit
60 SCRIPT
AMMINISTRATIVI
per Windows IIS: Prelevare informazioni sui Web Site
Const MD_SERVER_STATE_STARTING = 1
Const MD_SERVER_STATE_STARTED = 2
Const MD_SERVER_STATE_STOPPING = 3
Const MD_SERVER_STATE_STOPPED = 4
Const MD_SERVER_STATE_PAUSING = 5
Const MD_SERVER_STATE_PAUSED = 6
Const MD_SERVER_STATE_CONTINUING = 7
SiteStatus(1) = "STARTING"
SiteStatus(2) = "STARTED"
SiteStatus(3) = "STOPPING"
SiteStatus(4) = "STOPPED"
SiteStatus(5) = "PAUSING"
SiteStatus(6) = "PAUSED"
SiteStatus(7) = "CONTINUING"
SiteStatus(8) = "SCONOSCIUTO"
If WScript.Arguments.Named.Exists("SERVER") Then
ServerIIS = WScript.Arguments.Named("SERVER")
Else
ServerIIS = "localhost"
End If
60 SCRIPT
AMMINISTRATIVI
IIS: Prelevare informazioni sugli FTP Site per Windows
60 SCRIPT
AMMINISTRATIVI
per Windows IIS: Prelevare informazioni sugli FTP Site
Option Explicit
Const MD_SERVER_STATE_STARTING = 1
Const MD_SERVER_STATE_STARTED = 2
Const MD_SERVER_STATE_STOPPING = 3
Const MD_SERVER_STATE_STOPPED = 4
Const MD_SERVER_STATE_PAUSING = 5
Const MD_SERVER_STATE_PAUSED = 6
Const MD_SERVER_STATE_CONTINUING = 7
SiteStatus(1) = "STARTING"
SiteStatus(2) = "STARTED"
SiteStatus(3) = "STOPPING"
SiteStatus(4) = "STOPPED"
SiteStatus(5) = "PAUSING"
SiteStatus(6) = "PAUSED"
SiteStatus(7) = "CONTINUING"
SiteStatus(8) = "SCONOSCIUTO"
If WScript.Arguments.Named.Exists("SERVER") Then
ServerIIS = WScript.Arguments.Named("SERVER")
Else
ServerIIS = "localhost"
End If
60 SCRIPT
AMMINISTRATIVI
IIS: Creare e cancellare Web Site ed FTP Site per Windows
Option Explicit
60 SCRIPT
AMMINISTRATIVI
per Windows IIS: Creare e cancellare Web Site ed FTP Site
Const MD_SERVER_STATE_STARTING = 1
Const MD_SERVER_STATE_STARTED = 2
Const MD_SERVER_STATE_STOPPING = 3
Const MD_SERVER_STATE_STOPPED = 4
Const MD_SERVER_STATE_PAUSING = 5
Const MD_SERVER_STATE_PAUSED = 6
Const MD_SERVER_STATE_CONTINUING = 7
SiteStatus(1) = "STARTING"
SiteStatus(2) = "STARTED"
SiteStatus(3) = "STOPPING"
SiteStatus(4) = "STOPPED"
SiteStatus(5) = "PAUSING"
SiteStatus(6) = "PAUSED"
SiteStatus(7) = "CONTINUING"
SiteStatus(8) = "SCONOSCIUTO"
If WScript.Arguments.Named.Exists("SERVER") Then
ServerIIS = WScript.Arguments.Named("SERVER")
Else
ServerIIS = "localhost"
60 SCRIPT
AMMINISTRATIVI
IIS: Creare e cancellare Web Site ed FTP Site per Windows
End If
60 SCRIPT
AMMINISTRATIVI
per Windows IIS: Creare e cancellare Web Site ed FTP Site
Else
MsgBox "Errore! Non hai specificato correttamente
i parametri."
WScript.Quit
End If
End If
60 SCRIPT
AMMINISTRATIVI
IIS: Creare e cancellare Web Site ed FTP Site per Windows
Dim Index
Dim SiteName
Dim SitePath
Dim WebSite
60 SCRIPT
AMMINISTRATIVI
per Windows IIS: Creare e cancellare Web Site ed FTP Site
NewSite.SetInfo
Set NewRoot = NewSite.Create("IIsWebVirtualDir", "Root")
NewRoot.Path = SitePath
NewRoot.SetInfo
End Sub
Dim FTPSiteName
Dim SitePath
Dim SiteIPAddress
Dim SiteTCPPort
Dim FTPSite
Dim NewSite
Dim NewRoot
Dim Index
60 SCRIPT
AMMINISTRATIVI
IIS: Creare e cancellare Web Site ed FTP Site per Windows
If IsNumeric(FTPSite.Name) Then
If Index < FTPSite.Name Then
Index = FTPSite.Name
End if
End If
Next
Index = Index + 1
End Sub
Dim Site
End Sub
60 SCRIPT
AMMINISTRATIVI
per Windows IIS: Creare e cancellare Web Site ed FTP Site
Dim FTPSite
End Sub
NOTE
007-014 02/02/07 14:56 Pagina 156
007-014 02/02/07 14:56 Pagina 157
007-014 02/02/07 14:56 Pagina 158
007-014 02/02/07 14:56 Pagina 159
007-014 02/02/07 14:56 Pagina 160
i libri di
60 SCRIPT AMMINISTRATIVI
PER WINDOWS
Autore: Francesco Lippo
EDITORE
Edizioni Master S.p.A.
Sede di Milano:Via Ariberto, 24 - 20123 Milano
Sede di Rende: C.da Lecco, zona ind. - 87036 Rende (CS)
Realizzazione grafica:
Cromatika Srl
C.da Lecco, zona ind. - 87036 Rende (CS)
Art Director: Paolo Cristiano
Responsabile grafico di progetto: Salvatore Vuono
Coordinatore tecnico: Giancarlo Sicilia
Illustrazioni: Tonino Intieri
Impaginazione elettronica: Francesco Cospite
Servizio Clienti
Tel. 02 831212 - Fax 02 83121206
@ e-mail: customercare@edmaster.it