Configurare il layout di default durante il logon (Windows)

Avete installato una versione inglese di windows e durante il logon non riuscite ad inserire la password correttamente perchè i caratteri speciali non corrispondono a quelli indicati sulla tastiera?

Secondo Microsoft è sufficiente indicare le impostazioni internazionali di default tramite l’icona “regional Settings” (Impostazioni Internazionali) presente nel pannello di controllo:

Per quanto riguarda il logon questo non basta.

La soluzione che vi propongo consiste nel mettere mano al file di registro.

Windows Registry Editor Version 5.00
[HKEY_USERS\.DEFAULT\Keyboard Layout\Preload]
"1"="00000410"
"2"="00000409"

Basta copiare ed incollare le righe seguenti in un file di testo con estensione “.reg” e successivamente importarlo nel file di registro cliccando due volte sul file:

In questo modo la tastiera italiana (cod 410) verrà caricata al posto di quella inglese (cod 409).

Un elenco completo delle lingue supportate è disponibile sempre nel file di registro ma ad un indirizzo diverso:

HKLM\SYSTEM\CurrentControlSet\Control\KeyboardLayout\DosKeybCodes

Per comodità riporto i codici nella tabella seguente.

00000402 Bulgarian
0000041a Croatian
00000405 Czech
00000406 Danish
00000413 Dutch (Standard)
00000813 Dutch (Belgian)
00000c09 English (Australian)
00001009 English (Canadian)
00001809 English (Irish)
00000409 English (United States)
00000809 English (United Kingdom)
00001409 English (New Zealand)
0000040b Finnish
0000040c French (Standard)
0000080c French (Belgian)
0000100c French (Swiss)
00000c0c French (Canadian)
00000407 German (Standard)
00000807 German (Swiss)
00000c07 German (Austrian)
00000408 Greek
0000040e Hungarian
0000040f Icelandic
00000410 Italian (Standard)
00000810 Italian (Swiss)
00000414 Norwegian (Bokmal)
00000814 Norwegian (Nynorsk)
00000415 Polish
00000816 Portuguese (Standard)
00000416 Portuguese (Brazilian)
00000418 Romanian
00000419 Russian
0000041b Slovak
00000424 Slovenian
0000080a Spanish (Mexican)
0000040a Spanish (Traditional Sort)
00000c0a Spanish (Modern Sort)
0000041d Swedish
0000041f Turkish

Alla prossima

Ternimal Server e l’errore: “il dominio specificato non esiste…”

“The specified domain either does not exist or could not be contacted” è un errore che è possibile riscontrare quando si tenta un logon con utenza di dominio in terminal server (remote desktop). Capita quando ad esempio la macchina a cui si tenta di fare l’accesso è momentaneamente scollegata dal dominio ovvero quando il dominio non è raggiungibile.

Di solito questo problema viene risolto ripristinando la connessione con il domain controller. Ci sono dei casi in cui la connessione manca per motivi non legati alla funzionalità del server. Poniamo ad esempio il caso in cui volessimo accedere ad un portatile aziendale situato temporaneamente fuori dalla rete aziendale.

Per utilizzare le credenziali presenti sulla macchina evitando l’interruzione della connessione in caso di mancanza del domain controller è possibile mettere mano al file di registro con credenziali amministrative.

E’ sufficiente creare un file di testo con estensione “.reg” e inserire il seguente contenuto:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server]
"IgnoreRegUserConfigErrors"=dword:00000001



Basta poi cliccare due volte sul file per inserire i dati nel registro di sistema.

Alla prossima.

Windows – Visualizzare la linguetta protezione per i files

Quando si acquista una licenza di Windows nella versione Home, la linguetta riguardante la protezione dei files accessibile per mezzo del menù proprietà risulta essere disabilitato.

In realtà, la protezione dei files viene gestita in autonomia dal sistema operativo a meno di non usare un file system di tipo FAT32.

A volte però questa scelta può essere un limite.

Per abilitare la linguetta per singolo utente è sufficiente modificare il file di registro:

Hive: HKEY_CURRENT_USER
Key: Software\Microsoft\windows\CurrentVersion\Policies\Explorer
Name: Nosecuritytab
Type: REG_DWORD
Value: 0

E’ possibile trovare manualmente la chiave ed impostare il valore a 0 oppure eliminarla.

Ricordate che la linguetta si applica solo a file sytem di tipo NTFS.

Un Domain Controller in CentOS/Fedora per la piccola e media impresa

