Rimuovere Office 2003 tramite script e GPO

La rimozione del pacchetto office può presentare non pochi problemi, soprattutto nel caso in cui si debba eseguire un’azione a tappeto su diverse decine di computer.
Microsoft, tramite i vari Fix it (50450,50154,50416) rispettivamente per office 2010 2007 e 2003, mette a disposizione uno strumento adatto per la “pulizia” e rimozione del prodotto Office.
L’automazione però, tramite il singolo Fix-it è pressochè impossibile.
Tuttavia con qualche piccolo accorgimento è possibile utilizzare il Fix it stesso per definire una GPO ed applicarla ai sistemi su cui si deve rimuovere Office.

All’interno del Fix-it è contenuto uno script VBS che effettua la rimozione del pacchetto.
Vediamo i passi necessari per la rimozione della versione 2003.
Con 7zip è necessario estrarre il contenuto del file .msi scaricato da Microsoft
http://support.microsoft.com/kb/971179/it
una volta estratto il contenuto, individuare all’interno il file “Cabfile” ed eseguire nuovamente, sempre con 7Zip, l’estrazione del contenuto.
All’interno è presente lo script VBS citato in precedenza “OffScrub03.vbs”, di per sè il file se eseguito con l’opzione ALL esegue l’intera rimozione del pacchetto.

Cscript OffScrub03.vbs ALLOffScrub03-1

se invece lo script è eseguito senza parametri viene richiesto all’utente quali opzioni rimuovere.

Nel caso in cui si voglia definire un’area di rete in cui i vari pc salvano i log dell’esecuzione dello script, è necessario modificare il file e agire su una variabile che viene utilizzata per rilevare dalle impostazioni di sistema il percorso della cartella TEMP.

Lo script in questo caso è modificato per “loggare” in un percorso centralizzato, la data e l’ora dell’ultima esecuzione, Viene creata una cartella per ogni Wokstation su cui è eseguito lo script.

Option Explicit
‘Inizio Personalizzazione
DIM wshShell
Dim StrComputerName
Dim Data
Dim Ora
Dim ObjFSO
Dim ObjDIR
Dim outFile
Dim ObjFile
Dim StrFolder
Dim UncPathStore

Set UncPathStore =”\servershareoffice2003Log”
Set wshShell = WScript.CreateObject( “WScript.Shell” )
strComputerName = wshShell.ExpandEnvironmentStrings( “%COMPUTERNAME%” )
‘rilevo la data di esecuzione
data = Date()
‘rilevo ora di esecuzione
ora = Time()
Set objFSO=CreateObject(“Scripting.FileSystemObject”)
outFile=UncPathStore & StrComputerName & “.txt”
Set objFile = objFSO.CreateTextFile(outFile,True)
objFile.write ” Avvio Script Rimozione Office” & vbCrLf
objFile.write Date & ” ” & ora & vbCrLf
objFile.Close

‘ creazione cartella stemp + nome pc per log
strFolder = UncPathStore & StrComputerName
IF objFSO.FolderExists(strFolder) = FALSE THEN
objFSO.CreateFolder strFolder
‘wscript.echo ” cartella creata”
ELSE
‘wscript.echo “cartella già presente ”
END IF
‘ Fine personalizzazione

All’interno dello script è necessario individuare ( alla riga 85 ) il punto in cui viene dichiarata e valorizzata la variabile sTemp, e modificarla come segue:

ORIGINALE
‘sTemp = oWShell.ExpandEnvironmentStrings(“%temp%”)
MODIFICATA
sTemp = UncPathStore & strComputername

Assegnando lo script ad una GPO la cui esecuzione viene effettuata come “Machine” è necessario che la share abbia i permessi di Lettura e Scrittura per il Gruppo Domain Computers

Dsquery Identificazione di “Inactive computer” e spostamento in una OU dedicata

Nella normale gestione di un’infrastruttura AD ci si trova a dover gestire i vari oggetti, per lo più computer, che con l’andare del tempo risultano inattivi.
Ad esempio per la rimozione di un PC dalla rete/dominio senza aver eseguito il Dis-Join in modo corretto.
Tramite l’utility DSQUERY è possibile identificare i vari oggetti presenti in AD e manipolarli.

