the fly on the net 
Davide Bia

Davide si occupa principalmente di consulenza informatica ed assistenza tecnica per alcune aziende nella provincia di Verona.
Ha sempre coltivato la passione per la programmazione, e fin dal 1994 sviluppa siti web e librerie JavaScript.



the fly on the net » Articoli » Sistemi Windows »

Giorno della settimana odierno per gli script batch

 Scritto da Davide Bia in Sistemi Windows 6 Ottobre 2008 Nessun commento

Se intendiamo utilizzare una politica di backup basata su script batch pianificati, in cui si vuole recuperare versioni di file fino ad una settimana, risulta indispensabile conoscere che giorno siamo per differenziare il nome della cartella in cui eseguire il salvataggio.

robocopy C:\ D:\backup\lun /MIR

Purtroppo a partire da Windows XP, il comando date /T oppure la variabile di ambiente %date% di default, nella versione italiana, restituiscono la data nel formato gg/mm/aaaa (06/10/2008) al posto del precedente ggg gg/mm/aaaa (lun 06/10/2008), che conteneva il giorno della settimana.

Per ripristinare il vecchio comportamento, è sufficiente modificare il formato della data breve dalle Opzioni internazionali del pannello di controllo.

Formato data breve in Windows XP

Su Windows Vista la sintassi del formato è cambiata in ddd dd/mm/yyyy ed è stata leggermente modificata la finestra delle opzioni. In entrambi i casi, si andrà a modificare una chiave di registro del profilo utente.

HKEY_CURRENT_USER\Control Panel\International\sShortDate

Una volta effettuata la modifica, diventa semplice nel file batch ottenere una nuova variabile ed eseguire il backup.

set weekday=%date:~0,3%
robocopy C:\ D:\backup\%weekday% /MIR

In alternativa, se non fosse possibile modificare il valore tramite l’interfaccia utente, è possibile utilizzare la linea di comando.

reg add "HKCU\Control Panel\International" /f /v sShortDate /t REG_SZ /d "ggg gg/mm/aaaa"

Come ultima opzione, se per qualunque motivo non fosse possibile modificare il formato della data breve, è possibile avviare una sessione DOS in modalità legacy, ma è necessario un codice leggermente più complesso per estrapolare l’informazione che ci interessa.

@echo off
echo.|command /C date|find "data corrente" > "%tmp%\weekday.tmp"
for /f "tokens=5" %%a in ('type "%tmp%\weekday.tmp"') do set weekday=%%a
del "%tmp%\weekday.tmp"

Attenzione: l’esempio è scritto per Windows XP versione italiana. Per altre versioni o lingue è necessario adattare il codice.

Data/ora in formato ISO 8601 per gli script batch

 Scritto da Davide Bia in Sistemi Windows 3 Ottobre 2008 Nessun commento

In uno script batch (con estensione BAT o CMD) a volte può essere necessario conoscere la data ed ora correnti. Le variabili di ambiente %date% e %time% contengono queste informazioni, ma in alcuni casi non possono essere utilizzate direttamente. Ad esempio, utilizzando xcopy e volendo ottenere un file di log di tutto quello riportato sullo schermo, si ottiene un errore.

xcopy C:\dati C:\backup /E /Y /I /H /O > C:\log\%date%.log
Impossibile trovare il percorso specificato

Questo perché si tenta di creare il file C:\log\03/10/2008.log, che contiene il carattere / non valido per i nomi di file. La soluzione ideale è di usare il formato ISO 8601 aaaa-mm-gg (es. 2008-10-03), che oltre a poter essere utilizzato come nome di file, risulta comodo per tenere in ordine cronologico i file. Per ottenere questo risultato possiamo creare una nuova variabile estrapolando le informazioni dalla data corrente, quindi successivamente la usiamo a piacere all’interno dello script.

set today=%date:~6,4%-%date:~3,2%-%date:~0,2%
xcopy C:\dati C:\backup /E /Y /I /H /O > C:\log\%today%.log

