Archives For Netlogon

Articolo “appunti“, come sporadicamente capita qui sopra. Ho avuto la necessità di rimuovere delle mappature verso stampanti di rete non più raggiungibili (cambio server remoto di stampa, nda), tutte queste non controllate da GPO (erano state aggiunte manualmente dagli utenti). Ho aggirato l’ostacolo con alcune righe di VBScript. Le ritrovi qui di seguito nel caso in cui dovessero servirti.

VBScript: rimuovere mappature stampanti (Coding)

Pulizia completa (da server)

Ti ricordo che il VBScript può essere eseguito manualmente, o inserito in un più complesso (e completo) script di Logon, o magari puoi pensare di lanciarlo su altre macchine passando per PSExec o qualsiasi altro strumento di gestione postazioni come Kace (o equivalenti).

Dim objWMIService, objNetwork, colInstalledPrinters, objPrinter
strComputer = "."
i = 0
PrintServer = "NOME-VECCHIO-SERVER"
Set objWMIService = GetObject("winmgmts:" _
 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colInstalledPrinters = objWMIService.ExecQuery _
 ("Select * from Win32_Printer")
 For Each objPrinter in colInstalledPrinters
 ReDim Preserve arrPrinterName(i)
 arrPrinterName(i) = objPrinter.Name
 If InStr(arrPrinterName(i), PrintServer) Then
 Set objNetwork = WScript.CreateObject("WScript.Network")
 objNetwork.RemovePrinterConnection arrPrinterName(i)
 i=i+1 
 Else
 End If
Next

Il nome del server viene dichiarato come variabile PrintServer (facile intuirlo, eh?), devi praticamente sostituire quell’unica cosa lasciando invariato il resto.

e qualcosina da locale

Sì, perché potrebbe anche capitare che –contestualmente– ci sia qualcosa installato in locale sulla macchina (e non solo figlio del tasto destro → connetti), anch’esso non più utile alla quotidianità dell’utente. A questo punto però, contrariamente alla porzione di script di prima, ricorda che per quella di seguito servirà essere amministratori del PC (quindi bisognerà lanciare lo script come tali, o trovare un’alternativa):

arrDeletePrinters = Array("STAMPANTE1","STAMPANTE2","STAMPANTE3")
For Each objPrinter in colInstalledPrinters
 For Each strPrinter in arrDeletePrinters
 If Not InStr(1, objPrinter.DeviceID, strPrinter, 1) = 0 Then
 objPrinter.Delete_ 
 End If
 Next
Next

dove al posto di STAMPANTE1, STAMPANTE2, STAMPANTE3(volendo puoi dichiararne ancora, o toglierne, se necessario), dovrai inserire quelle che realmente vuoi eliminare, basta il nome con il quale è stata dichiarata (ogni singola stampante) sul sistema, ammesso che qualcuno non abbia avuto la malsana idea di nominarle in maniera differente ogni volta.

Ovviamente non è detto che tu abbia necessità di entrambe le soluzioni, puoi quindi limitarti a riportare la prima parte dello script in un tuo file (.vbs) da salvare dove più ritieni opportuno (in modo tale che sia raggiungibile dalle tue postazioni, chiaramente), o magari solo la seconda, stando però attento a includergli in testa il blocco relativo alla preparazione variabili e funzioni da richiamare (Dim objWMIService, objNetwork, colInstalledPrinters, objPrinter, la parte relativa a strComputer e il Set objWMIService = GetObject(“winmgmts:” _& “{impersonationLevel=impersonate}!\\” & strComputer & “\root\cimv2”)).

Un grande grazie alle fonti che hanno permesso di “pacchettizzare” una soluzione rapida per aggirare un banale ostacolo:

Buon lavoro!

Condividi l'articolo con i tuoi contatti:

Uno di quei lavori che se doveste fare a mano per ciascun client dell’azienda vi ritrovereste ad andare in pensione prima di aver terminato l’intervento. Dato un numero non meglio definito di collegamenti a cartelle di rete tipicamente salvati sul Desktop utente, occorrerà modificare il puntamento da $vecchioserver a $nuovoserver. Un lavoro banale se fatto a mano da ciascun utente ma spesso -sfortunatamente- chiedere queste cose all’utente finale è un po’ come spostare una montagna a mani nude.

Ho cercato online qualcosa dalla quale partire e ho trovato ancora una volta una via di fuga tramite VBScript, pressoché perfetta per questo caso. Il codice VBS originale è di Rob Dunn (sei un santo, ragazzo, un vero santo) e lo trovate all’indirizzo community.spiceworks.com/scripts/show/298-change-shortcut-lnk-target-paths-in-bulk. Io l’ho leggermente modificato per accettare dei parametri dall’esterno (così sarà facilmente richiamabile da file batch, nel mio specifico caso al logon di un utente al dominio). Ne ho forzato la modalità “silent” per evitare che chieda qualsiasi cosa all’utente (e ho anche rimosso le parti di codice che se ne occupano nello script originale, ndr) ed evitare in ultimo che venga mostrato il log delle operazioni che rimarrà comunque disponibile sul client in %TEMP%\BulkShortcut.htm.

Ho caricato lo script modificato e i richiami in batch su Github e trovate il tutto qui: gist.github.com/gioxx/11403345.

Giusto per capirci: una volta caricato il VBS su un server accessibile per i vostri utenti vi basterà richiamarlo tramite una semplice riga nel netlogon:

cscript \\%USERDNSDOMAIN%\netlogon\scripts\BulkShortcut.vbs //B "\\SERVER1\" "\\SERVER3\shared\"

Questo permetterà al VBScript di prendere tutti i collegamenti sul Desktop analizzandoli e cercando quelli che puntano attualmente su SERVER1 per modificarli e farli puntare a SERVER3. Occhio, il VBScript potrebbe accettare un terzo parametro. Dopo cosa cercare e come modificarlo potreste specificare anche la directory all’interno della quale fare il lavoro, nel caso in cui non sia il Desktop la vostra casa base. Potreste quindi lanciare un ipotetico:

cscript \\%USERDNSDOMAIN%\netlogon\scripts\BulkShortcut.vbs //B "\\SERVER1\" "\\SERVER3\shared\" "C:\Temp"

Che forzerà così l’operazione in C:\Temp contrariamente a quanto stabilito di default all’interno del codice.

Il lavoro è molto rapido e completamente invisibile agli occhi dell’utente che potrà quindi fare clic sulle icone che ha lasciato l’ultima volta sul suo Desktop senza accorgersi che queste puntano altrove.

Condividi l'articolo con i tuoi contatti:

Problematica semplice: una stampante di rete nuova, diversi PC che devono poterla utilizzare, non c’è kix che può aiutarmi ma c’è Active Directory con il suo Netlogon sempre valido. Dato che spiegare agli utenti come mapparsi una stampante potrebbe diventare una delle missioni più difficili di questo mondo e data l’urgenza della cosa, un piccolo trucco in VBScript può venire in soccorso per mappare tutto ciò che desideriamo in pochissimi secondi.

Mano al codice!

Dando per scontato che la stampante sia correttamente installata (e quindi condivisa) su un server raggiungibile dagli utenti di dominio, aprite un qualunque editor di testo (io utilizzo Notepad++) e inserite questo semplice codice VBScript che servirà allo scopo:

'
' Printers.vbs - Windows Logon Script.
' Gioxx - giovanni@solone.it
' Stampante: NOME STAMPANTE, UFFICIO, PIANO, STABILE (varie informazioni che volete salvare)
'
Set objNetwork = CreateObject("WScript.Network")
objNetwork.AddWindowsPrinterConnection "\\SERVERSTAMPANTI\NomeCondivisioneStampante"

Ovviamente stando attenti a modificare il nome del server dove la stampante è installata (SERVERSTAMPANTI) e il nome della condivisione della stessa (NomeCondivisioneStampante). Salvate ora il file come “NomeChePreferite.vbs” (per comodità io continuerò a riportare il file come NomeCondivisioneStampante.vbs) e posizionatelo in una cartella raggiungibile dagli utenti di dominio (potreste tenere il VBS sullo stesso server stampanti, magari in una diversa cartella condivisa che chiamerete Script).

Due “stupide” righe che vi permettono di non fare intervenire l’utente e fargli comparire la stampante tra quelle per lui disponibili con il minimo sforzo. Per far si che questo accada in modo totalmente automatico e silente all’atto del login al dominio, sarà necessario andare a modificare il batch di netlogon inserendo in una qualsiasi posizione la seguente stringa:

Cscript \\SERVERSTAMPANTI\Script\NomeCondivisioneStampante.vbs

Ottenendo un risultato che potrebbe essere molto simile al seguente (è una semplice ipotesi, io mi baso su una situazione vista e gestita):

@echo off
net use X: /delete /y
net use X: \\SERVER\CARTELLA
call %logonserver%\netlogon\altroscript.bat
Cscript \\SERVERSTAMPANTI\Script\NomeCondivisioneStampante.vbs

Così facendo –a caricamento del proprio desktop terminato– si potrà notare la stampante appena mappata nella propria cartella Stampanti e Fax. L’utente potrà ora utilizzare la stampante e voi vi sarete risparmiati minuti di spiegazioni al telefono ;)