In questo articolo viene proposto un modo facile e veloce di creare un DC (Domain Controller) per ambienti Windows utilizzando Samba.
Va detto che la soluzione è dimensionata per la piccola e media impresa, dove il numero di utenti generalmente non supera le cento unità.
Facile e veloce perché impiega un solo server e non prevede ridondanza.
Per l’articolo ho scelto di utilizzare CentOS ma dovrebbe funzionare anche con Fedora.

Prerequisiti
La soluzione prevede il deployment all’interno di una rete locale (LAN); si presuppone dunque che i servizi di DNS (per la risoluzione dei nomi) e DHCP (per l’assegnazione automatica degli indirizzi IP) funzionino a dovere.
La lista della spesa Per far girare “il tutto” è necessario installare sulla macchina alcuni pacchetti fondamentali di samba. Per verificare i pacchetti già installati è sufficiente usare yum:

[root@myserver ~]# yum list *samba*
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: centos.fastbull.org
 * updates: centos.fastbull.org
 * addons: centos.fastbull.org
 * extras: centos.kiewel-online.ch base
Installed Packages
 samba.i386	3.0.33-3.7.el5_3.1	installed
 samba-client.i386		3.0.33-3.7.el5_3.1	installed
 samba-common.i386		3.0.33-3.7.el5_3.1	installed
 system-config-samba.noarch	1.2.41-3.el5		installed
 Available Packages
 samba-swat.i386		3.0.33-3.7.el5_3.1	updates
 sblim-cmpi-samba.i386		0.5.2-31.el5_2.1	base
 sblim-cmpi-samba-devel.i386	1-31.el5_2.1		base
 sblim-cmpi-samba-test.i386	1-31.el5_2.1		base

Nel nostro caso samba è già installato. Nel caso in cui fosse necessario installare il software possiamo sempre utilizzare yum:

yum install samba

I pacchetti fondamentali sono:

samba.i386 samba-common.i386system-config-samba.noarch

Degli altri possiamo anche farne a meno.

Personalizzare il servizio
Nel nostro caso, Samba dovrà funzionare come DC, per questo motivo è necessario editare il file /etc/samba/smb.conf indicando le corrette impostazioni. Di seguito un esempio di configurazione possibile:

[global]
        workgroup = MORZELLO
        server string = Samba Server Version %v
        netbios name = MYSERVER
        security = user
        passdb backend = tdbsam
        domain master = yes
        domain logons = yes
        logon script = %m.bat
        logon script = %u.bat
        logon path =
        add user script = /usr/sbin/useradd "%u" -n -g users
        add group script = /usr/sbin/groupadd "%g"
        add machine script = /usr/sbin/useradd -n -c "Workstation (%u)" -M -d /nohome -s /bin/false "%u"
        delete user script = /usr/sbin/userdel "%u"
        delete user from group script = /usr/sbin/userdel "%u" "%g"
        delete group script = /usr/sbin/groupdel "%g"
        username map = /etc/samba/smbusers
        lanman auth = no
        ntlm auth = Yes
        client NTLMv2 auth = Yes
        client lanman auth = no
        client plaintext auth = no
        winbind enum groups = yes
        winbind enum users = yes
        wins support = yes

[homes]
        comment = Home Directories
        browseable = no
        writable = yes

Il file di configurazione contiene solo ed esclusivamente i dati strettamente necessari per far funzionare il servizio come PDC (Primary Domain Controller). Probabilmente il lettore vorrà successivamente attivare altre voci come ad esempio le stampanti di rete e le cartelle di rete. Queste informazioni non sono strettamente necessarie e per questo motivo non sono trattate in questa sede. Per dare un senso al nostro operato cerchiamo di capire il significato delle voci principali che compongono il nostro file di configurazione:

  • workgroup: indica il nome del nostro dominio;
  • passdb backend: indica come samba gestirà le utenze windows. specificando tdbsam samba autenticherà gli utenti e le macchine appartenenti al dominio mediante il proprio database, senza utilizzare servizi esterni come ad esempio LDAP oppure un altro DC;
  • *script: sono le voci che indicano quali script eseguire per gestire gli utenti ed i gruppi;
  • logon path: è il percorso della cartella che contiene informazioni di netlogon di Windows. Nell’esempio si è deciso di non fornire questo servizio;
  • domain logons: indica se il server agirà come DC oppure no;
  • domain master: indica se il server agirà come PDC oppure no.

Per capire se la nostra configurazione è valida o meno possiamo usare il comando testparm:

