Archivi categoria: Come fare per…

Disinstallare Office manualmente

CancellaOffice Spesso capita di dover aggiornare o reinstallare Office ma la procedura non sempre riesce…

Microsoft vi aiuta.

Ecco come fare:

Dal sito del supporto Microsoft apri il link seguente e sarai reindirizzato alla pagina “Disinstallare Office da un PC”.

A questo punto scegli:

  • il sistema operativo del PC
  • la versione di Office da disinstallare.

Il sistema scarica un eseguibile che esegue automaticamente la disinstallazione.

Attenzione: riavviare il PC dopo la disinstallazione!!!

 

Lanciare uno script remoto su un PC del dominio con PsExec

server-to-pc Volete lanciare uno script remoto su un PC del dominio?

Volete, ad esempio, attivare il DHCP su un client della rete?

Usate PSexec!

Ecco come fare:

Anzitutto devi scaricare PsExec (puoi seguire le istruzioni presenti in questo nostro articolo).
Crea poi un file vbs o bat da copiare sul PC remoto e lanciare. Io in questo caso uso un file AttivaDHCP.vbs che configura l’assegnazione automatica degli indirizzi IP con DHCP sul PC remoto. Queste le righe dello script AttivaDHCP.vbs:

strComputer = "."
Set objWMIService = GetObject(_
 "winmgmts:\\" & strComputer & "\root\cimv2")
Set colNetAdapters = objWMIService.ExecQuery _
 ("Select * from Win32_NetworkAdapterConfiguration " _
 & "where IPEnabled=TRUE")
 
For Each objNetAdapter In colNetAdapters
 errEnable = objNetAdapter.EnableDHCP()
 errEnable = objNetAdapter.SetDNSServerSearchOrder()
Next

Crea poi un file .bat ed inserisci nella sezione “Impostazione parametri fissi” il nome dell’utente amministratore, il percorso/nome del file dello script da copiare e lanciare sul PC remoto. Ecco lo script:

@echo off
rem Impostazione parametri fissi
rem ============================
SET UTENTEAMMINISTRATORE="MIODOMINIO\Administrator"
SET PERCORSOSCRIPT="\\SERVER-01\Scripts"
SET NOMESCRIPT="AttivaDHCP.vbs" 