Attenzione: nell’esempio viene estrapolata la data ISO a partire dalla data di sistema, che viene proposta di default, nelle versioni in italiano, nel formato gg/mm/aaaa. In un sistema con altra lingua, potrebbe essere usato un formato differente ed è necessario adattare di conseguenza il codice.

L’operazione analoga possiamo eseguirla anche con la variabile %time%, per ignorare i millisecondi non previsti dallo standard ISO.

set datetime=%date:~6,4%-%date:~3,2%-%date:~0,2%T%time:~0,2%%time:~3,2%%time:~6,2%
xcopy C:\dati C:\backup /E /Y /I /H /O > C:\log\%datetime%.log

Errore 1609 - NETWORK SERVICE is not a valid user or group

 Scritto da Davide Bia in Sistemi Windows 30 Luglio 2008 Nessun commento

Problema: durante l’installazione di un applicativo in lingua inglese su sistema operativo in italiano, la procedura si interrompe con un messaggio di errore.

NETWORK SERVICE is not a valid user or group

Error 1609. An error has occoured when applying security settings.
NETWORK SERVICE is not a valid user or group. This could be
a problem with the package, o a problem connecting to a
domain controller on the network. Check your network
connection and click Retry, or Cancel to end the install.

Dettagli: nelle installazioni di Windows in lingua italiana l’utente built-in NETWORK SERVICE è stato rinominato in SERVIZIO DI RETE. Tutti i programmi di installazione che fanno riferimento all’utente NETWORK SERVICE sono destinati a generare un errore e/o non applicare correttamente tutti i diritti necessari all’esecuzione dell’applicazione.

Soluzione: è sufficiente creare un nuovo gruppo locale denominato NETWORK SERVICE ed inserire come unico membro l’utente SERVIZIO DI RETE.

Nuovo gruppo NETWORK SERVICE

Nuovo gruppo NETWORK SERVICE

Così facendo l’installer dovrebbe procedere senza ulteriori errori e le impostazioni di sicurezza applicate per NETWORK SERVICE saranno valide anche per SERVIZIO DI RETE.

Abilitare AHCI/RAID nei chipset Intel evitando l’errore 0×0000007B in Windows XP

 Scritto da Davide Bia in Sistemi Windows 5 Giugno 2008 2 commenti

Problema: abilitando nel BIOS le funzioni AHCI oppure RAID del controller Serial ATA integrato nelle schede madri dotate dei nuovi chipset Intel, si ottiene un errore STOP 0×0000007B (INACCESSIBLE_BOOT_DEVICE) al successivo avvio di Windows XP. Ripristinando la modalità compatibile IDE il computer torna ad avviarsi correttamente.

Dettagli: l’errore 0×7B compare in quanto Windows non contiene i driver per i controller SATA in modalità AHCI/RAID - di conseguenza non è più in grado di accedere ai file dell’installazione, fondamentali per l’avvio.

Soluzione: è necessario procedere ad alcuni passaggi per installare i driver Intel necessari. Per eseguire l’operazione sono necessari i diritti amministrativi.

  1. Scaricare dal sito Intel il software Matrix Storage Manager
  2. Estrarre i driver dal file appena scaricato aggiungendo l’opzione -a (es. iata82_cd.exe -a)
  3. Aprire Gestione periferiche in Gestione computer (compmgmt.msc)
  4. Espandere la voce Controller IDE ATA/ATAPI
  5. Avviare la procedura per l’aggiornamento dei driver del controller SATA - il nome riportato varia a seconda della versione del chipset in uso - es. Intel(R) ICH9/DO/DH 4 port Serial ATA Storage Controller 1 - 2920 è relativo al chipset ICH9.
  6. Selezionare l’aggiornamento manuale, quindi specificare il percorso %PROGRAMFILES%\Intel\Intel Matrix Storage Manager\Driver oppure Driver64 per sistemi 64bit. Selezionare la versione AHCI o RAID relativa alla stessa famiglia del chipset attualmente in uso. È normale che compaia una finestra di avvertimento che ne sconsiglia l’installazione in quanto AHCI/RAID non è ancora attivo.
  7. Riavviare il computer
  8. Accedere al BIOS ed attivare la funzione AHCI oppure RAID.
  9. Installare Intel Matrix Storage Manager nel caso si voglia monitorare lo stato dei dischi in modalità RAID.