[root@myserver ~]# testparm -s
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Loaded services file OK.
Server role: ROLE_DOMAIN_PDC
[global]
        workgroup = MORZELLO
        server string = Samba Server Version %v
        passdb backend = tdbsam
        username map = /etc/samba/smbusers
        lanman auth = No
        client NTLMv2 auth = Yes
        client lanman auth = No
        client plaintext auth = No
        log level = 2
        log file = /var/log/samba/%m.log
        add user script = /usr/sbin/useradd "%u" -n -g users
        delete user script = /usr/sbin/userdel "%u"
        add group script = /usr/sbin/groupadd "%g"
        delete group script = /usr/sbin/groupdel "%g"
        delete user from group script = /usr/sbin/userdel "%u" "%g"
        add machine script = /usr/sbin/useradd -n -c "Workstation (%u)" -M -d /nohome -s /bin/false "%u"
        logon script = %u.bat
        logon path =
        domain logons = Yes
        domain master = Yes
        wins support = Yes
        winbind enum users = Yes
        winbind enum groups = Yes

[homes]
        comment = Home Directories
        read only = No
        browseable = No

È fondamentale che la voce server role sia quella corretta.

L’utenza amministrativa
Per poter gestire il dominio è necessario aggiungere nel database di samba l’utente amministratore:

[root@myserver samba]# smbpasswd -a root
New SMB password:
Retype new SMB password:
tdbsam_open: Converting version 0 database to version 3....
Added user root.

Gli utenti di dominio
Gli utenti samba sono in realtà utenti linux e bisogna dare una regola per convertire correttamente gli utenti tra linux e windows. Per fare questo personalizziamo il file /etc/samba/smbusers:

# Unix_name = SMB_name1 SMB_name2 ...
root = administrator admin
nobody = guest pcguest smbguest

Nel nostro caso ci limitiamo a dire che l’utente administrator equivale a root e che l’utente guest equivale a nobody. Aggiungiamo anche i gruppi di utenti windows che non esistono ancora in linux:

# Map Windows Domain Groups to UNIX groups
net groupmap add rid=514 ntgroup="Domain Guests" unixgroup="nobody" type=d
net groupmap add rid=513 ntgroup="Domain Users" unixgroup="users" type=d
net groupmap add rid=512 ntgroup="Domain Admins" unixgroup="root" type=d

Si possono aggiungere anche altri gruppi di utenti, quelli specificati in alto sono quelli “canonici”. Per verificare che i gruppi siano stati creati possiamo usare il comando wbinfo:

[root@myserver samba]# wbinfo -g
domain users
domain admins
domain guests

Aggiungendo gli utenti di dominio ricordiamo sempre che questi sono anche utenti Linux. È probabile però che non tutti gli utenti dovranno avere accesso al server come utenti locali. Per inibire l’accesso alla console del server specificheremo una shell non valida. Su CentOS possiamo creare un utente con queste caratteristiche usando il comando adduser:

[root@myserver samba]# adduser -m -s /sbin/nologin testuser
[root@myserver samba]# passwd testuser
[root@myserver samba]# smbpasswd -a testuser

Con precedenti comandi abbiamo creato un utente, assegnato una password per linux ed una per samba.
Un metodo alternativo per creare gli utenti è quello di accodare direttamente gli utenti nel file /etc/passwd senza assegnare la password all’utente.
A pensarci bene non è necessario assegnare una password ad un utente che non può fare il logon. Se invece l’utente deve comunque avere l’accesso al server è sufficiente omettere il parametro “–s”.
Comunque sia per abilitare l’utente al dominio è necessario inserirlo nel database di samba con il comando smbpasswd.
Da notare che la password per linux può essere diversa da quella specificata in samba. Eseguire il servizio all’avvio In CentOS i servizi possono essere gestiti facilmente mediante il comando chkconfig.
Le righe seguenti assicurano l’avvio del servizio all’accensione del nostro server:

chkconfig smb on

Ultimi ritocchi: iptables e selinux
Samba necessita di alcune porte tcp ed udp per poter funzionare correttamente. Queste porte sono chiude per default da iptables. Di seguito le righe da inserire nel file /etc/sysconfig/iptables:

-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT

Le righe devono essere inserite nel file prima delle ultime due stringhe:

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT

Per quanto concerne selinux invece bisogna consentire a samba l’uso dei comandi necessari per svolgere alcuni task:

# Se si intende usare useradd/groupadd è necessario eseguire:
setsebool -P samba_domain_controller on
#
# Se si vuole condividere la home degli utenti eseguire:
setsebool -P samba_enable_home_dirs on

Per condividere una cartella di rete bisogna assegnare alla stessa l’etichetta “samba-share_t”. Evitate le cartelle di sistema perché queste probabilmente hanno una etichetta diversa già applicata. Per verificare i dettagli di una cartella relativa a selinux è possibile usare il comando ls specificando il paramentr “–Z”:

ls -ldZ /percorso_completo

Aggiungere una workstation al dominio
La procedura di Join è totalmente trasparente in windows.
Per aggiungere una macchina al dominio possiamo cliccare con il tasto destro del mouse su “Gestione Risorse” quindi selezionare il percorso :“Proprietà->Nome Computer->Cambia”. Specificare MORZELLO nella casella “dominio” e procedere al logon di root con la password indicata in samba (mediante il comando smbpasswd).

Alla prossima.

Una versione avanzata di Run As

Gli utenti di Linux sanno bene che non si dovrebbe mai utilizzare l’utenza amministrativa (root) per uso quotidiano. L’uso dovrebbe essere limitato alla manutenzione ordinaria (aggiornamenti) e straordinaria (installazione di programmi e nuovi componenti hardwere) del computer.

Questa regola è ancor più valida per gli utenti Windows dove, a parer mio, l’abuso dell’utenza amministrativa è più marcata.

In Linux, per accedere all’utenza di root dopo aver fatto il logon è possibile usare il comando "su" mentre in Windows si può utilizzare il comando "runas". Nonostante i due comandi siano essenzialmente simili, il loro utilizzo nella pratica non è il medesimo.

Mi sono reso conto negli anni che in Windows non è sempre agevole sostituirsi all’Amministratore per eseguire singoli comandi.

Per eseguire un comando come altro utente è sufficiente cliccare sull’icona con il tasto destro. Se tutto è eseguito correttamente nell’elenco comparirà l’opzione "Esegui come…" oppure "Run as…". Nelle versioni precedenti del sistema operativo potrebbe essere necessario premere contemporaneamente il tasto [SHITF].

Quando però è necessario eseguire diversi comandi le cose si complicano.

Su Windows 2000 è possibile eseguire una shell visuale "Esplora Risorse" come altro utente mentre in Windows XP no. Nella migliore delle ipotesi, l’utente resta invariato e nelle peggiori si rischia di dover reinstallare il sistema operativo.

A questo punto ho pensato ad un piccolo vbscript che possa risolvere il problema agevolmente.

Supponiamo di voler installare una stampante oppure editare un file di testo presente in c:\windows\system32.

Cliccando con il tasto destro sull’icona non compare l’opzione "Esegui come…" perché non si tratta di un programma.

L’idea è quella di creare una voce nel menu contestuale con la quale eseguire gli applicativi in base all’estensione dei file.

Per prima cosa è necessario creare un file vbs in windows. Nel nostro esempio il file sarà creato con il nome c:\windows\morzello_runas.vbs

option explicit

dim WshShell
dim strLogin
dim strParams
dim objArgs
dim I
Const TITLE="Morzello RunAs 1.1"
Set objArgs = WScript.Arguments

For I = 0 to objArgs.Count – 1
strparams= strParams & " " & objArgs(I)
Next

‘eliminiamo il primo carattere perchè non fa parte del parametro.
If Len(strParams)>1 Then strparams=Right(strparams,Len(strparams)-1)

strLogin=InputBox ("Inserire il ‘Login’ dell’utente con cui si vuole eseguire il comando:",TITLE, "Administrator")

If strLogin="" Then wscript.quit (1)

Set WshShell = WScript.CreateObject( "WScript.Shell" )
wscript.echo "%comspec% /C runas /env /utente:" & strLogin & " ""start " & strParams & """"
WshShell.Run "%comspec% /C runas /env /utente:" & strLogin & " ""start " & strParams & """" ,1,false

Lo script si limita a chiedere login e password dell’utente desiderato, quindi carica il file cone le credenziali desiderate.

Per rendere utile questo script è possibile inserire una opzione aggiuntiva alla shell simile a quella già presente. Questa opzione la chiameremo per comodità "Morzello Run As".

Di seguito riporto il contenuto del file "morzello_runas.reg" da aggiungere al file di registro:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell]

[HKEY_CLASSES_ROOT\*\shell\Morzello Run As]