Ad esempio identificare gli oggetti “computer” che risultano inattivi parametrizzando una timeline, ossia definendo un numero N di settimane trascorse dall’ultimo contatto.

  • – dsquery computer -inactive 200 -limit 0

in questo caso N ci restituisce gli oggetti il cui che risultano “inattivi” da più di 200 settimane.

E’ possibile redirigere l’output del comando con >> percorsonomefile in modo da ottenere una lista su file, da  utilizzare successivamente per ulteriori controlli automatici.

Il valore in AD che viene ad essere interrogato dall’utility DSQUERY è LastLogonTimestamp

Identificati i vari client inattivi, prima di eliminarli è consigliabile sopostarli in una OU creata appositamente e, prima della rimozione definitiva disabilitarli, in modo da poter riattivare l’oggetto in caso di rilevazione errata.

Comando per lo spostamento automatico degli oggetti rilevati con DSQUERY

For /f “Tokens=*” %a in (‘dsquery computer -inactive 200 -limit 0’) do dsmove %a -newparent “OU=ComputerInactive100,DC=domain,DC=local”

Prima di procedere all’eliminazione definitiva è anche consigliabile controllare che i vari oggetti non siano effettivamente presenti.

Verificare che il DNS non abbia più occorrenze, questo è abbastanza facile in domini dove è presente un DHCP e dove le registrazioni in DNS avvengono in modo automatico. E’uno scenario comune per le workstation, meno per i server.

Uno script in Powershell che può risultare utile allo scopo è il seguente

$SourcePath = get-content C:admanagementComputers-inactive200.txt
$LogFile = “C:admanagementcomputers-inactive100.log” # Percorso del file di Log
foreach ($hostname in $SourcePath)
      {
      Resolve-DnsName $hostname |out-file $LogFile -Append
       }

“esegue una richiesta DNS a partire da un elenco di host contenuto in un file e riporta nel file di log gli host presenti, per differenza quelli non riportati non sono presenti in DNS.”

Una ulteriore verifica può essere effettuata con un ulteriore script Powershell che sempre a partire da un elenco di host contenuto in un file, controlla se il computer è presente, acceso e ne registra in un file l’output.
Eseguendo questo cmd-let da una workstation con credenziali di dominio valide, automaticamente si ha la conferma che il PC è ancora in join con il dominio.

$SourcePath = get-content C:admanagementComputers-inactive100-listjoined.txt
$LogFile = “C:admanagementcomputers-inactive100-listjoined.log” # Percorso del file di Log
foreach ($hostname in $SourcePath)
     {
     Add-Content -path $logFile -value $hostname
     Get-WmiObject -Class Win32_ComputerSystem -ComputerName $hostname |out-file $LogFile -Append
     }

in questo caso se il pc è presente ed acceso e l’output del comando è il seguente

Domain : domain.loc
Manufacturer : Acer
Model : Veriton M265
Name : WORKSTATION1
PrimaryOwnerName : Owner Name
TotalPhysicalMemory : 2137174016

In conclusione incrociando i dati ottenuti dalla ricerca in AD con DSQUERY, la ricerca di queste postazioni in DNS e l’ultima verifica tramite WMI si può rgionevolemte essere sicuri che un PC si possa effettivamente cancellare da AD.

per approfondimenti:
http://blogs.technet.com/b/askds/archive/2009/04/15/the-lastlogontimestamp-attribute-what-it-was-designed-for-and-how-it-works.aspx

https://technet.microsoft.com/en-us/library/cc732952.aspx

System Center Endpoint Protection su WindowsServer 2012 R2 Essential

Il Client Endpoint Protection di System Center 2012 R2, se eseguito come installazione Stand-Alone su un Server 2012R2 versione Essential,presenta il Warning relativo alla incompatibilità dSSCepEssentialWarningel sistema su cui viene installato.

Per poter eseguire comunque l’installazione è possibile utilizzare l’opzione  /disableoslimit come parametro dell’eseguibile di installazione

scepinstall.exe /disableoslimit

SSCepEssentialWarninga questo punto l’installazione prosegue fino al termine ed il software di protezione è attivo

.SSCepEssentialWarning