Soluzioni alternative: è possibile avviare il computer dal CD-ROM di installazione, premere F6 all’inizio del setup e salvare i file della cartella Driver all’interno di un floppy, quindi al momento della richiesta di dove installare Windows, premere R per riparare l’installazione rilevata. Questa soluzione ha lo svantaggio di azzerare gli aggiornamenti installati e reimposta la product-key.

Alcune applicazioni non usano OpenOffice per i documenti RTF

 Scritto da Davide Bia in Sistemi Windows 16 Maggio 2008 Nessun commento

Problema: alcuni applicativi non usano OpenOffice Writer per aprire i file RTF dei report o delle stampe generate dal programma stesso, anche se l’estensione RTF risulta essere associata correttamente ad OpenOffice.

RTF OpenOffice.org

Soluzione: è necessario modificare un valore nel registro di Windows. Per eseguire l’operazione sono necessari i diritti amministrativi.

  • Eseguire %windir%\regedit.exe
  • Navigare alla chiave HKEY_CLASSES_ROOT\.rtf
  • Modificare il valore Predefinito in OpenOffice.org.rtf

Dettagli: questo problema capita frequentemente installando un programma che associa l’estensione RTF a sé, per poi successivamente modificare l’associazione utilizzando “Opzioni cartella” del pannello di controllo oppure il menu contestuale “Apri con…”. Così facendo alcuni valori nel registro non sono modificati ed alcuni programmi potrebbero continuare ad utilizzare la precedente associazione.

Icona di Internet Explorer 7 mancante nel menu Start

 Scritto da Davide Bia in Sistemi Windows 12 Maggio 2008 Nessun commento

Problema: dopo l’aggiornamento ad Internet Explorer 7, nel menu Start di Windows XP l’icona relativa al collegamento ad Internet Explorer 7 risulta mancante.

Icona IE7 mancante

Soluzione: è necessario modificare un valore nel registro di Windows per ripristinare la corretta icona da visualizzare nel menu Start. Per eseguire l’operazione sono necessari i diritti amministrativi.

  • Eseguire %windir%\regedit.exe
  • Navigare alla chiave HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\IEXPLORE.EXE\DefaultIcon
  • Modificare il valore di default in %ProgramFiles%\Internet Explorer\iexplore.exe,-32528
  • Riavviare il computer

Disconnettere le sessioni RDP rimaste aperte sul server

 Scritto da Davide Bia in Sistemi Windows 30 Aprile 2008 Nessun commento

Quando si superano il numero massimo di connessioni contemporanee ai Servizi Terminal di Windows - che in modalità amministratore sono limitate a 2 - risulta impossibile ricollegarsi ed amministrare il server. Questo succede soprattutto quando vengono state lasciate aperte delle sessioni da alcuni utenti che non si disconnettono correttamente - sia deliberatamente chiudendo il client di Desktop Remoto senza effettuare il logoff, che involontariamente a causa della caduta della connessione.

Avviso di Servizi Terminal

Per ripristinare il servizio senza riavviare il server è necessario eseguire alcuni comandi, da console oppure tramite telnet/SSH.

Ottenere la lista delle sessioni aperte

Per prima cosa è necessario conoscere quali sessioni sono rimaste appese sul server.

QUERY SESSION /SERVER:nomeserver

Il risultato del comando è una tabella con tutte le sessioni del server, compreso la console e la sessione RDP riservata al login/logoff. L’opzione /server può essere omessa: nel caso viene eseguita la query in locale.

NOMESESSIONE NOMEUTENTE ID STATO TIPO PERIFERICA
console 0 Conn wdcon
rdp-tcp 65536 Attendi connessione rdpwd
9 ConnQ
>rdp-tcp#19 davidebia 10 Attivo rdpwd

Per le operazioni successive il valore da segnare è il nome della sessione, che nell’esempio corrisponde a rdp-tcp#19.

Forzare la disconnessione

A questo punto, conoscendo il nome delle sessioni da chiudere, è possibile procedere alla disconnessione, una alla volta.

LOGOFF nomesessione /SERVER:nomeserver

Viene eseguito un normale logoff, con salvataggio del profilo ed esecuzione degli script di logout - è normale che richieda qualche minuto per i profili di grosse dimensioni.

Bypassare firewall e protezioni da remoto

Eseguendo le operazioni descritte da LAN o in locale non dovrebbero esserci particolari difficoltà, invece se l’host da ripristinare è esposto su Internet è probabile che la porta UDP 135 del protocollo RPC sia chiusa da un firewall.

Errore 1722 durante la ricezione dei nomi sessione
Errore [1722]:Server RPC non disponibile.

La soluzione migliore per bypassare il problema è quella di progettare una VPN o di installare un server SSH. In questo modo è possibile eseguire i comandi come se fossimo in LAN o locale senza compromettere la sicurezza del server. Come soluzione di emergenza, è possibile tuttavia utilizzare alcuni espedienti:

  • Se è un server di posta (mail server), molto probabilmente è possibile creare degli account “eseguibili”, quindi creare un apposito script batch/WSH da caricare sul server.
  • Se è un server web, molto probabilmente sono presenti PHP, ASP o ASP.NET. Tutti questi linguaggi hanno la possibilità di eseguire comandi e leggere l’output.

In tutti i casi è fortemente consigliato proteggere l’esecuzione della procedura con login/password.

Lettera d’unità non assegnata e non modificabile

 Scritto da Davide Bia in Sistemi Windows 23 Aprile 2008 Nessun commento

Problema: alcune unità disco non possiedono più la lettera di unità e non è possibile né assegnarla, né modificarla. Utilizzando Gestione Disco (diskmgmt.msc) la partizione viene rilevata e riconosciuta come integra, ma quando si tenta di assegnare la lettera d’unità la relativa opzione risulta disabilitata (grayed).

Problema con le lettera d’unità

Soluzione: molto probabilmente è stata modificata la tabella della partizioni inserendo un Partition ID non valido. Utilizzare un qualsiasi programma in grado di modificare la tabella e ripristinare i valori corretti (0B per FAT32 e 07 per NTFS).

Dettagli: questo problema può essere causato dalla disinstallazione di Norton GoBack quando l’unità non è collegata al sistema. GoBack modifica il tipo di partizione in 44 per tutti i dischi rigidi presenti, e ripristina il valore iniziale alla disinstallazione. Anche un virus o altro programma malevolo potrebbe modificare la tabella delle partizioni, rendendo inaccessibili i dischi una volta rimosso.

Approfondimenti:

Errore “Impossibile trovare il file specificato” durante l’installazione dei driver

 Scritto da Davide Bia in Sistemi Windows 5 Febbraio 2008 Nessun commento

Problema: durante la wizard di installazione di un driver per un nuovo hardware, o durante l’aggiornamento dei driver per l’hardware esistente, si ottene un errore al termine della procedura.

Impossibile trovare il file specificato

Messaggio di errore: la wizard “Installazione guidata nuovo hardware” termina con la dicitura “Errore durante l’installazione dell’hardware - Impossibile trovare il file specificato”.

Soluzione: la chiave di registro HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce è mancante. Tale chiave è necessaria durante il rilevamento delle periferiche Plug & Play.

  • Accedere al computer con i privilegi di amministratore
  • Aprire l’editor del registro di sistema - %windir%\regedit.exe
  • Navigare fino alla chiave HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion
  • Clic su Modifica > Nuovo > Chiave, quindi digitare RunOnce
  • Uscire da tutti i programmi e riavviare il computer

Installare WP-Cache su Windows e IIS

 Scritto da Davide Bia in PHP, Sistemi Windows 25 Settembre 2007 1 commento

WP-Cache è un ottimo plug-in per velocizzare Wordpress, effettuando la cache delle pagine già servite in precedenza. Purtroppo non è ben progettato per IIS: dopo averlo installato, la pagina di amministrazione risulterà bianca, quando invece dovrebbe auto-configurarsi e mostrare delle opzioni.

Per renderlo funzionante su Windows ed in particolare IIS, è necessario effettuare alcune modifiche ai sorgenti e successivamente procedere alla configurazione manuale.

Modifiche ai sorgenti

Nel file /wp-content/plugins/wp-cache/wp-cache.php, dalla riga 491, la funzione wp_cache_check_link utilizza dei link simbolici.

function wp_cache_check_link() {
global $wp_cache_link, $wp_cache_file;

if ( basename(@readlink($wp_cache_link)) != basename($wp_cache_file)) {
@unlink($wp_cache_link);
if (!@symlink ($wp_cache_file, $wp_cache_link)) {
echo "<code>advanced-cache.php</code> link does not exist<br />";
echo "Create it by executing: <br /><code>ln -s $wp_cache_file $wp_cache_link</code><br /> in your server<br />";
return false;
}
}
return true;
}

I link simbolici non sono implementati in Windows, e vanno quindi rimosse le funzioni symlink e readlink. Consiglio di effettuare un semplice controllo sull’esistenza del file advanced-cache.php.

function wp_cache_check_link() {
global $wp_cache_link, $wp_cache_file;

if(!file_exists($wp_cache_link))
{
echo "<code>advanced-cache.php</code> link does not exist<br />";
echo "Create it by executing: <br /><code>ln -s $wp_cache_file $wp_cache_link</code><br /> in your server<br />";
return false;
}
return true;
}

Sempre nello stesso file, si utilizza la costante __FILE__

add_options_page('WP-Cache Manager', 'WP-Cache', 5, __FILE__, 'wp_cache_manager');

Questo può causare alcuni problemi con le barre rovesce dei percorsi, per cui consiglio di fornire solo il nome del file, dato che Wordpress è in grado di ricostruire comunque il percorso corretto del plug-in.

add_options_page('WP-Cache Manager', 'WP-Cache', 5, basename(__FILE__), 'wp_cache_manager');

Nel file /wp-content/plugins/wp-cache/wp-cache-phase1.php, alla riga 23, si fa uso della variabile $_SERVER['REQUEST_URI'] che purtroppo in Windows contiene solo parte del permalink.

$key = md5($_SERVER['SERVER_NAME'].preg_replace(’/#.*$/’, ”, $_SERVER['REQUEST_URI']).wp_cache_get_cookies_values());

Il valore corretto lo otteniamo concatenando $_SERVER['SCRIPT_NAME'] e $_SERVER['PATH_INFO']

$key = md5($_SERVER['SERVER_NAME'].preg_replace(’/#.*$/’, ”, $_SERVER['SCRIPT_NAME'].$_SERVER['PATH_INFO']).wp_cache_get_cookies_values());

Per lo stesso motivo è da sistemare il file /wp-content/plugins/wp-cache/wp-cache.php, sostituendo tutte le occorrenze di $_SERVER['REQUEST_URI'].

echo '

‘;

In questo caso utilizziamo una soluzione standard, usata anche in altri plug-in, per indicare la pagina corrente.

echo '
‘;

L’operazione deve essere ripetuta su tutto il file, alle righe 253, 272, 305, 329, 351, 556, 590, 605 e 613.

Configurazione manuale

Dopo aver eseguito le modifiche ai sorgenti, è possibile procedere alla configurazione del plug-in

  • Copiare rinominandolo il file /wp-content/plugins/wp-cache/wp-cache-phase1.php in /wp-content/advanced-cache.php
  • Creare la cartella /wp-content/plugins/cache
  • Concedere i diritti di scrittura a IIS alla cartella /wp-content. Dopo la configurazione, sono sufficienti i permessi per la cartella /wp-content/plugins/cache e /wp-content/plugins/wp-cache ed il file /wp-content/wp-cache-config.php.
  • Modificare il file wp-config.php aggiungendo una costante
    define('WP_CACHE', true);

A questo punto, per far entrare in funzione il plug-in, non resta che accedere alla pagina di amministrazione, dove dovrebbero essere comparse tutte le opzioni di configurazione, ed attivare la cache con l’apposito pulsante.

Fonti di riferimento