[HKEY_CLASSES_ROOT\*\shell\Morzello Run As\command]
@="cscript c:\\windows\\morzello_runas.vbs %1"

Per aggiungere il comando al registro di sistema è sufficiente fare doppio click sul file con credenziali amministrative.

A questo punto è possibile ad esempio cliccare con il tasto destro su un file txt ed eseguirlo come altro utente. Utile ad esempio per editare il file di host.

I sorgenti di questo articolo sono disponibili qui

Alla prossima.

Un frontend per Ping e WOL in Windows

Nei precedenti articoli di questo blog si è parlato di come sfruttare il protocollo wol ed il comando ping di windows per gestire l’accensione e lo spegnimento di un computer remoto.

Poichè si è fatto uso di script a riga di comando, ho ricevuto alcune email in cui viene richiesta una possibile soluzione “a finestre”.

Purtroppo il mio tempo a disposizione non è molto ma sfruttando comunque il linguaggio di scripting (vbscript) sono riuscito a fare un piccolo applicativo in grado di mostrare lo stato (acceso/spento) di computer appartenenti alla stessa rete con la possibilità di usare il protocollo wol nel caso in cui questi risultassero spenti.

L’esempio che segue consiste in una pagina html di tipo Microsoft (R) HTML Application host (con estensione hta)


<HTML>
<HEAD>
<TITLE>Pannello di Controllo</TITLE>

<HTA:APPLICATION
     ID=”objPannello”
     APPLICATIONNAME=”Pannello di Controllo”
     SCROLL=”No”
     SINGLEINSTANCE=”yes”
>

<SCRIPT LANGUAGE=”VBScript”>
<!–
  option Explicit
  dim strTR
  dim aServer(5)

  aServer(0)=”tizio.local”
  aServer(1)=”caio.local”
  aServer(2)=”sempronio.local”
  aServer(3)=”cesare.local”
  aServer(4)=”cleopatra.local”
  aServer(5)=”antonio.local”
  
  strTR=”<tr>” & _
    ”<td>+SERVERNAME+</td>” & _
    ”<td>+STATUS+</td>” & _
    ”<td>+COMMAND+</td>” & _
    ”</tr>”

  

  function ServerView(ServerName)

    dim objShell, objExec
    dim strPingResult
  
    Set objShell = CreateObject(“WScript.Shell”)
    Set objExec = objShell.Exec(“ping -n 2 -w 1000 ” & ServerName)

    strPingResult = UCase(objExec.StdOut.ReadAll)
    
    ServerView= ( CBool(InStr(UCase(strPingResult), ” TTL=”)))

  end function

  function ServerCommand(ServerName)
    dim objShell
    Set objShell = CreateObject(“WScript.Shell”)  
    objShell.run(“wol.bat ” & replace(ServerName,”.local”,”"))

  end function

–>

</SCRIPT>
</HEAD>
<BODY >
<H3>Pannello di Controllo</H3>
<HR>
<FORM NAME=”ValidForm”>  

<table width=”100%”>
<tr>

<td width=”50%”><b>Server</b></td>
<td width=”20%”><b>Status</b></td>

<td width=”30%”><b>Comandi</b></td>

</tr>

<SCRIPT LANGUAGE=”VBScript”>
<!–
  dim Ciclo
  dim strOutPut, strServerStatus

  dim blserverStatus

  Self.ResizeTo 575,475

  for Ciclo=lbound(aServer) to ubound(aServer)
    blServerStatus=ServerView(aServer(Ciclo))
    if blServerStatus then
      strServerStatus=”ON”
      strCommand=”Attivo”
    else
      strServerStatus=”OFF”
      strCommand=”<INPUT onclick=’ServerCommand(“”" & aServer(Ciclo) & “”")’ NAME=’” & aServer(Ciclo) & “‘ TYPE=’BUTTON’ VALUE=’Attiva’>”
      ’msgbox “<INPUT onclick=’ServerCommand(“”" & aServer(Ciclo) & “”")’ NAME=’” & aServer(Ciclo) & “‘ TYPE=’BUTTON’ VALUE=’Attiva’>”
    end if
    strOutput= replace(strTR,”+SERVERNAME+”,aServer(Ciclo))
    strOutput= replace(strOutput,”+STATUS+”,strServerStatus)
    strOutput= replace(strOutput,”+COMMAND+”,strCommand)  

    document.write strOutput
  next

–>
</script>

</table>
<hr>
<INPUT NAME=”Submit” TYPE=”BUTTON” VALUE=”Aggiorna” onclick=”Location.Reload(True)”>
</FORM>
</BODY>
</HTML>

Potete nominare questo file come volete, purchè mantenga l’estensione hta, altrimenti windows non ne consentirà l’esecuzione.

Prima di concludere volevo ricordare che per maggiori informazioni sul wol, potete dare una occhiata questo articolo.

Alla prossima.

Un ping per Windows con Errorlevel

Tempo fa ho pubblicato un articolo nel quale si fa uso del comando ping per capire se un computer è acceso oppure no.

Purtroppo il comando ping di windows, almeno nella versione in mio possesso, non ha una gestione degli ERRORLEVEL in uscita; in pratica alla fine della esecuzione, restituisce sempre il medesimo valore, sia che il ping abbia successo o meno, rendendo vane le possibilità di impiegarlo all’interno di uno script.

Di seguito presento un breve listato scritto in vbscript che esegue il comando ping e restituisce un codice di errore in modo da poterlo sfruttare all’interno di un file batch dos.

‘######################################
‘ServerPing.vbs ver 1.0
‘di Benintende Vittorio

‘Questo software viene rilasciato sotto
‘licenza GPL e senza garanzia alcuna.
‘######################################

‘Il seguente codice esegue un Ping e tiene
‘traccia dell’output generato per capire
‘l’esito del comando.

‘Poichè quando il comando va a buon fine
‘contiene sempre il TTL del pacchetto
‘inviato, se l’output contiene “TTL=” nella
‘sequenza di caratteri allora si presume che
‘il ping abbia raggiunto la destinazione.

‘Di seguito due esempi esplicativi:

‘Esempio 1:
‘Esecuzione di Ping 192.168.0.1 con 32 byte di dati:

‘Risposta da 192.168.1.20: Host di destinazione irraggiungibile.
‘Risposta da 192.168.1.20: Host di destinazione irraggiungibile.
‘Risposta da 192.168.1.20: Host di destinazione irraggiungibile.
‘Richiesta scaduta.

‘Statistiche Ping per 192.168.0.1:
‘ Pacchetti: Trasmessi = 4, Ricevuti = 3, Persi = 1 (25% persi),
‘Tempo approssimativo percorsi andata/ritorno in millisecondi:
‘ Minimo = 0ms, Massimo = 0ms, Medio = 0ms

‘Esempio 2:
‘Esecuzione di Ping 192.168.0.1 con 32 byte di dati:

‘Risposta da 192.168.0.1: byte=32 durata=73ms TTL=64
‘Risposta da 192.168.0.1: byte=32 durata=87ms TTL=64
‘Risposta da 192.168.0.1: byte=32 durata=103ms TTL=64
‘Risposta da 192.168.0.1: byte=32 durata=68ms TTL=64

‘Statistiche Ping per 192.168.0.1:
‘ Pacchetti: Trasmessi = 4, Ricevuti = 4, Persi = 0 (0% persi),
‘Tempo approssimativo percorsi andata/ritorno in millisecondi:
‘ Minimo = 68ms, Massimo = 103ms, Medio = 82ms

option explicit

dim strMyComputer
Dim objExec, objArgs, objShell
Dim strPingResults
dim lngPos

‘command line
Set objArgs = WScript.Arguments

For lngPos = 0 to objArgs.Count – 1
Select Case UCase(objArgs(lngPos))
Case Else
if cbool(len(trim(objArgs(lngPos)))) then strMyComputer=objArgs(lngPos)
End Select

Next

If not cbool(len(Trim(strMyComputer))) then wscript.quit(100)

Set objShell = CreateObject(“WScript.Shell”)
Set objExec = objShell.Exec(“ping -n 2 -w 1000 ” & strMyComputer)

strPingResults = UCase(objExec.StdOut.ReadAll)

wscript.quit(Not CBool(InStr(UCase(strPingResults), ” TTL=”)))

Per pingare l’indirizzo IP 192.168.0.1 da console ad esempio è sufficiente impartire la seguente istruzione:

cscript ServerPing.vbs 192.168.0.1

Ad esempio è possibile utilizzare il precedente script per accedere a condivisioni di rete solo quando queste sono raggiungibili:

::
:: abilita gli shares se i server sono attivi
::

@ECHO OFF
SET LOGFILE=”%APPDATA%\_share.log”
SET DOMAIN=miodominio
SET SERVER1=tizio
SET SERVER2=caio
SET SERVER3=sempronio

ECHO ———- >> %LOGFILE%
DATE /T >> %LOGFILE%
TIME /T >> %LOGFILE%
ECHO Looking for shares at %SERVER1% >> %LOGFILE%

cscript ServerPing.Vbs %SERVER1%.%DOMAIN% >NUL 2>&1

IF ERRORLEVEL 0 GOTO SETSERVER1
GOTO SERVER2

:SETSERVER1
ECHO Try to mount M: Drive (share1 on %SERVER1%) >> %LOGFILE%
NET USE M: \\%SERVER1%.%DOMAIN%\share1 >NUL 2>&1
ECHO Exit with error %ERRORLEVEL% >> %LOGFILE%

ECHO Try to mount L: Drive (share_nascosto$ on %SERVER1%) >> %LOGFILE%
NET USE L: \\%SERVER1%.%DOMAIN%\share_nascosto$ >NUL 2>&1
ECHO Exit with error %ERRORLEVEL% >> %LOGFILE%

ECHO Try to mount N: Drive (foto on %SERVER1%) >> %LOGFILE%
NET USE N: \\%SERVER1%.%DOMAIN%\foto >NUL 2>&1
ECHO Exit with error %ERRORLEVEL% >> %LOGFILE%

:SERVER2
ECHO Looking for shares at %SERVER2% >> %LOGFILE%

cscript ServerPing.Vbs %SERVER2%.%DOMAIN% >NUL 2>&1

IF ERRORLEVEL 0 GOTO SETSERVER2
GOTO SERVER3

:SETSERVER2
ECHO Try to mount O: Drive (share1 on %SERVER2%) >> %LOGFILE%
NET USE O: \\%SERVER2%.%DOMAIN%\share1 >NUL 2>&1
ECHO Exit with error %ERRORLEVEL% >> %LOGFILE%

:SERVER3

IF %COMPUTERNAME%==%SERVER3% GOTO GOEXIT

ECHO Looking for shares at %SERVER3% >> %LOGFILE%

cscript ServerPing.Vbs %SERVER3%.%DOMAIN% >NUL 2>&1

IF ERRORLEVEL 0 GOTO SETSERVER3
GOTO GOEXIT

:SETSERVER3
ECHO Try to mount P: Drive (Share1 on %SERVER3%) >> %LOGFILE%
NET USE P: \\%SERVER3%.%DOMAIN%\share1 >NUL 2>&1
ECHO Exit with error %ERRORLEVEL% >> %LOGFILE%

:GOEXIT

SET LOGFILE=
SET DOMAIN=
SET SERVER1=
SET SERVER2=
SET SERVER3=

Con questo ho finito.
Alla prossima.

disabilitare le condivisioni amministrative di default in Windows

Tutte le installazioni di Windows (anche quelle meno recenti) hanno una serie di condivisioni amministrative che garantiscono agli amministratori un accesso remoto ai dati.
In particolare esiste una condivisione nascosta per ogni partizione attiva sulla macchina contrassegnata dalla lettera della partizione stessa.

Ad esempio: avendo un PC chiamato miopc con tre partizioni attive “C,D,E”, vi saranno anche tre condivisioni nascoste rispettivamente:
\\miopc\C$;
\\miopc\D$;
\\miopc\E$.

Il dollaro sta a significare che la condivisione è nascosta e non appare nell’elenco delle condivisioni disponibili quando si sfoglia la rete cliccando su “risorse di rete”.

Se è vero che solo gli amministratori posso accedere a queste condivisioni, è anche vero che non tutti sanno della loro esistenza.

Esiste un modo relativamente semplice per disabilitarle che consiste nel mettere mani al file di registro.

Probabilmente la cosa più semplice per modificare il file di registro è quella di creare un file di testo con estensione “.reg” contenente le righe da aggiornare. Per rendere effettive le modifiche basta semplicemente cliccare due volte il file avendo cura di essere autenticati in Windows come amministratori.

Di seguito riporto le righe necessarie a disabilitare le condivisioni:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters]
“AutoShareServer”=dword:00000000
“AutoShareWks”=dword:00000000

Nel caso sia necessario ripristinarle basta modificare le stesse voci con i seguenti valori:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters]
“AutoShareServer”=dword:00000001
“AutoShareWks”=dword:00000001