echo Impostazione parametri variabili
echo ================================
SET /P NOMEPC=[Inserisci il nome del PC]: 
SET /P PASSWORDADMIN=[Inserisci la password dell'utente %UTENTEAMMINISTRATORE%]: 


if "%PASSWORDADMIN%"=="NUL" goto NOPARAMETERS
if "%NOMEPC%"=="NUL" goto NOPARAMETERS 
Set NOMEPC=NUL 
Set PASSWORDADMIN=NUL 
echo.
echo.
echo.

echo Copio il file dello script sul PC %NOMEPC%
echo ==========================================
set STRINGAPSEXECCOPIA=cmd /c copy %PERCORSOSCRIPT%\%NOMESCRIPT% %public%\downloads
psexec -u %UTENTEAMMINISTRATORE% -p %PASSWORDADMIN% \\%NOMEPC% %STRINGAPSEXECCOPIA%
echo.
echo.
echo.

echo Lancio lo script sul PC %NOMEPC%
echo ================================
set STRINGAPSEXECLANCIA=cscript %public%\downloads\%NOMESCRIPT%
psexec -u %UTENTEAMMINISTRATORE% -p %PASSWORDADMIN% \\%NOMEPC% %STRINGAPSEXECLANCIA%
echo.

pause 
Set PASSWORDADMIN=NUL
Set NOMEPC=NUL
goto FINE

:NOPARAMETERS
echo.
echo ERRORE: Inserire il nome del PC e la PASSWORD DI ADMIN

:FINE
echo.
echo =================
echo Fine elaborazione

Lo script dapprima copierà il file indicato nella variabile %NOMESCRIPT% nel percorso locale del PC %public%\downloads e poi lo lancerà. Per consentire i giusti permessi lo script chiederà la password dell’utente amministrativo indicato nella variabile %UTENTEAMMINISTRATORE%.

Otterrai:

Impostazione parametri variabili
================================
[Inserisci il nome del PC]: PC-001
[Inserisci la password dell'utente "MIODOMINIO\Admin"]: Mi@password.



Copio il file dello script sul PC PC-001
==========================================

PsExec v2.11 - Execute processes remotely
Copyright (C) 2001-2014 Mark Russinovich
Sysinternals - www.sysinternals.com


        1 file copiati.
cmd exited on PC-001 with error code 0.



Lancio lo script sul PC PC-001
================================

PsExec v2.11 - Execute processes remotely
Copyright (C) 2001-2014 Mark Russinovich
Sysinternals - www.sysinternals.com


Microsoft (R) Windows Script Host Versione 5.8
Copyright (C) Microsoft Corporation 1996-2001. Tutti i diritti riservati.

cscript exited on PC-001 with error code 0.

Premere un tasto per continuare . . .

=================
Fine elaborazione

Installazione automatica PDFcreator

PDFprinter Volete installare una stampante PDF in un PC del dominio senza intervento dell’utente?

Usate PDFcreator

Ecco come fare:

Innanzitutto scaricate PDFcreator (la versione standard, non la Plus) e copiatelo in una cartella condivisa sul server.

Create poi uno script .bat, nella stessa cartella, con il seguente contenuto:

@echo off
for /f "tokens=*" %%a in ('dir /b "%~dp0PDFCreator*Setup.exe"') do (
echo %n% %~dp0%%a
start /wait "" "%~dp0%%a" /ForceInstall /SILENT /LANG=Italiano /COMPONENTS="program,ghostscript" /NORESTART /NOICONS /ProxyName=proxy1:8088
)

Io ho inserito anche un falso proxy per evitare che il programma si connetta ad Internet. Gli altri switch della linea di comando servono ad usare la lingua italiana (/LANG=Italiano), ad installare solo i componenti necessari (/COMPONENTS=”program,ghostscript”), ad evitare il riavvio del PC (/NORESTART), e ad evitare che il programma aggiunga icone sul desktop (/NOICONS).

L’opzione /SILENT consente un’installazione che mostra lo stato di avanzamento, ma se vorreste evitare del tutto interazioni con l’installazione allora basterà usare lo switch /VERYSILENT.

Basterà quindi lanciare lo script .bat dalla cartella condivisa e l’installazione creerà automaticamente una nuova stampante PDF su cui lanciare le stampe per la creazione dei documenti.

Vi consiglio anche di impostare la creazione di documenti PDF/A per l’utilizzo istituzionale; il formato PDF/A, infatti, incorpora tutte le informazioni necessarie e sufficienti per la visualizzazione del documento e quindi ne garantisce la leggibilità anche nelle versioni future. Questi i passaggi:

PDFcreator1

Quindi seleziona il profilo relativo

PDFcreator2

Come modificare il nome di un computer del dominio da remoto

RinominaPC Volete cambiare il nome di un computer  del dominio senza accedere fisicamente al PC?
Un comando di Windows Server vi consente l’operazione.

Ecco come fare:

dal server di dominio lanciare il seguente comando

netdom renamecomputer NOMEORIGINALEPC /newname:NUOVONOMEPC /ud:NOMEDOMINIO\Administrator /pd:PasswordAmministratore

La sintassi è quindi:

netdom renamecomputer {nome del PC da cambiare} /newname:{nuovo nome del PC} /ud:{nome del dominio}\{nome utente amministratore del dominio} /pd{password dell’utente amministratore del dominio}

L’output a cui bisognerà dare conferma sarà il seguente (tenendo presente che se sul PC sono presenti condivisioni e servizi basati su nome computer essi non funzioneranno più):

Con questa operazione il computer NOMEORIGINALEPC verrà ridenominato NUOVONOMEPC.

Alcuni servizi, ad esempio Autorità di certificazione, si basano su un nome di computer fisso. Se un servizio di questo tipo è in esecuzione in NOMEORIGINALEPC, una modifica del nome di computer avrebbe un'influenza negativa.

Continuare (S o N)?

Notifiche Windows Server Backup tramite e-mail pianificate

Windows backup notification Usate Windows Server Backup e vorreste ricevere le notifiche dell’esito del backup?

Un’operazione pianificata vi aiuterà!

Ecco come fare:

Create, sul server che effettua il backup, due operazioni pianificate (una per il backup riuscito l’altra per il backup con errori) importando i seguenti files XML (personalizzando le parti evidenziate):

File BackupKO.xml

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2012-11-22T10:58:40.4469273</Date>
    <Author>NOMEDOMINIO\utente</Author>
  </RegistrationInfo>
  <Triggers>
    <EventTrigger>
      <Enabled>true</Enabled>
      <Subscription>&lt;QueryList&gt;&lt;Query Id="0" Path="Microsoft-Windows-Backup"&gt;&lt;Select Path="Microsoft-Windows-Backup"&gt;*[System[(EventID=5 or EventID=8 or EventID=17 or EventID=18 or EventID=19 or EventID=20 or EventID=21 or EventID=22 or EventID=49 or EventID=50 or EventID=52 or EventID=100 or EventID=517 or EventID=518 or EventID=521 or EventID=527 or EventID=528 or EventID=544 or EventID=545 or EventID=546 or EventID=561 or EventID=564 or EventID=612)]]&lt;/Select&gt;&lt;/Query&gt;&lt;/QueryList&gt;</Subscription>
    </EventTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>NOMEDOMINIO\utente</UserId>
      <LogonType>Password</LogonType>
      <RunLevel>HighestAvailable</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>Parallel</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>PT4H</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <SendEmail>
      <Server>127.0.0.1</Server>
      <Subject>Errore backup server</Subject>
      <To>info@acme.it</To>
      <From>info@acme.it</From>
      <Body>Verificare il backup da Windows server backup.</Body>
      <HeaderFields />
      <Attachments />
    </SendEmail>
  </Actions>
</Task>

E file BackupOK.xml

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2012-11-22T10:58:40.4469273</Date>
    <Author>NOMEDOMINIO\utente</Author>
  </RegistrationInfo>
  <Triggers>
    <EventTrigger>
      <Enabled>true</Enabled>
      <Subscription>&lt;QueryList&gt;&lt;Query Id="0" Path="Microsoft-Windows-Backup"&gt;&lt;Select Path="Microsoft-Windows-Backup"&gt;*[System[(EventID=4)]]&lt;/Select&gt;&lt;/Query&gt;&lt;/QueryList&gt;</Subscription>
    </EventTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>NOMEDOMINIO\utente</UserId>
      <LogonType>Password</LogonType>
      <RunLevel>HighestAvailable</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>Parallel</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>PT4H</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <SendEmail>
      <Server>127.0.0.1</Server>
      <Subject>BACKUP OK </Subject>
      <To>info@acme.it</To>
      <From>info@acme.it</From>
      <Body>Backup terminato correttamente.</Body>
      <HeaderFields />
      <Attachments />
    </SendEmail>
  </Actions>
</Task>

Nei server con sistema operativo Windows 2012 R2 il comando di invio e-mail è deprecato per cui ricorriamo a Powershell. Lanceremo quindi al posto dell’attività “Invio messaggio di posta elettronica (deprecato)” l’attività “Avvio programma” con i seguenti parametri:

Programma o script:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Parametro:
-command ” & {Send-MailMessage -SMTPServer 127.0.0.1 -To ‘info@acme.it’ -From ‘info@acme.it’ -Subject ‘Errore backup server’ -Body ‘Verificare il backup da Windows server backup.’}”

O più semplicemente usare i seguenti file:

File BackupKO-2012R2.xml

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2012-11-22T10:58:40.4469273</Date>
    <Author>NOMEDOMINIO\utente</Author>
  </RegistrationInfo>
  <Triggers>
    <EventTrigger>
      <Enabled>true</Enabled>
      <Subscription>&lt;QueryList&gt;&lt;Query Id="0" Path="Microsoft-Windows-Backup"&gt;&lt;Select Path="Microsoft-Windows-Backup"&gt;*[System[(EventID=5 or EventID=8 or EventID=17 or EventID=18 or EventID=19 or EventID=20 or EventID=21 or EventID=22 or EventID=49 or EventID=50 or EventID=52 or EventID=100 or EventID=517 or EventID=518 or EventID=521 or EventID=527 or EventID=528 or EventID=544 or EventID=545 or EventID=546 or EventID=561 or EventID=564 or EventID=612)]]&lt;/Select&gt;&lt;/Query&gt;&lt;/QueryList&gt;</Subscription>
    </EventTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>NOMEDOMINIO\utente</UserId>
      <LogonType>Password</LogonType>
      <RunLevel>HighestAvailable</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>Parallel</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>PT4H</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe</Command>
      <Arguments>-command " &amp; {Send-MailMessage -SMTPServer 127.0.0.1 -To 'info@acme.it' -From 'info@acme.it' -Subject 'BACKUP OK' -Body 'Verificare il backup da Windows server backup.'}"</Arguments>
    </Exec> 
 </Actions>
</Task>

File BackupOK-2012R2.xml

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2012-11-22T10:58:40.4469273</Date>
    <Author>NOMEDOMINIO\utente</Author>
  </RegistrationInfo>
  <Triggers>
    <EventTrigger>
      <Enabled>true</Enabled>
      <Subscription>&lt;QueryList&gt;&lt;Query Id="0" Path="Microsoft-Windows-Backup"&gt;&lt;Select Path="Microsoft-Windows-Backup"&gt;*[System[(EventID=4)]]&lt;/Select&gt;&lt;/Query&gt;&lt;/QueryList&gt;</Subscription>
    </EventTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>NOMEDOMINIO\utente</UserId>
      <LogonType>Password</LogonType>
      <RunLevel>HighestAvailable</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>Parallel</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>PT4H</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe</Command>
      <Arguments>-command " &amp; {Send-MailMessage -SMTPServer 127.0.0.1 -To 'info@acme.it' -From 'info@acme.it' -Subject 'BACKUP OK' -Body 'Backup terminato correttamente.'}"
      </Arguments>
    </Exec> 
  </Actions>
</Task>

Al verificarsi dell’evento di fine backup sarà spedito un messaggio e-mail con l’esito del salvataggio.

Se non avete un server di posta interno vi consigliamo di leggere il nostro post Configurare un SMTP server su Windows 2008 senza Exchange

Come evitare che un ransomware crittografi i files condivisi su un server

Stop ransomware Volete evitare che un ransomware crittografi i vostri files condivisi su un server?

Bloccate le estensioni che i ransomware creano.

I ransomware sono dei softwares che crittografano il contenuto dei vostri files di produttività (doc, xls, jpg, pdf, ecc.) cancellando il file originale e creandone una versione crittografata con un nome files composto dal vostro nome file seguito da un’estensione personalizzata.
Il più famoso ransomware, Cryptolocker, ad esempio, crea dei files con un estensione contenente la parola “crypt” oppure contenente un indirizzo di posta elettronica (tipicamente l’indirizzo di colui che potrebbe sbloccare i files).
Lo scopo di questo post è quello di bloccare il processo di creazione di files con dette estensioni, stoppando sul nascere l’infezione. Infatti se si riesce ad inibire il processo di creazione dei files che presentano certi tipi di estensioni, bloccheremmo in pratica l’infezione.
Il procedimento è possibile su tutti i servers Microsoft grazie allo strumento di amministrazione chiamato “Gestione risorse file server” (fsrm.msc). Qualora non trovaste questa voce negli strumenti di amministrazione bisognerà installare il ruolo “Gestione risorse file server” dal Server Manager (in 2008 il ruolo si chiama “Servizi file” mentre in 2012 il ruolo è Servizi file e archiviazione ->Servizi file e iScsi ->Gestione risorse file server).
Potete anche usare Powershell sia per verificare che il servizio sia già attivo (se il risultato è true allora il ruolo è già installato):

Import-Module ServerManager;(Get-WindowsFeature FS-Resource-Manager).Installed

che per installarlo

Import-Module ServerManager; Add-WindowsFeature FS-Resource-Manager

Ricordatevi di eseguire Powershell sempre come amministratore!

Una volta attivato il ruolo, lanciare la console dagli strumenti di amministrazione.

Gestione risorse file server
figura 1

Selezionare Gestione screening dei file -> Gruppi di file ed aggiungere un nuovo gruppo di files di nome “Crypto” contenente le estensioni che volete bloccare:
Ad esempio: *.*@*, *.*crypt*, *.*yy*, *.frt*, *.locky, *.???.exe, *.???.cab.

Proprietà gruppo di file
figura 2

Poi nella sezione Gestione screening dei file -> Modelli per lo screening dei file aggiungere un nuovo modello “Blocca ransomware” con le opzioni indicate nella figura 3

modello per lo screening
figura 3

Volendo potete anche abilitare, nella sezione messaggio di posta elettronica, l’invio degli avvisi all’amministratore di sistema cosicché al primo tentativo del ransomware di crittografare un file della rete sarà lanciata un’e-mail di avviso.
Prima di abilitare tale funzione bisognerà configurare il server per l’invio. Selezionate con il pulsante destro Gestione risorse file server e scegliete Configura opzioni. Impostate le opzioni come findicato nella figura 4.

mailserverfsrm
figura 4

A questo punto bisognerà scegliere le cartelle da monitorare sul server, soprattutto quelle condivise o quelle delle applicazioni LOB.
Selezionare Gestione Screening dei file ->Screening dei file e con il pulsante destro scegliere Crea screening dei file.
Selezionare le opzioni come indicato nella figura 5.

Crea screening dei file
figura 5

La soluzione non è definitiva, nel senso che bisogna modificare le policy ogniqualvolta nasce un nuovo ransomware che crea una nuova estensione, però l’aggiunta delle nuove estensioni è un processo semplice e rapido.
Vi invitiamo a segnalarci le estensioni che riscontrate ed a condividerle con i nostri seguaci.

Verificare velocemente la versione del .Net framework installata

Find username Avete urgenza di sapere quale versione di .Net Framework è installata sul vostro PC/Server?

Basta Powershell!

Ecco come fare:

Lanciate Powershell quindi digitate il seguente comando:

get-ChildItem "HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP"

Otterete un risultato simile a questo da cui evincere la versione installata:

Hive: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP


Name              Property
----              --------
CDF
v2.0.50727        Version   : 2.0.50727.4927
                  CBS       : 1
                  Increment : 4927
                  Install   : 1
                  SP        : 2
                  OCM       : 1
v3.0              Version   : 3.0.30729.4926
                  CBS       : 1
                  Increment : 4926
                  Install   : 1
                  SP        : 2
v3.5              Version     : 3.5.30729.4926
                  CBS         : 1
                  Install     : 1
                  InstallPath : C:\Windows\Microsoft.NET\Framework64\v3.5\
                  SP          : 1
v4
v4.0              (default) : deprecated

Qualora voleste un maggior dettaglio, ad esempio della versione 4:

get-ChildItem "HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP"|Where-Object {$_.Name -like "*4*"} | Get-ChildItem -Recurse

Oppure potreste usare il seguente comando:

Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse | Get-ItemProperty -Name Version, Release -ErrorAction 0 | where { $_.PSChildName -match '^(?!S)\p{L}'} | select PSChildName, Version, Release | ft -autosize

ed ottenere:

PSChildName                      Version        Release
-----------                      -------        -------
v2.0.50727                       2.0.50727.4927
v3.0                             3.0.30729.4926
Windows Communication Foundation 3.0.4506.4926
Windows Presentation Foundation  3.0.6920.4902
v3.5                             3.5.30729.4926
Client                           4.8.03761      528049
Full                             4.8.03761      528049
Client                           4.0.0.0

Soluzione per CryptoLocker e CryptoWall con Trend Micro

Stanchi degli utenti Exchange infettati da ransomware?

Dai un taglio a CryptoLocker e CriptoWall!

 

Se siete tra i fortunati possessori di un antivirus di Trend Micro a protezione del vostro Microsoft Exchange Server (sia esso il prodotto Scan Mail for Microsoft Exchange che Worry Free Business Security Advanced) allora avete la soluzione per bloccare i files con estensione .exe presenti negli allegati con estensione .zip.

Questi ransomware, infatti, infettano il computer del malcapitato crittografando i files più utili (files di Office, jpg, PDF, ecc.) quando si apre un allegato contenente il file eseguibile responsabile dell’infezione.

Il suddetto file è sempre abilmente artefatto nel nome in modo da trarre in inganno l’utente poco esperto; infatti il file viene spesso rinominato con un estensione .pdf.exe cosicché l’utente che non ha le estensioni dei file visibili (configurazione di default sui PC Microsoft) vedrà solo l’estensione .pdf.

Trend Micro permette nel suo programma di scansione delle e-mail di bloccare le estensioni .exe (ma anche le classi Java .class, ed altri files potenzialmente pericolosi), anche se i files sono inseriti in un file compresso con estensione .zip.

Il sistema non è in grado si analizzare però files compressi in altri formati (tipo .rar). Si possono però filtrare tutti gli altri tipi di files compressi consentendo solo l’uso del formato .zip.

Qui di seguito vi mostro la schermata della configurazione nel programma Worry Free Business Security Advanced ed il relativo link al sito di Trend Micro per la spiegazione.

Configurazione blocco allegati
Configurazione blocco allegati

Link al sito di Trend Micro

Io comunque consiglio di abilitare almeno questi:

 Applicazione ed eseguibile
 |
 +---Formato file eseguibili e collegamenti (.elf)
 |
 +---Eseguibile (.exe; .dll; .vxd)
 |
 +---Applet JAVA (.class)
 |
 +---Collegamento Windows NT/95 (.lnk)
 |
 +---Windows Installer Package (.msi)
File compressi
 |
 +---Microsoft Cabinet (.cab)

Come per tutti i miei utenti, consiglio anche a voi di contattare i vostri sistemisti sempre PRIMA di aprire gli allegati dubbi e di configurare i PC per mostrare le estensioni dei files. Per questi malware soluzioni postume al momento non esistono!

P.S.

Se siete stati già infettati spegnete il computer immediatamente. Più tempo resta acceso e più si infetta!

Passare al nuovo Windows 10

windows10logo Siete impazienti di installare il nuovo Windows 10?

Non aspettate che il sistema lo faccia autonomamente…

Ecco come fare:

Aprite il link https://www.microsoft.com/en-us/software-download/windows10

Scegliete la versione di sistema operativo

32o64bit
Nota:
Se avete dubbi sull’architettura del vostro PC aprite il programma msinfo32 e leggete il valore “Tipo sistema”
msinfo32

Una volta terminato il download del MediaCreationTool e lanciato, bisognerà scegliere se aggiornare subito il proprio PC o creare il supporto per un altro PC.
Se scegliete la prima opzione il sistema scarica l’aggiornamento (quasi 4 GB di dati) e provvede in autonomia ad aggiornare a Windows 10 (armatevi di pazienza perché l’operazione è lunga ma non richiede alcun intervento).
Con la seconda opzione sarà invece possibile scaricare il file ISO da cui masterizzare un DVD per l’installazione su un altro PC.
E’ evidente che la prima opzione è quella più semplice perché non prevede nessuna particolare competenza tecnica per l’applicazione.

Buon divertimento

N.B.
Una volta installato Windows 10 sarà comunque possibile ritornare, entro un mese, alla versione precedente di sistema operativo. Basterà andare in Impostazioni->Aggiornamenti e sicurezza-> Ripristino.

Schermata start di Windows 10
Schermata start di Windows 10

Alleggerire le cartelle degli utenti dai files non lavorativi

Find username Spesso capita che utenti di un dominio, soprattutto quelli che hanno il desktop ed i documenti reindirizzati su un server, occupino spazio di storage con files di natura “non lavorativa”.
Si possono però spostare questi dati dalla collocazione originaria sfruttando una famosa utility di Microsoft: Robocopy.Ecco come fare:

Ecco come fare:
Poniamo come esempio la necessità di spostare i files mp3 di Mario Rossi da un server ad un’altra cartella su un altro server. Usando Robocopy con lo switch /MOV si possono spostare i files; lo switch /B, poi, ci consente, usando il Backup User, di accedere ai dati anche se il proprietario è Mario Rossi. Ora vediamo il comando da aggiungere eventualmente ad un logon script cosicché parta automaticamente:

robocopy.exe "\\NOMESERVER\RedirectedFolders\mariorossi" "\\NOMESERVER2\DatiSecondariUtenti\utente1" *.mp3 /B /MOV /TEE /S /R:3 /W:3 /V /NP /FP /NDL /LOG+:%TEMP%\LogRobocopyUserMRossi.txt

Il risultato ottenuto è che tutti i files mp3 presenti nella RedirectedFolders di Mario Rossi (e relative sottocartelle) saranno spostati nell’altro server (le operazioni effettuate saranno loggate nel file %TEMP%\LogRobocopyUserMRossi.txt).

Inventario programmi installati sui PC di un dominio

Find username Vorreste conoscere tutti i programmi installati su ogni PC del vostro dominio ma non sapete fare?

Ecco come realizzare un file txt/csv leggibile da Excel per analizzare i programmi installati.

Ecco come fare:
Create il seguente file con estensione ps1:

$IPconnectedcomputers=Get-WmiObject -class Win32_ServerConnection -computername localhost -namespace root\CIMV2| where-object {$_.computername -like "*.*.*.*"} | 
select-object computername -unique

# o in alternativa se volete controllare solo determinati PC
# $IPconnectedcomputers = @("PC129","PC179","PC120","PC144","PC37","PC182","PC002","PC156","PC20")

$TimestampReport=get-date -Format yyyyMMdd
$ReportSavePath=[environment]::getfolderpath("mydocuments")+"\Report\"+$TimestampReport
new-item $ReportSavePath -type directory -erroraction silentlycontinue

foreach($ip in $IPconnectedcomputers){

if ((test-connection $ip.computername -Count 1 -erroraction silentlycontinue).statuscode -eq 0)
 {
 #$pc=($ip.computername).Insert(0, "\\")
 $pc=[System.Net.Dns]::GetHostEntry($ip.computername).HostName
 write-host Collegamento a $pc
 gwmi win32_product -ComputerName $pc -erroraction silentlycontinue | select-object vendor,caption,version,__SERVER|Export-Csv -NoTypeInformation -force 
"$ReportSavePath\$PC.txt"
 write-host Fine connessione con $pc
 }
else
 {
 write-host Collegamento a $ip IMPOSSIBILE!
 }
}

write-host Elaborazione terminata
write-host premi un tasto per continuare...
read-host

Lanciatelo ed otterete dopo qualche minuto (dipende dal numero dei PC/servers presenti nel dominio) questo risultato:

Report PC da script

 
 
 

 

Saranno elencati tutti i vendors dei programmi ed i relativi programmi e versioni installate.
In un prossimo post spiegherò anche come disinstallare da remoto, con Powershell, i programmi invididuati.

 
N.B.

E’ necessario che gli script Powershell siano resi eseguibili (di default lo sono solo quelli firmati).
Per bypassare il problema e rendere eseguibili anche quelli non firmati lanciate Powershell come amministratore (tenete premuto Ctrl-Shift mentre cliccate sul relativo collegamento) e scrivete:

Set-ExecutionPolicy -ExecutionPolicy bypass

Impostare da remoto IP dinamico sui client di un dominio

Remote enable DHCP client Vorreste impostare da remoto il client DHCP dei PC di un dominio?

Mettetevi sul vostro server e usate questi script!

Spesso mi capitano nuove aziende che adottano sui propri PC gli IP statici, e quindi ho creato questi script per evitare di passare per ogni computer e cambiare la configurazione della scheda di rete.
Ecco come fare…

Nel vostro server create, in una share condivisa raggiungibile da tutti i client di un dominio, il file AbilitaDHCP.vbs.
Lo script sarà eseguito da remoto su ogni PC tramite l’utility PSEXEC (quindi scaricate i e scompattate il file psexec.exe nella cartella c:\windows\system32 del server da cui lancerete gli script).
Ecco lo script VBS da creare e condividere:

strComputer = "."
Set objWMIService = GetObject(_
    "winmgmts:\\" & strComputer & "\root\cimv2")
Set colNetAdapters = objWMIService.ExecQuery _
    ("Select * from Win32_NetworkAdapterConfiguration " _
        & "where IPEnabled=TRUE")
 
For Each objNetAdapter In colNetAdapters
    errEnable = objNetAdapter.EnableDHCP()
    errEnable = objNetAdapter.SetDNSServerSearchOrder()
Next

Ora create lo script DHCP-DNS-auto-da-remoto.ps1 come di seguito indicato. Quando lo lancerete vi sarà chiesto di inserire il nome del PC;
lo script quindi verificherà su tutte le schede di rete abilitate del PC se il client DHCP è già attivo e poi chiederà se volete abilitarlo.

$PC = read-host "Inserire il nome del PC da controllare"
$test=Get-WmiObject win32_networkadapterconfiguration -computername $PC -erroraction silentlycontinue | where {($_.IPenabled)}
if ($test) {
	$test|ft ipaddress, dhcpenabled, dhcpserver ,DNSServerSearchOrder -AutoSize
	if ($test.dhcpenabled) {
		write-host "L'host"$PC "ha gia' il DHCP attivo"
	} 
	else {
		$Risposta = read-host "Vuoi abilitare DHCP/DNS automatici su"$PC"? (S/N)"
		if ($Risposta -eq "S") {
			psexec -accepteula \\$PC cscript /B /NoLogo \\server\condivisione\AbilitaDHCP.vbs
			psexec -accepteula \\$PC ipconfig /all
			read-host 
			}
	}
}
else {
	write-host Host $PC non raggiungibile
}

Loggare tutti gli accessi ad un dominio e reperire le informazioni del PC


Trace
Vorreste conoscere indirizzo IP, MAC, nome computer e sistema operativo di ogni PC nella rete?

Con lo script giusto eseguito durante il logon possiamo recuperare tutto ciò che ci serve!

Anzitutto bisognerà creare una nuova cartella in c:\windows\logs chiamata LogonLogs

Mkdir %WINDIR%\logs\LogonLogs

Create un file TraceLogon.bat in una cartella condivisa raggiungibile da qualsiasi PC nel dominio quindi modificate il file dello script di logon (dovrebbe essere nella cartella \\nomedominio\netlogon) ed aggiungete una riga che punti al file .bat.
Il file Tracelogon.bat conterrà i seguenti comandi:

@echo off
set GIORNOMESE=%date:~0,2%
SET FileDiLog=\\server\condivisione\\Logon-giorno%GIORNOMESE%.Log
set TAB=	
echo. >>%FileDiLog%

REM ========= VERIFICA TIPO OS ===============
FOR /F "TOKENS=1 DELIMS=." %%O IN ('wmic path Win32_OperatingSystem get version ^| FIND /i "."') DO SET TipoOS=%%O
FOR /F "TOKENS=1 DELIMS=" %%P IN ('wmic path Win32_OperatingSystem get caption ^| FIND /i "Windows"') DO SET DescrizioneOS=%%P

echo ================================= 
echo ================================= >>%FileDiLog%


REM ========= DATA ORA ===============
for /f "tokens=1-4 delims=/ " %%a in ('date /T') do set day=%%a
for /f "tokens=2 delims=/ " %%b in ('date /T') do set month=%%b
for /f "tokens=3 delims=/ " %%c in ('date /T') do set year=%%c
set TODAY=%day%-%month%-%year%
for /f "tokens=1 delims=: " %%h in ('time /T') do set hour=%%h
for /f "tokens=2 delims=: " %%m in ('time /T') do set minutes=%%m
set NOW=%hour% %minutes%
echo Ora%TAB%%TODAY% %NOW% 
echo Ora%TAB%%TODAY% %NOW%>>%FileDiLog%


REM ========= UTENTE, NOME COMPUTER ===============
echo Utente%TAB%%USERNAME%
echo Utente%TAB%%USERNAME%>>%FileDiLog%
echo PC%TAB%%COMPUTERNAME%
echo PC%TAB%%COMPUTERNAME%>>%FileDiLog%
echo OS%TAB%%DescrizioneOS%
echo OS%TAB%%DescrizioneOS% >>%FileDiLog%

REM ========= INDIRIZZO IP ===============
SET IPADDR=
SET OLDIPADDR=
setlocal ENABLEDELAYEDEXPANSION
if [%TipoOS%]==[5] (set COMANDONETSH1=netsh interface ip show address) ELSE (set COMANDONETSH1=netsh interface ipv4 show addresses) 
FOR /F "TOKENS=2* DELIMS= " %%A IN ('%COMANDONETSH1% ^| FIND /i "IP"') DO call :AggiungiIPADDR %%B
echo IP%TAB%%IPADDR%>>%FileDiLog%
endlocal
goto fine-ipaddr
:AggiungiIPADDR
set IP=%1
echo IP%TAB%!IP!
SET IPADDR=!IPADDR!!IP!%TAB%
goto :eof
:fine-ipaddr



REM ========= INDIRIZZI MAC ===============
setlocal ENABLEDELAYEDEXPANSION
FOR /F "TOKENS=1,2 DELIMS=:" %%A IN ('ipconfig /all ^| FIND /i "fisico"') DO call :AggiungiMAC "%%A" "%%B"
echo MAC%TAB%%ListaMAC%>>%FileDiLog%
endlocal
goto fine-MAC
:AggiungiMAC
if %2=="" (
set MAC=%1
set MAC=!MAC: =!
set MAC=!MAC:"=!
echo MAC%TAB%!MAC!
SET ListaMAC=!ListaMAC!!MAC!%TAB%
set MAC=
) else (
set MAC=%2
set MAC=!MAC: =!
set MAC=!MAC:"=!
echo MAC%TAB%!MAC!
SET ListaMAC=!ListaMAC!!MAC!%TAB%
set MAC=
)
goto :eof
:fine-MAC


REM ========= INDIRIZZO DNS ===============
SET IPADDR=
SET OLDIPADDR=
if [%TipoOS%]==[5] (set COMANDONETSH2=netsh interface ip show dns) ELSE (set COMANDONETSH2=netsh interface ipv4 show dnsserver) 
setlocal ENABLEDELAYEDEXPANSION
FOR /F "TOKENS=1,2 DELIMS=:" %%A IN ('%COMANDONETSH2% ^| FIND /i "."') DO call :AggiungiDNS "%%A" "%%B"
echo DNS%TAB%%ListaDNS%>>%FileDiLog%
endlocal
goto fine-DNS
:AggiungiDNS
if %2=="" (
set DNS=%1
set DNS=!DNS: =!
set DNS=!DNS:"=!
echo DNS%TAB%!DNS!
SET ListaDNS=!ListaDNS!!DNS!%TAB%
set DNS=
) else (
set DNS=%2
set DNS=!DNS: =!
set DNS=!DNS:"=!
echo DNS%TAB%!DNS!
SET ListaDNS=!ListaDNS!!DNS!%TAB%
set DNS=
)
goto :eof
:fine-DNS

Ecco un esempio delle informazioni che il batch recupera:

================================= 
Ora	19-03-2015 03 26
Utente	Pippo
PC	PC-20
OS	Microsoft Windows 7 Professional   
IP	192.168.143.48 	127.0.0.1	
MAC	C8-9C-DC-D0-6E-38	
DNS	192.168.143.9	192.168.143.10	

Create poi un file c:\Windows\System32\SpostaLogonLog.bat con il seguente contenuto:

@echo off
set CARTELLAORIGINE=c:\cartellacondivisa
set GIORNOMESE=%date:~0,2%
move /y %CARTELLAORIGINE%\Logon-Giorno*.log %WINDIR%\logs\LogonLogs
echo LOG DEGLI ACCESSI GIORNO %giornomese% > %CARTELLAORIGINE%\Logon-Giorno%giornomese%.log

Pianificate l’avvio del file SpostaLogonLog.bat (come amministratore) alle 0:00 ogni giorno.

Quindi potrete vedere nella cartella %WINDIR%\logs\LogonLogs tutti i files di log dell’ultimo mese.

Cambiare i permessi ai files con Powershell

Find username

Vorreste cambiare i permessi di una serie di files usando Powershell ma non sapete come fare?

Ecco la funzione per voi!

Mi è capitato che un virus cambiasse tutti i permessi dei files EXE nella cartella di Windows, con le conseguenze che potete immaginare.
Quindi ho creato questa funzione per Powershell che modifica i premessi di un file.

La sintassi è questa:

ImpostaAutorizzazioni -Percorso "percorso_del_file" -IdentitaDaAutorizzare "Utente_o_gruppo" -TipoAutorizzazione "Tipo_di_permesso"


Dove il tipo di permesso può essere: FullControl, ReadAndExecute, Read.

Ecco come realizzare la funzione in Powershell:

function ImpostaAutorizzazioni()
{
Param(
   [Parameter(Mandatory=$True,Position=1)]
   [string]$Percorso,
	
   [Parameter(Mandatory=$True,Position=2)]
   [string]$IdentitaDaAutorizzare,

   [Parameter(Mandatory=$True,Position=3)]
   [ValidateSet("FullControl", "ReadAndExecute", "Read")]
   [string]$TipoAutorizzazione

)


    $Acl = (Get-Item $Percorso).GetAccessControl('Access')
    Write-Host "Percorso:" $Percorso "Utente da autorizzare:" $IdentitaDaAutorizzare "Tipo autorizzazione:" $TipoAutorizzazione
    $RegolaAccesso = New-Object system.security.accesscontrol.filesystemaccessrule(
         $IdentitaDaAutorizzare,$TipoAutorizzazione,"Allow"
    )
    $Acl.SetAccessRule($RegolaAccesso)
    Write-Host $Acl
    $Acl | Set-Acl $Percorso
}

Esempi:
Per permettere all’utente TrustedInstaller il controllo completo del file attrib.exe:

ImpostaAutorizzazioni "C:\Windows\System32\attrib.exe" "NT SERVICE\TrustedInstaller" "FullControl"

Per permettere al gruppo di utenti NOMEDOMINIO\Domain Admins il permesso di lettura/scrittura del file attrib.exe:

ImpostaAutorizzazioni "C:\Windows\System32\attrib.exe" "NOMEDOMINIO\Domain Admins" "ReadAndExecute"

Per cambiare il permesso a tutti i files exe presenti nella cartella c:\programmi\adobe e relative sottocartelle ed assegnare a Everyone il controllo di sola lettura:

get-childitem "c:\programmi\adobe" -recurse -include *.exe | % {ImpostaAutorizzazioni $_.fullname "Everyone" "Read"}


P.S.

Per cambiare i permessi potrebbe essere necessario anche assumere la proprietà (ownership) del file.
In questo caso basterà usare il comando takeown /f nomefile

Spegnimento/riavvio programmato di un server VmWare ESX

EsxShutdown Dovete fare uno spegnimento o un riavvio una tantum di un server ESXi ma non avete altri server/client da cui lanciare questa operazione?

Fatelo fare al vostro server ESXi!

Ecco come fare:

SSH

Innanzitutto bisognerà abilitare (anche temporaneamente) il server SSH: quindi aprire lo vSphere Client, selezionare il server, ed aprire il tab Configuration; cliccare su Security profiles quindi selezionare le proprietà della sezione Services; scegliere la voce SSH ed avviare il servizio (scegliere anche Start and Stop with host se si intende farlo partire sempre automaticamente). Dalla sezione Firewall assicurarsi che SSH server sia spuntato per consentire le connessioni remote.
La stessa operazione (abilitazione dell’SSH) può essere svolta dalla console fisica dell’hypervisor.

Client SSH

Se non avete un client SSH vi consiglio di scaricare l’ottimo Putty. Lo trovate a questo link (qui il link per il download dell’eseguibile)

Connessione remota e schedulazione

Una volta lanciato il client SSH ci si potrà connettere al server ESX (usando le stesse credenziali dello vSphere client). Ottenuto l’accesso ecco i comandi da lanciare:
N.B.: attenzione che l’orario è in UTC quindi bisognerà sottrarre 1 ora.
Esempio per le ore 13:15 la riga deve cominciare con 15 12 *… dove 15 è il minuto e 12 l’ora

/bin/echo "15   12   *   *   *    /sbin/shutdown.sh && /sbin/poweroff" >> /var/spool/cron/crontabs/root
PIDprima=$(cat /var/run/crond.pid)
/bin/kill $(cat /var/run/crond.pid)
/usr/lib/vmware/busybox/bin/busybox crond 
PIDdopo=$(cat /var/run/crond.pid)
echo
echo Modificato e riavviato crond: il PID passa da $PIDprima a $PIDdopo

Quindi con queste operazioni abbiamo aggiunto una riga al crontab, lo schedulatore del sistema operativo di ESXi, in modo che alle 13:15 compia l’operazione richiesta (/sbin/shutdown.sh && /sbin/poweroff).
Poi abbiamo interrotto lo schedulatore killando il relativo processo (/bin/kill $(cat /var/run/crond.pid)).
Abbiamo poi riavviato lo schedulatore con le nuove impostazioni (/usr/lib/vmware/busybox/bin/busybox crond)
Le altre righe sono puramente informative.

ATTENZIONE:
Ricordarsi di impostare lo ShutDownGuest per ogni macchina virtuale. Questo fara sì che allo spegnimento dell’hypervisor ad ogni VM sarà imposto lo spegnimento dal proprio sistema operativo.
E’ indispensabile che i VMware Tools siano installati su tutte le VM!
ShutDownGuest

Lanciare un comando da remoto su ogni PC acceso in un dominio

remote command

Volete lanciare un comando remoto su ogni PC collegato al dominio mentre gli utenti sono connessi? Ad esempio volete inviare un messaggio alla console di ognuno o aggiornare le policies?

Powershell ci da una mano.

Ecco come fare:
Anzitutto è necessario scaricare dal sito di Microsoft il tool PSEXEC presente all’interno dei PsTools.
PsExec consente di lanciare un comando su un PC connesso alla rete senza che l’utente connesso alla console se ne renda conto. Una funzionalità veramente eccezionale di cui non possiamo che ringraziare il grande Mark Russinovich.
Dopo aver scaricato i PsTools vi consiglio di copiare il file psexec.exe nella cartella %windir%\system32.
Una volta che avremo a disposizione questo tool bisognerà capire quali PC sono collegati al nostro server; per questo useremo il comando net session.
Questo comando restituisce l’indirizzo IP di ogni PC connesso al nostro server. Il risultato del comando si presenta così:

C:\Users\Administrator>net session

Computer            Nome utente   Tipo client  In pausa da
------------------------------------------------------------------
\\192.168.143.35    utente1                    1 00.08.45
\\192.168.143.41    utente23                   4 00.01.22
\\192.168.143.42    utente12                   3 00.01.54
\\192.168.143.43    utente16                   6 01.46.35
\\192.168.143.44    utente43                   3 00.00.01
\\192.168.143.46    utente3                   63 00.00.03

Questo ci servirà a comprendere bene il comando che utilizzeremo in Powershell.
Esso infatti acquisisce tutti gli IP dal comando net session e li riutilizza per lanciare un comando dal prompt dei comandi in remoto.
Ecco il piccolo script da lanciare in powershell:

net session | ?{$_ -match '^\\\\\S*' }|% {$_.split(' ')[0]}| ForEach-Object -Process {psexec $_ cmd /c COMANDO}

Di seguito alcuni esempi pratici:

Aggiornare le group policies su tutti i PC:

net session | ?{$_ -match '^\\\\\S*' }|% {$_.split(' ')[0]}| ForEach-Object -Process {psexec $_ cmd /c echo n ^|gpupdate /force}

Inviare un messaggio alla console di tutti i PC connessi:

net session | ?{$_ -match '^\\\\\S*' }|% {$_.split(' ')[0]}| ForEach-Object -Process {psexec $_ cmd /c msg * Riavviare i PC}

Creare una determinata cartella in ogni PC connesso:

net session | ?{$_ -match '^\\\\\S*' }|% {$_.split(' ')[0]}| ForEach-Object -Process {psexec $_ cmd /c mkdir c:\PIPPO}

Script per aggiungere automaticamente una firma ad Outlook su Exchange 2010/2013

Find username

Vorreste creare una firma in Outlook automaticamente acquisendo le informazioni da Active directory?

Si può fare!


Normalmente in Active directory vengono salvate poche informazioni come nome e cognome, ma è possibile salvare molte più informazioni che possono essere utilizzate per creare automaticamente una firma completa senza che l’utente debba inserire alcuna informazione.
Grazie ad uno script vbs si potrà così creare un oggetto ADSystemInfo che raccoglie tutte le informazioni presenti in Active Directory e mostrarle nella firma. Nella figura qui di seguito potrete notare che è possibile estrarre qualsiasi attributo presente nell’utente da includere nella firma.

ADattributes

Nella seguente immagine troverete impostati i principali attributi utili nell’utilizzo della firma:

UserAD

Ecco un esempio già pronto ed il relativo codice:
Signature

On Error Resume Next 
Set objSysInfo = CreateObject("ADSystemInfo") 
strUser = objSysInfo.UserName 
Set objUser = GetObject("LDAP://" & strUser) 
strName = objUser.FullName 

strNome = objUser.Description 
strUfficio = objUser.physicalDeliveryOfficeName
strReparto = objUser.Department
strTitolo = objUser.Title
strSocieta = objUser.company 
strVia = objUser.streetAddress 
strLocalita = objUser.l
strTelefonoFisso = objUser.telephoneNumber 
strFax = objUser.FacsimileTelephoneNumber
strCellulare = objUser.Mobile
strProvincia = objUser.st
strEmail = objUser.mail

Set objWord = CreateObject("Word.Application") 
Set objDoc = objWord.Documents.Add() 
Set objSelection = objWord.Selection 
Set objEmailOptions = objWord.EmailOptions 
Set objSignatureObject = objEmailOptions.EmailSignature 
Set objSignatureEntries = objSignatureObject.EmailSignatureEntries 
Set objShape = objSelection.InLineShapes.AddPicture("\\NOMESERVER\CONDIVISIONE\logofirma.jpg") 

objSelection.TypeParagraph()
'objSelection.TypeText chr(11)
objSelection.Font.Size = "8" 
objSelection.Font.Name = "Verdana" 
objSelection.Font.Bold = true 
objSelection.TypeText strNome   
if not strTitolo="" then 
	objSelection.Font.Size = "6"  
	objSelection.Font.Bold = false 
	objSelection.Font.Italic = true 
	objSelection.TypeText Chr(11) & strTitolo 
end if
if not strUfficio="" then 
	objSelection.Font.Size = "6"  
	objSelection.Font.Bold = false 
	objSelection.Font.Italic = false 
	objSelection.TypeText Chr(11) & strUfficio 
end if
if not strReparto="" then 
	objSelection.Font.Size = "6"  
	objSelection.Font.Bold = false 
	objSelection.Font.Italic = false 
	objSelection.TypeText Chr(11) & strReparto 
end if 

objSelection.TypeParagraph() 


'objSelection.Style = "No Spacing" 
objSelection.Font.Italic = true 
objSelection.Font.Color = RGB(45,129,81)
objSelection.Font.Size = "8"   
objSelection.Font.Name = "Verdana" 
objSelection.Font.Bold = true 
objSelection.TypeText "NOMEAZIENDA" & Chr(11) 
objSelection.Font.Size = "6"  
objSelection.TypeText "INDIRIZZO" & Chr(11)
objSelection.TypeText "CAP LOCALITA (PROV)" & Chr(11)
objSelection.TypeText "Telefono: NUMERODITELEFONO" & Chr(11)
objSelection.TypeText "Fax: NUMERODIFAX"
if not strCellulare="" then objSelection.TypeText Chr(11) & "Mobile: " & strCellulare
objSelection.TypeText Chr(11) & "E-mail: " & strEmail 
objSelection.TypeParagraph() 

Set objSelection = objDoc.Range() 

objSignature = objSignatureEntries.Add("Firma con logo", objSelection) 
objSignatureObject.NewMessageSignature = "Firma con logo" 
objSignatureObject.ReplyMessageSignature = "Firma con logo" 
objDoc.Saved = True 
objWord.Quit 

Backup completo di Windows 8 con creazione di un’immagine

Windows 8 Backup Volete fare un backup completo con Windows 8?

Eravate abituati alla creazione di un’immagine di backup di Windows 7 ed ora non esiste più la funzione?

Ecco come fare:

Con l’introduzione di Windows 8 è stata aggiunta una nuova funzionalità per il backup dei propri files: la c.d. Cronologia file.
Con questa funzionalità è possibile creare su un’unità di backup, sia esso un disco USB o un’apparecchio di rete, un salvataggio dei propri files con cadenza oraria. Questa opzione è molto utile e ben funzionante ma si rivela inutile ai fini di un ripristino completo di un PC.
Infatti se il sistema diventa instabile o comunque non riesce a partire obbliga l’utente alla reinstallazione del sistema operativo e poi al ripristino dei files salvati.
Come ovviare a questa cosa?
Semplice. La funzionalità di backup completo con creazione di un’immagine completa del disco esiste ancora e può essere lanciata da linea di comando. Una volta avviata sarà possibile scegliere la destinazione di backup: su un disco rigido (USB, pendrive, ecc.), su DVD o su un’unità di rete.

N.B. lanciare il comando da un prompt dei comandi come amministratore (premere con il pulsante destro sull’icona del prompt dei comandi e scegliere “Esegui come amministratore”):

C:\WINDOWS\system32>sdclt.exe

Otterrete questa schermata e potrete effettuare il vostro backup:

Windows 8 backup

Creare icone personalizzate sul desktop con uno script di logon


Find username

Vi piacerebbe far apparire le icone che volete sul desktop dei vostri client automaticamente?
Potete usare uno script di logon per automatizzare il processo.

Ecco il procedimento:

Bisognerà aggiungere una linea al vostro script di logon per lanciare un file .vbs
Questa la sintassi della riga da aggiungere:

%windir%\system32\cscript.exe \\NOMESERVER\NOMECONDIVISIONE\nomefilediscript.vbs

Poi provvediamo a creare il file di script vbs:

PER CREARE UN’ICONA CHE PUNTA AD UNA CARTELLA/FILE:

dim WshShell
dim oMyShortcut
dim strDesktop
set WshShell = CreateObject("Wscript.shell")
strDesktop = WshShell.SpecialFolders("Desktop")
set oMyShortcut = WshShell.CreateShortcut(strDesktop +"\società.lnk")
oMyShortcut.IconLocation ="%LOGONSERVER%\script\società.ico"
OMyShortcut.TargetPath ="%LOGONSERVER%\Società"
oMyShortCut.Hotkey ="ALT+CTRL+S"
oMyShortCut.Save

SE CI SONO ARGOMENTI DA LANCIARE:

dim WshShell
dim oMyShortcut
dim strDesktop
set WshShell = CreateObject("WScript.Shell")
strDesktop = WshShell.SpecialFolders("Desktop")
set oMyShortCut= WshShell.CreateShortcut(strDesktop+"\Trova contatti.lnk")
oMyShortCut.WindowStyle = 3 ''2=Minimized 3=Maximized 1=Normal 
oMyShortcut.IconLocation = "C:\Program Files\Windows Mail\wab.exe"
oMyShortCut.TargetPath ="C:\Program Files\Windows Mail\wab.exe"
oMyShortCut.Arguments = " /find"
oMyShortCut.WorkingDirectory ="c:\"
oMyShortCut.Save

PER CREARE COLLEGAMENTI A PAGINE HTML:

dim WshShell
dim oMyShortcut
dim strDesktop
Set WshShell = CreateObject("WScript.Shell")
strDesktop = WshShell.SpecialFolders("Desktop")
Set oUrlLink = WshShell.CreateShortcut(strDesktop+"\Sistemisti Senior Blog.URL")
oUrlLink.TargetPath ="https://sistemistisenior.wordpress.com"
oUrlLink.Save

ESEMPI DI TUTTI I CASI PRECEDENTI:

Dim WshShell
Dim oMyShortcut
Dim strDesktop
Dim netobj
Dim Username
Dim oMyShortcut2
Dim strDesktop2
Dim oMyShortcut3
Dim strDesktop3

Set WshShell = CreateObject("Wscript.shell")
strDesktop = WshShell.SpecialFolders("Desktop")

Set oMyShortcut = WshShell.CreateShortcut(strDesktop + "\Company.lnk")
oMyShortcut.IconLocation = "\\server-01\ClientApps\company.ico"
oMyShortcut.TargetPath = "\\server-01\Company"
oMyShortcut.Hotkey = "ALT+CTRL+S"
oMyShortcut.Save


Set netobj = CreateObject("Wscript.Network")
Username = netobj.Username
Set oMyShortcut2 = WshShell.CreateShortcut(strDesktop + "\" + Username + ".lnk")
oMyShortcut2.TargetPath = "\\server-01\users\" + Username + "\Documenti"
oMyShortcut2.Save

Set oMyShortcut3 = WshShell.CreateShortcut(strDesktop + "\Gestionale.lnk")
oMyShortcut3.IconLocation = "S:\GESTIONALE\GEST.ICO"
oMyShortcut3.TargetPath = "S:\GESTIONALE\GEST.EXE"
oMyShortcut3.Arguments = " /UTENTE VC1"
oMyShortcut3.WorkingDirectory = "S:\GESTIONALE"
oMyShortcut3.Save

Qualora voleste eliminare un link già presente, lo script andrebbe modificato anteponendo le seguenti righe:

IF objFSO.FileExists(strDesktop& "\nomecollegamento.lnk") THEN
	objFSO.DeleteFile(strDesktop& "\nomecollegamento.lnk")
End If