Tag Archive - Windows

Batch: cancellare tutti i file e le sottocartelle contenute in una cartella padre (e invio del log via mail)

Un lavoro semplicissimo se fatto in maniera interattiva, ma si risolve facilmente anche in batch nel caso in cui debba essere ripetuto tramite schedulazione, magari su un server, magari di una cartella su uno spazio condiviso (poi vedete voi eh, è riutilizzabile in mille contesti differenti).

Il codice è semplice, data una cartella di partenza tutto ciò che c’è dentro deve sparire, a prescindere che si tratti di sottocartelle contenenti file o che questi si trovino direttamente nella root. Una volta alla settimana bisognerà lanciare una “pulizia di primavera“, questo è il contenuto del mio batch:


set logfile=C:\scripts\cleanup.txt
set folder=\\SERVER\CARTELLA
dir "%%folder%%"/s/b/a | sort /r >> %logfile%
for /f "delims=;" %%D in (%logfile%) do (del /f /q "%%D" & rd /s /q "%%D")
cscript C:\scripts\sendlog.vbs
del /q %logfile%

Ciò che andrà toccato è chiaramente la variabile “logfile” (file dove verrà tenuta traccia di ciò che verrà eliminato) e quella “folder“, la cartella sotto la quale non dovrà più esistere alcunché. Il richiamo al sendlog.vbs tramite cscript (così da non chiedere nulla a video) servirà (come facilmente intuibile) a inviare via mail ciò che è stato trovato e rimosso, il codice ve l’ho già fatto vedere (ne sono quasi certo) in passato ma l’ho ovviamente modificato per l’occasione e ve lo ripropongo:


Set email = CreateObject("CDO.Message")
Set objNTInfo = CreateObject("WinNTSystemInfo")
Set objFSO = CreateObject("scripting.filesystemobject")
Set objArgs = WScript.Arguments

' Date and time
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
For Each objItem in colItems
dtmLocalTime = objItem.LocalDateTime
dtmMonth = Mid(dtmLocalTime, 5, 2)
dtmDay = Mid(dtmLocalTime, 7, 2)
dtmYear = Left(dtmLocalTime, 4)
dtmHour = Mid(dtmLocalTime, 9, 2)
dtmMinutes = Mid(dtmLocalTime, 11, 2)
dtmSeconds = Mid(dtmLocalTime, 13, 2)
Next
datacorrente = dtmDay & "/" & dtmMonth & "/" & dtmYear
oracorrente = dtmHour & ":" & dtmMinutes
'DEBUG: togliere il commento qui di seguito se si vuole visualizzare a video data e ora corrente
'Wscript.Echo datacorrente & " alle " & oracorrente

email.Subject = "Cleanup cartella CARTELLA"
email.From = "root@localhost.tld"
email.To = "me@localhost.tld"
email.Cc = "log@locahost.tld"
'email.Bcc = DestinationBCC
email.TextBody = "Pulizia CARTELLA terminata con successo il " & datacorrente & " alle " & oracorrente & vbCRLF & vbCRLF & vbCRLF & "In allegato il log di cartelle e file rimossi." & vbCRLF & vbCRLF
email.AddAttachment "C:\scripts\cleanup.txt"
email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing")=2
email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver")="smtp.localhost.tld"
email.Configuration.Fields.Update
email.Send
set email = Nothing

Ciò che andrà toccato in questa occasione? Abbastanza intuibile:

  • email.Subject: l’oggetto da assegnare alla mail che vi verrà recapitata (a voi o chiunque dovrà occuparsi di controllare la buona riuscita dell’operazione);
  • email.From: un mittente dal quale far arrivare il log, può non essere reale se il vostro SMTP interno accetta connessione senza autenticazione e chi riceve lascia passare la mail da quel dominio senza particolari controlli antispam;
  • email.To: chi dovrà ricevere la comunicazione (tra le virgolette basterà usare una virgola per separare più indirizzi di posta, ndr);
  • email.Cc: come sopra ma ovviamente in copia conoscenza;
  • email.Bcc: commentato nel codice. Può essere ovviamente attivato togliendo il commento e può mandare la stessa mail in copia conoscenza nascosta;
  • email.TextBody: il corpo della mail che cattura ora e data dalla macchina che lancia la pulizia e allega il file di log (email.AddAttachment, ndr) per permettere di consultare quanto fatto;
  • forse inutile dirlo ma al posto di smtp.localhost.tld andrà riportato un vostro SMTP server interno, lo script non prevede (come potete vedere voi stessi) autenticazione, se volete includerla vi rimando allo script originale sul Wiki.

Mettete lo script nelle operazioni pianificate di un Windows sempre acceso, scegliete ora e giorno “et voilà“, il gioco è fatto.

Exchange: risolvere l’errore Remote Server returned ’550 5.7.1 RESOLVER.RST.AuthRequired; authentication required’

Questo è uno di quei casi in cui molto probabilmente voi ricorderete di aver fatto correttamente una cosa ma Microsoft in fondo in fondo non è mai “stata del tutto d’accordo“. Un collega mi segnala un problema di ricezione mail su un gruppo gestito dall’Exchange, l’errore che gli torna è esattamente quello che vedete nel titolo dell’articolo. In teoria, secondo Microsoft, questo tipo di errore arriva perché sul server il gruppo di distribuzione è configurato per accettare solo mail dall’interno dell’organizzazione rifiutando tutto ciò che arriva da fuori. Per capirci, il primo dei due flag in immagine:

e si, ci avete visto piuttosto bene, è selezionato il secondo ma evidentemente la management console via web e la PowerShell non erano del tutto d’accordo tra di loro, questo il risultato (tramite Get-DistributionGroup -Identity “NOME DEL GRUPPO” | FL):

A questo punto il problema è di facile risoluzione, lo si fa sempre tramite PowerShell, il comando è questo:


Set-Distributiongroup -identity "NOME DEL GRUPPO" -RequireSenderAuthenticationEnabled $false

Il tutto è riportato nel documento di Supporto Microsoft all’indirizzo support.microsoft.com/kb/2773786/en-us. La modifica è immediata e molto probabilmente compariranno le mail che pensavate fossero andate perse (non quelle per le quali il mittente ha già ricevuto l’errore, occhio, quelle sarà necessario farsele rimandare).

Office 365: connessione alla PowerShell

Mettetevi il cuore e l’anima in pace: se decidete di avere a che fare con Office 365 e non vi basta l’interfaccia grafica messa a disposizione da Microsoft dovrete fare i conti con la PowerShell di Windows. Connettersi in PowerShell al proprio Exchange Online richiede alcuni comandi basilari e specifici pacchetti di sistema che se non presenti andranno installati.

Tutto gratuito e ampiamente documentato in maniera ufficiale e non (il web è davvero pieno di persone come me e community che parlano di questo argomento per aiutare il prossimo) ;-)

Da dove cominciare

Va capito innanzi tutto se il vostro sistema è provvisto di PowerShell (da Windows 7 in poi è generalmente presente). Dovreste trovare il prompt andando in Start / Tutti i programmi / Accessori / Windows PowerShell. Alla classica PowerShell già presente in Windows conviene già aggiungere il modulo Azure per Active Directory, come riportato in questo documento di Technet: technet.microsoft.com/en-us/library/jj151815.aspx#bkmk_installmodule. Scegliete la vostra versione (32 o 64 bit), scaricatela ed installatela a bordo della vostra macchina, vi servirà sicuramente in futuro (anche per quello che riguarda miei script o piccoli snippet).

Aggiornamento 03/04/2014
Anche se nessuno lo ha notato / segnalato, prima di poter lanciare script o comandi in PowerShell sarà necessario abilitare la stessa a ricevere / eseguire comandi e script senza alcuna restrizione, come spiegato all’interno di un documento di Technet disponibile all’URL technet.microsoft.com/en-us/library/ee176847.aspx. Il comando da lanciare è quindi semplice (e dovrà essere fatto da PowerShell, ndr):


Set-ExecutionPolicy Unrestricted

Fatto una volta, non andrà poi ripetuto in futuro e vi permetterà di utilizzare comandi e script senza ulteriori esitazioni. Se la shell dovesse restituirvi un errore provate a chiuderla e rilanciarla con privilegi amministrativi (tasto destro / Esegui come amministratore).

Il collegamento alla PowerShell si effettua attraverso tre semplici righe da immettere nel prompt, vi conviene salvarle in un file .ps1 (estensione dedicata agli script PowerShell) così da richiamarlo più facilmente ogni volta che ne avete bisogno.

Qualche riga per il collegamento rapido

Giusto per capire meglio l’ultima riga del precedente paragrafo: aprite un editor di testo (Notepad++ è perfetto anche per questo) e incollate questo codice:


$UserCredential = Get-Credential -Credential utente@dominio.tld
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ -Credential $UserCredential -Authentication Basic -AllowRedirection
Import-PSSession $Session

Avendo cura di sostituire “utente@dominio.tld” con un utente realmente esistente sul vostro Office 365 che abbia diritti amministrativi della parte Exchange. Così facendo vi comparirà un popup dove inserire la password dell’account per permettere così al prompt di creare un ponte verso la vostra console:

Lo trovate anche sul Wiki: public.gfsolone.com/wiki/doku.php?id=o365:pshellconnect. Comodo e rapido da richiamare ogni volta che si ha necessità di collegarsi. Eseguire uno script in PowerShell è facile, basta iniziare a scrivere il nome del file ps1 e lasciarlo completare al tabulatore (sulla tastiera), quindi un invio per confermare l’esecuzione.

Una volta dentro ogni comando sarà a vostra disposizione e potrete effettuare qualsiasi operazione sui vostri dati, caselle, domini, ecc., questo ovviamente è un altro argomento e per oggi si parla solo dei fondamentali “prima di partire con il lavoro sporco“.

Ricordati di chiudere la porta

Come in ogni casa che si rispetti, occorre ricordarsi di chiudere la porta prima di abbandonare il locale. Ogni sessione aperta verso la vostra console deve avere un inizio ed una fine, per questo motivo esiste un semplice comando che vi permetterà di controllare il numero di sessione a voi assegnato, quindi un secondo per chiuderla:


Get-PSSession
Remove-PSSession 1

Esattamente come mostrato qui di seguito (dove il numero 1 dopo il Remove-PSSession è dovuto a quello che vedete qui in immagine nella colonna “Id”):

Questo perché c’è un numero massimo di sessioni aperte verso Exchange per ciascuna persona (se la memoria non inganna sono 3 simultanee, chiedo l’aiuto del pubblico per questa volta) e ogni tanto non chiuderne una potrebbe obbligarvi a star fermi, chiusi fuori casa in attesa del timeout di una delle sessioni per poter rientrare.

Questo è ciò che vi serve per partire, il collegamento alla PowerShell è la porta verso il mondo dell’amministrazione Exchange non grafica, la migliore quando serve mettere pesantemente mano alla vostra nuova infrastruttura di posta elettronica.

Benvenuti a bordo.

Office 365: deploy della Suite su più macchine

Primo di una serie di articoli dedicati a lui e a ciò che lo circonda (console, powershell e chi più ne ha, più ne metta) oggi introduco quello che è l’argomento principalmente affrontato in questo periodo in azienda: il passaggio da Lotus Domino (e Notes, ovviamente) a Microsoft “Exchange in-cloud“, decisamente meglio conosciuto come Office 365.

Partiamo dalle basi: Office 365 pensato per le medie e grandi aziende offre una serie di licenze che ovviamente permettono di accedere a più o meno “benefit“. Si va dalla più classica e basica delle utenze con accesso in sola WebMail a quella più ricca che comprende il download di Office 2013 completo da poter installare e attivare su 5 macchine per ciascuna utenza (niente codici di attivazioni, si va in base all’account aziendale precedentemente creato). Per maggiori informazioni in merito vi rimando al commerciale di zona che potrà indubbiamente illuminarvi più di me ;-)

Ciò che allo stato attuale dovete sapere è che qui abbiamo organizzato -migrazione dei contenuti a parte- un’installazione gestita da un apposito appliance Dell del quale spero di potervi parlare a breve, con l’aiuto -come al solito- di script in batch (e non solo). Prima di partire posso consigliarvi una lettura del documento ufficiale di Microsoft dove vengono specificati i requisiti minimi per l’installazione / collegamento all’ambiente Office 365? Lo trovate qui: office.microsoft.com/it-it/office365-suite-help/requisiti-software-per-office-365-per-aziende-HA102817357.aspx

Pacchetto di installazione

Da creare grazie ad un piccolo deployment tool di Microsoft, documentato anch’esso, in base alle proprie esigenze, per lo più dettate dalla versione (32 o 64 bit) e dalla lingua, proprio perché -come già detto- con una licenza E3 (la più grande per l’utente) potrete accedere ad una versione completa di Office 2013 (365 ProPlus con sottoscrizione).

Il documento di Microsoft si trova all’indirizzo technet.microsoft.com/en-us/library/jj219422.aspx e nel caso in cui vogliate fare un’installazione che comprenda tutto richiederà il tool (ovviamente) e un file di configurazione XML con stringhe simili a queste:


<Configuration>

<Add SourcePath="" OfficeClientEdition="32" >
<Product ID="O365ProPlusRetail">
<Language ID="it-it" />
</Product>
</Add>

<!--  <Updates Enabled="TRUE" UpdatePath="\\Server\Share\Office\" /> -->

<Display Level="None" AcceptEULA="TRUE" />
<Logging Name="O365PPSetup.txt" Path="%temp%" />
<Property Name="AUTOACTIVATE" Value="1" />
<Property Name="FORCEAPPSHUTDOWN" Value="TRUE" />

</Configuration>

Sufficientemente comprensibile per chi non è alle primissime armi: verrà installato un Office 365 ProPlus (quindi un Office 2013 Professional con sottoscrizione, nda) in italiano, a 32 bit, accettando in automatico la licenza EULA , richiedendo l’attivazione automatica al primo avvio, loggando ogni operazione in un file di testo chiamato O365PPSetup.txt (salvato nella %temp%) e forzando ogni applicazione del pacchetto Office a chiudersi durante la fase di installazione.

Ho volutamente commentato e non rimosso la stringa che abilita gli aggiornamenti e dichiara l’eventuale server interno dove andarli a pescare. Nel nostro caso non c’è, ci affidiamo al WSUS.

A questo punto non resta che pretendere dal tool il download del necessario per l’installazione sulle macchine. Per farlo basta un prompt dei comandi e una stringa: setup /download

La stringa non farà altro che leggere il vostro file di configurazione e scaricare ciò che desiderate:

A voi non resta che attendere il termine del download, inserire tutto il contenuto della cartella in un punto raggiungibile all’interno della vostra rete e preparare un piccolo batch che lancerà in maniera silente l’installazione del software sulle macchine desiderate:


setup.exe /configure

Niente di più banale e semplice: così come per il setup /download, questo comando andrà a cercare e leggere il file di configurazione XML (che vi ricordo dovrà chiamarsi semplicemente “configuration.xml“) per installare il necessario all’interno del PC. Al termine dell’installazione troverete tutte le applicazioni della suite nel menu Start / Tutti i Programmi / Microsoft Office 2013 (in Windows 8 e 8.1 ovviamente troverete il tutto con il tasto Windows + Q).

E’ tutto molto semplice, almeno per il momento, il bello del gioco deve ancora arrivare e richiederà l’utilizzo -spesso e volentieri- della Powershell che può arrivare laddove la console grafica accessibile via web non può proprio addentrarsi a causa delle sue limitazioni (deve poter essere alla portata di chiunque, ricordate che Office 365 è un servizio pensato per tutti).

Come anticipato questo è solo il primo di -spero- tanti articoli dedicati al mondo Office 365 ed alla sua amministrazione (risoluzione dei problemi di percorso compresa nel prezzo). In coda all’articolo troverete inoltre un box di link che ho messo (e continuo a mettere) su Urli.st per tenere traccia di tutto il necessario / utile per l’amministratore del servizio. Se avete suggerimenti, osservazioni o dubbi l’area commenti è a vostra totale disposizione, come sempre :-)

Time Machine: backup in rete su disco NTFS collegato ad una macchina Windows

Mi dispiace ma non sono riuscito a rendere il titolo più breve, o per lo meno non è così semplice farlo pur continuando a farvi capire bene di cosa parlerò in questo articolo :-) L’approfondimento di oggi contiene diversi passaggi che potrebbero non essere così semplici e accessibili proprio per tutti, se vi sembra di non riuscire a capire qualcosa vi prego di farmelo sapere tramite l’area commenti, sempre a vostra disposizione.

Una macchina Windows, una Apple, nessun AirPort Time Capsule, solo un banale disco esterno USB 3 collegato alla macchina Windows e formattato in NTFS dove tipicamente ospito il backup della macchina Windows, la musica, le serie televisive e cose così. Non si tratta del backup su disco di rete, sicuramente più semplice, è l’alternativa all’acquisto di un disco portatile USB da dedicare al proprio Mac per effettuare il backup dei vostri dati (passaggio fondamentale da ripetere ogni qual volta potete, mi raccomando). Chiarisco subito ancora prima di partire con il passo-passo: ciò che ho fatto non è sicuramente la soluzione supportata e suggerita da Apple o dal vostro “cuggino informatico“, funziona, ma non è ovviamente considerabile una spiaggia stabile e definitiva, se avete acquistato un disco esterno per il vostro Time Machine non buttatelo via e non riutilizzatelo, non subito almeno ;-)

Immagine disco (Sparse bundle)

Di documenti e guide ne ho lette tante, io ho personalmente sperimentato e portato correttamente a termine una serie di passaggi che vi spiego più che volentieri ma occhio ai vostri dati, ci tengo a ribadirlo, non metteteli “in pericolo”, soprattutto se siete inesperti ;-) Primo passaggio: il vostro Macbook (o iMac, ovviamente) ha bisogno di spazio, ciò che tipicamente viene creato sul disco esterno o di rete altro non è che un filesystem scrivibile dal sistema, uno “sparse bundle“, come un VHD sui sistemi Windows per farla molto semplice. L’utilità disco di OS X servirà esattamente a questo.

Da Spotlight cercate e avviate l’Utility Disco, quindi create una nuova immagine disco. Questa dovrà avere alcuni dettagli che è meglio specificare e mostrare:

Date un nome all’immagine, quindi una posizione dove salvare il file creato (suggerisco temporaneamente il Desktop, dopo vi spiegherò il perché) e cercate di scegliere un “Nome” (nell’immagine qui sopra potete vedere il mio cursore e capire a cosa faccio riferimento) il più breve e semplice possibile, magari senza spazi, servirà ad identificare il disco virtuale una volta montato nel sistema. Occhio alle dimensioni, nell’immagine che ho catturato durante la mia prova ho commesso un banale errore: su un disco di circa 250GB di capienza ho scelto 100GB di spazio a disposizione dell’immagine, non fatelo a meno che non vogliate ripetere il procedimento, scegliete di partire con 150GB e non preoccupatevi per il vostro disco, lo spazio non corrisponderà a 150GB reali, questi verranno occupati man mano che sarà necessario spazio per il backup, non è detto quindi che dovrete utilizzarli tutti, quel valore corrisponderà quindi al limite raggiungibile. Lasciate invariato il formato dell’immagine (Mac OS esteso) e dopo aver scelto una codifica a 128-bit (per rendere più sicura la vostra immagine e proteggerne i dati all’interno) scegliete di creare una partizione singola con mappa della partizioni Apple e modificate il formato in “Immagine disco sparse bundle“. In pratica, fatta eccezione per lo spazio a disposizione, potete seguire scrupolosamente l’immagine di sopra ;-)

Una volta fatto clic su Crea dovrete solo specificare una password a vostra scelta e attendere qualche minuto (dipende dalla velocità del vostro disco e della vostra macchina più in generale) quindi uscire dall’Utility Disco. Avrete appena creato lo spazio a disposizione del vostro Time Machine, a prescindere da dove quel file Sparse Bundle verrà fisicamente ospitato!

Perché l’immagine sul Desktop?

A meno che non abbiate una rete casalinga progettata e realizzata ad-hoc come se vi trovaste in azienda, è possibile che vi limitiate ad utilizzare un router o un access-point sul quale passa di tutto, configurato in WiFi-N (5 GHz con picchi di 300 Mbps al massimo o giù di lì), mandare in backup più di 60/70 Gb al primo approccio non è la cosa più veloce di questo mondo. Tutto cambia per la pura copia di un singolo file. Fare quindi il primo backup forzato tenendo il file sul disco locale e spostarlo dopo sarà molto più semplice e veloce. In seguito verranno solo toccati i file che sono stati modificati, rendendo l’operazione più leggera e affrontabile tramite rete WiFi / cablata.

Montare l’immagine

Il file appena creato corrisponde -come già detto- ad un’immagine “montabile“, come se fosse un disco esterno collegato al vostro portatile, basterà un doppio clic ovunque esso sia per veder comparire il disco al quale prima avete dato un nome prima della creazione immagine :-)

Siete pronti per chiedere a Time Machine di utilizzare questo disco per conservare al sicuro i vostri file. Occhio: se fino ad oggi avete effettuato il backup altrove poco importa, non c’è bisogno di inizializzare il DB come alcune guide chiedono di fare, si potrà direttamente fare lo switch di disco da Terminale.

Puntare al nuovo disco di backup

Un’operazione che si porta facilmente a termine tramite Terminale, evitando così le limitazioni imposte da Apple e permettendo di utilizzare la nuova immagine disco a prescindere da dove si trovi. Aprite il Terminale cercandolo da Spotlight, quindi eseguite il comando:

sudo tmutil setdestination /Volumes/Backup

Dove dovrete sostituire “Backupcon il nome che avete dato al vostro disco virtuale. Chiaramente vi verrà chiesta la password (se presente) del vostro account da amministratore:

L’esecuzione del comando è immediata, la modifica è stata già operata e potrete notare il risultato aprendo il Pannello Preferenze di Time Machine:

Ready, set, go!

Pronti per effettuare il primo backup, potete forzare Time Machine dall’icona nel Dock: tasto destro e “Esegui il backup adesso“:

Riuscirete così a godervi il risultato della vostra modifica quando tutto partirà correttamente e i dati cominceranno a popolare il vostro nuovo disco virtuale creato ad-hoc :-)

A questo punto chi vi impedirà di copiare il file appena creato e popolato in un vostro disco attaccato ad una macchina Windows nella stessa rete? Ve lo dico io: nessuno. Basandovi sull’articolo che ho pubblicato poco tempo fa (OS X: abilitare la scrittura su NTFS) potrete tranquillamente spostare il file dell’immagine e montarlo sul vostro OSX quando avrete necessità di fare il backup dei vostri dati:

Questo è quanto, come al solito nell’area commenti possiamo discutere alternative, anomalie e ogni altra cosa legata allo specifico articolo :-)

Buon backup a tutti!

Page 3 of 39«12345»...Last »