Buon lavoro.

P.S. Nel caso in cui questo articolo “non vi basti“, vi ricordo che qualche tempo fa ho spiegato come utilizzare il regedit per mappare qualsiasi stampante!

Condividi l'articolo con i tuoi contatti:

Un titolo piuttosto complesso, me ne rendo conto. Dato che a breve con molta probabilità Sophos Experts Italy sarà archiviato (numeri che poco convincono, collaborazione pressoché nulla, a meno che qualcuno non mi scriva in merito due righe a breve) ricomincio a scrivere articoli riguardanti le piattaforme Sophos sul mio blog, convinto che possano avere maggiore visibilità e andare ad arricchire la serie di articoli già pubblicati in passato.

Stavolta vorrei parlarvi di una casistica analizzata presso un cliente che ha deciso di aggiornare la sua console 3 passando alla nuova 4, basandosi su un sistema Windows Server 2008 a 64 bit (una configurazione che raramente vedo presso altre aziende, ancora oggi).

Il problema? Dopo l’upgrade del software installato sul server, i client hanno deciso di non aggiornarsi con i nuovi motori antivirus, motivo per il quale i clienti rimangono scoperti dal rilascio dei nuovi aggiornamenti da parte della nota azienda di sicurezza informatica. La risoluzione? Forzare un’installazione del nuovo antivirus nel momento in cui le macchine (gli utenti) fanno ingresso nel dominio.