Se si desidera abilitare/disabilitare queste credenziali a piacimento, è possibile creare un collegamento del file .reg su desktop. In questo modo sarà più semplice apportare le modifiche.

Per concludere:
Le condivisioni indicate in precedenza non sono le uniche. Esistono altre condivisioni (come ad esempio IPC$), sempre amministrative e sempre nascoste che consentono l’accesso ad altre componenti del PC da remoto. Queste condivisioni danno ad esempio la possibilità di accedere al registro degli eventi oppure all’elenco dei servizi attivi sulla macchina.

In questo articolo ho preso in considerazione “solo” le condivisioni che garantiscono l’accesso ai files.

Per maggiori informazioni lasciate pure un post su questo articolo, di sicuro approfondiremo l’argomento.

Alla prossima.

Icona mancante: “Mostra Desktop”

Non so per quale motivo, in alcune installazioni di Windows manca l’icona “Mostra Desktop” all’interno della toolbar “Quick Launch”.

Comunque sia è facile crearne una, basta utilizzare un comune editor di testo come ad esempio notepad.
E’ sufficiente inserire il seguente testo in un file:

[Shell]
Command=2
IconFile=explorer.exe,3
[Taskbar]
Command=ToggleDesktop

Nel salvare il file non bisogna specificare alcuna estensione, altrimenti il file verrà trattato dal sistema operativo come un comune file di testo.

Nel caso in cui Windows si ostini a specificare una estensione per il file editato è necessario intervenire sui parametri di “Esplora Risorse” (“Risorse del Computer”). Le estensioni comunemente utilizzate infatti vengono omesse dal sistema operativo al fine di agevolare (io dico: confondere) l’utente nella gestione dei files.

Per visualizzare le estensioni di tutti i files è sufficiente togliere la spunta alla voce “Nascondi l’estensione dei file conosciuti” raggiungibile da Esplora risorse al seguente percorso:

Strumenti -> Opzioni Cartella -> Visualizzazione

Chi non volesse agire tramite questo menù può usare il buon vecchio “command” (cmd). E’ infatti disponibile un editor di testo (EDIT.COM). Dal prompt dei comandi possiamo ad esempio impartire il seguente comando:

c:\windows\system32\edit.com MostraDesktop

ed il gioco è fatto.

Win XP e Vista: Rimuovere il fastidioso avviso “icone inutilizzate sul desktop”

Quanto può essere fastidioso accendere il PC ed ogni volta vedere una notifica di Windows che recita:“Ci sono icone inutilizzate sul desktop…”.
Ho cercato invano l’opzione “Fatti gli affari tuoi” purtroppo senza il risultato sperato; così mi sono adoperato al fine di far tacere “per sempre” questo messaggio.

Chi soffre dello stesso problema può procedere editando le “Group Policy”. Per farlo è necessario impartire il comando gpedit.msc dal prompt dei comandi avendo cura di farlo con privilegi amministrativi.

A questo punto il percorso della proprietà da modificare si trova nel seguente percorso:

Criteri Computer locale -> Configurazione utente -> Modelli amministrativi -> Menu di avvio…

Per chi avesse una versione di Windows XP o Vista in lingua inglese il percorso sarebbe invece:

Local Computer Policy -> User Configuration -> Administrative Templates -> Start Menu…


La voce da disabilitare è:
Disattiva i suggerimenti sulle voci del menù di avvio (Turn off balloon notifications)

Possiamo disabilitare questa voce selezianandola con il pulsante destro del mouse.

In realtà ci sono anche altre voci che possono essere modificate:

Disattiva i suggerimenti sulle voci del menù di avvio (Remove Balloon Tips..): consente di rimuovere le finestrelle gialle che compaiono al passaggio del puntatore su una voce del menu;

Impedisci il raggruppamento degli elementi… (Prevent grouping of taskbar items): se si vuole avere una barra delle applicazioni dove ogni finestra viene indicata in un riquadro separato (come avviene in Windows 2000);

Cancella cronologia dei documenti aperti… (Cleare history of recentry…): chi vuole avere un po’ di privacy spesso rimuove gli elemnti della cronologia manualemte. Con questa opzione il sistema operativo svuota l’elenco dei documenti aperti prima di spegnere il computer.

Insomma, tra le voci dei “Criteri di Gruppo” ci sono una grande quantità di parametri su cui è possibile intervenire (e di conseguenza fare danno). Il mio consiglio è quello di leggere attentamente la descrizione di ogni singola voce riportata a fianco perchè spesso la traduzione in lingua italiana può trarre in inganno.

Spero di esservi stato di aiuto, alla prossima.