Tag Archive - Windows

Office 365: impostare il Never Expire sulle password utenti

E’ sicuramente una pratica poco consigliata e molto poco sicura ma sfortunatamente dipende dalle esigenze e dalla capacità delle persone dell’azienda. Potreste dover andare incontro alla richiesta di modificare la scadenza password di ciascun utente creato in Office 365, farlo da GUI è da escludere a priori (non è fattibile se ho ben visto dalle opzioni a disposizioni ma soprattutto replicate voi la stessa azione a mano per centinaia di utenti), va usata la Powershell e basta un semplice script per applicare la modifica a ciascun account, variando il parametro –PasswordNeverExpires a “$True”.

Una volta connessi alla propria “console” potrete lanciare il comando chiedendo però la selezione di tutti gli utenti registrati (dovrete aiutarvi con il pipe, sempre utile per incastrare un’istruzione dopo l’altra):

Get-MsolUser -All | Set-MsolUser –PasswordNeverExpires $True

Più utenti avrete, più questo comando richiederà minuti di elaborazione. Con il verbose attivo noterete una trafila di account processati che perderanno così la loro scadenza password:

Lo script inserito all’interno del mio toolbox è un pelo più complesso e permette di verificare lo stato della variabile sugli account o esportare il tutto su file CSV / HTML / ecc. Lo trovate nel Wiki all’indirizzo public.gfsolone.com/wiki/doku.php?id=o365:passwdneverexpire.

Adobe Flash Player: aggiornamento in batch della versione 13

Flash Player (AdobeUpdater)Nuovo giro di aggiornamenti per Adobe che da qualche tempo ha cominciato la distribuzione della versione 13 di Flash sia ActiveX che plugin per altri browser.Ho quindi provveduto ad aggiornare il codice del tool e caricare online la nuova versione del Flash Player Updater. Scusate per il ritardo ma mille altri impegni ne hanno rallentato l’uscita ;-)

Non è cambiato nulla rispetto all’ultima volta, tranne che -ovviamente- il “13” all’interno degli URL che richiamano gli ultimi pacchetti di installazione per Internet Explorer e per gli altri browser in circolazione. Rimane quindi valida la discussione del forum Adobe dove si parlava dell’argomento: forums.adobe.com/message/3967370 e questo è il codice aggiornato:


wget http://download.macromedia.com/get/flashplayer/current/licensing/win/install_flash_player_13_active_x.exe
wget http://download.macromedia.com/get/flashplayer/current/licensing/win/install_flash_player_13_plugin.exe
start "Installazione Flash Player ActiveX" /wait install_flash_player_13_active_x.exe -install
start "Installazione Flash Player Plugin" /wait install_flash_player_13_plugin.exe -install
del /S /Q install_flash_player_13_active_x.exe
del /S /Q install_flash_player_13_plugin.exe

Lo stesso codice è disponibile come al solito nel Wiki all’indirizzo public.gfsolone.com/wiki/doku.php?id=batch:flashupdater. Il batch fa parte di un pacchetto eseguibile unico che contiene al suo interno anche il wget.exe. Lanciandolo come amministratore farà tutto automaticamente assicurandosi di forzare la chiusura di eventuali browser rimasti aperti (il controllo viene effettuato per Internet Explorer, Firefox, Opera e Chrome).

Voi come sempre potrete scaricare il pacchetto eseguibile di aggiornamento direttamente dall’URL:

app.box.com/s/5f24bphcc3fqw82rscr8

Buon lavoro :-)

PowerShell: connettersi con utente e password già stabiliti

Lo so che vi ho già spiegato come ci si connette alla PowerShell, ma è anche vero che farlo spesso nell’arco di una giornata lavorativa potrebbe seriamente mettere alla prova la pazienza del dover inserire ogni volta la propria password, nello script suggerito infatti vi ho detto che basta mettere un “-credential mario.rossi@dominio.tld” per mostrare il popup dove inserire solo la password, e se si automatizzasse anche questa operazione saltando direttamente nella console comandi?

Fattibile, tramite un file testuale che contiene la nostra password ovviamente criptata precedentemente. L’operazione è semplice e subito dopo vi basterà modificare lo script originale suggerito nel mio precedente articolo a riguardo per poter immediatamente lavorare in PowerShell sul vostro Exchange, ecco come fare.

Criptazione della password

La prima operazione da eseguire è salvare la vostra password criptata all’interno di un file testuale che terrete poi nel disco fisso della vostra macchina (o dove preferite) così da farlo raggiungere facilmente dallo script ps1 di collegamento. Per farlo aprite PowerShell e digitate il comando:

$credential = Get-Credential -credential mario.rossi@dominio.tld
$credential.Password | ConvertFrom-SecureString | Set-Content c:\pshell\password.txt

Manco a dirlo dovrete cambiare quel “mario.rossi@dominio.tld” con un account amministratore dell’Exchange e quel C:\pshell\ecc. con una cartella realmente esistente dove salvare il file “password.txt” che potrà poi essere utilizzato in seguito.

Modifica dello script di collegamento

A questo punto bisognerà dire allo script di collegamento di utilizzare un utente preciso e la password nel file appena salvato. Ecco il risultato ritoccato:

$User = "mario.rossi@dominio.tld"
$PWord = Get-Content C:\pshell\password.txt | ConvertTo-SecureString
$Credential = New-Object –TypeName System.Management.Automation.PSCredential –ArgumentList $User, $PWord
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell/ -Credential $Credential -Authentication Basic -AllowRedirection
Import-PSSession $Session

Dovrete toccare solo due variabili, ancora una volta si tratta dell’account amministrativo (veri variabile $User) e la posizione del file con la password (vedi $PWord). Eseguendo lo script da PowerShell, a meno di errori, questo si autenticherà immediatamente alla vostra console senza alcun intervento da parte vostra. Potrete ora lanciare i comandi che vi interessano senza più dover inserire utente e password :-)

Anche in questo caso occorrerà ricordarsi di chiudere la sessione (Remove-PSSession) al termine del lavoro e pure stavolta vi ho modificato il documento Wiki così da poter scaricare facilmente il ps1 già pronto (public.gfsolone.com/wiki/doku.php?id=o365:pshellconnect) ;-)

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).

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