A cosa appoggiarsi

Una stringa di controllo in Kix32 (software sempre più utilizzato, associato al netlogon) e un banale script batch che carichi il software necessario. La procedura è presto spiegata:

$PGRFILE=%Programfiles%+"\Sophos\Sophos Anti-Virus\SAVControl.dll"
if exist ($PGRFILE)
 ? "Antivirus Aggiornato" @CRLF
ELSE
 ? "Installo Antivirus" @CRLF
 ;shell '%comspec% /C '
 shell "cmd /c "+$LogonServer+"\netlogon\instSophos.bat /scrub"
ENDIF
EXIT

Perché il controllo su una DLL? Sophos 7 (versione dell’antivirus gestita dalla console 3) non ha tra i suoi file quella libreria. E’ invece presente tra i file di una installazione della versione 9 (gestita dalla console 4).

A questo punto sarà necessario rimuovere il precedente antivirus e partire con l’installazione del nuovo. Per andare ancora più sul sicuro ho preferito lanciare prima il CRT (Competitor Removal Tool) ed in seguito il setup:

@ECHO OFF
echo Verifica e installazione Sophos Antivirus ...
echo Non chiudere questa finestra.
echo;
REM --- Deploy to Windows 2000/XP/2003
\\SERVERSOPHOS\SophosUpdate\CIDs\S000\SAVSCFXP\crt\avremove.exe
\\SERVERSOPHOS\SophosUpdate\CIDs\S000\SAVSCFXP\Setup.exe -updp "\\SERVERSOPHOS\SophosUpdate\CIDs\S000\SAVSCFXP" -user "DOMINIO\AMMINISTRATORE" -pwd "PASSWORD" -mng yes
REM --- End of the script
:_End

L’operazione richiederà pochi minuti (a patto che le macchine non siano particolarmente datate o con risorse hardware molto limitate) e verrà ovviamente eseguita una sola volta per postazione. Il controllo (dalla seconda connessione al dominio) fallirà e l’utente avrà rapido accesso ai suoi dati ed al suo desktop.

Buon lavoro :)

Condividi l'articolo con i tuoi contatti: