domenica 29 agosto 2021

Backup and clear all event log

PULIZIA E BACKUP DI TUTTI GLI EVENTI DI WINDOWS

Ciao,

stavo cercando uno script per fare il backup e pulire TUTTI gli eventi di Windows. Il problema e' che non ho script gia pronti che facevano esattamente quello che volevo. Cosi facendo un po di ricerche ed un po di copia incolla ho preparato uno script che copia e cancella TUTTI i registri degli eventi di Windows. Eccolo qui sotto.

$datetime=((get-date).ToString("yyyyMMdd_HHmmss_"))

Get-winevent  -Listlog  * | select  Logname, Logfilepath | ForEach-Object -Process { 

    $name = $_.Logname

    $safename = $datetime + $_.Logname

    $safename = $safename.Replace("/","-")

    wevtutil.exe EPL $name  D:\BackupEventLogs\$safename.evtx

    wevtutil cl $name

}


Quello che questo script fa e' di fare il backup di tutti gli eventi di Windows nella D:\backupeventlos

Inoltre nel nome del file di backup aggiunge data ed ora.


mercoledì 25 agosto 2021

BITLOCKER

La gestione di BitLocker è più efficiente in situazioni dove è presente il chip TPM (meglio 2.0) sul computer. E’ possibile usarlo anche su macchine che non ne sono dotate, usando una chiavetta di avvio, ad esempio.

Il TPM, semplificando al massimo, è un chip che si occupa della crittografia, e nel quale vengono memorizzate le chiavi crittografiche necessarie per lo sblocco del disco (in realtà è un po’ più complesso, ad esempio può emulare una smart card). Senza la presenza di queste chiavi il disco non verrà sbloccato e non sarà leggibile. In mancanza di TPM è possibile usare una chiavetta di boot che svolga lo stesso compito.

In sintesi, collegare ad un altro PC il disco di una macchina con Bitlocker attivo è inutile a meno di non avere accesso alle chiavi per sbloccarlo.

In aggiunta a quanto sopra è possibile impostare un PIN di avvio (pre-boot Bitlocker PIN), inserendo un “secondo livello di sicurezza”. E’ consigliabile usare il PIN soprattutto sulle macchine utilizzate spesso fuori ufficio.

Un importante aspetto di cui curarsi, con tecnologie di questo tipo, è il recupero dei dati in caso di problemi (ES: pin dimenticato!!!). Quando attivato viene generata una chiave che è possibile stampare, copiare in un file o su una chiavetta USB. Nei PC in dominio, è possibile anche memorizzare questa chiave in Active Directory. Affinché tutto funzioni correttamente è necessario installare Bitlocker ed i tool di gestione sui domain controller. Dopodiché sarà possibile accedere alle informazioni di BitLocker da un tab aggiuntivo sull’account macchina/utente.

Dal mio punto di vista rappresenta la soluzione migliore anche se in presenza di molti oggetti potrebbe appesantire notevolmente le dimensioni e gli eventuali tempi di replica.

Per attivare Bitlocker ho utilizzato le GPO, dove ho specificato l’attivazione, la memorizzazione in AD delle informazioni di sicurezza ed alcuni altri parametri.

Il resto della gestione è possibile svolgerla direttamente da client, oppure da remoto tramite il comando manage-bde.

Ad esempio per attivare il PIN preboot è possibile usare il comando:

Manage-bde -status -computername PIPPO (nome del computer remoto)

Manage-bde -status -computername PIPPO (nome del computer remoto)

GPO

COMPUTER CONFIGURATION

MODELLI AMMINISTRATIVI – COMPONENTI DI WINDOWS – CRITTOGRAFIA UNITA BITLOCKER

Scegli modalità di ripristino delle unita protette con Bitlocker (abilitato)

MODELLI AMMINISTRATIVI – COMPONENTI DI WINDOWS – CRITTOGRAFIA UNITA BITLOCKER – UNITA DEL SISTEMA OPERATIVO

Richiedi autenticazione aggiuntiva all’avvio:

(consenti significa che è possibile abilitare un parametro, richiedi lo rende obbligatorio. Le opzioni non DEVONO andare in contraddizione tra di loro).

Scegli modalità di ripristino delle unità del sistema operativo protette con Bitlocker.

Utile per alcune opzioni tra cui:

-          Consenti agenti recupero dati basati su certificato

-          Salva informazioni di ripristino di BitLocker in Servizi di dominio Active Directory

-          Non abilitare BitLocker finché le informazioni di ripristino non vengono archiviate in Servizi di dominio Active Directory per le unità del sistema operativo

Altre impostazioni interessanti sono l’impostazione del tipo di cifratura, se cifrare tutto il disco o solo lo spazio occupato ecc. ecc.

Dopo aver configurato il tutto, applicare le policy e verificare che dal client tutto sia attivo.

p.s. consiglio di scaricare le versioni piu recenti dei template admx x Windows 10 prima di fare tutto.

Se possibile consiglio di verificare direttamente dal client, ma in alternativa si può fare tutto da remoto. Il comando principale che andremo ad usare è manage-bde. Per la gestione remota tramite questa utility è fondamentale essere amministratori della macchina remota a cui ci vogliamo collegare e che siano attivate le regole di firewall x WMI. Nel caso attivarle (o aggiungere anche queste alla policy).

Supponiamo di utilizzare un computer chiamato CLIENT01

Verifica lo stato di Bitlocker

manage-bde -status -computername “CLIENT01”

Imposta il PIN

manage-bde -protectors -add c: -TPMAndPIN -computername "CLIENT01"

Cambia il PIN

manage-bde -changepin c: -computername "CLIENT01"

Rimuove il PIN

manage-bde -protectors -delete c: -type TPMAndPIN -computername "CLIENT01"

Che io sappia (ma non significa che non sia possibile), l'operazione di "creazione" del pin va fatta a mano direttamente da client oppure da command line. Probabilmente Endpoint manager/Intune/SCCM l'operazione e' possibile. In alternativa e' possibile inserire i comandi in uno script, che magari verifichi lo stato di bitlocker. 

APPENDICE

Usare l'help in manage-bde

Help breve

manage-bde -protectors -delete -?

Help completo

manage-bde -protectors -delete -help

 

Comandi utili

Get-tpm

Manage-bde

Get-BitLockerVolume 

REFERENCE

https://docs.microsoft.com/en-us/windows/security/information-protection/bitlocker/bitlocker-overview

https://www.ictpower.it/sistemi-operativi/gestire-la-crittografia-dei-dischi-con-bitlocker-in-un-ambiente-enterprise.htm

https://www.dell.com/support/kbdoc/it-it/000127780/utilizzo-dell-editor-criteri-di-gruppo-per-abilitare-l-autenticazione-bitlocker-nell-ambiente-di-preavvio-per-windows-7-8-8-1-10

https://oliverkieselbach.com/2019/08/02/how-to-enable-pre-boot-bitlocker-startup-pin-on-windows-with-intune/




venerdì 13 agosto 2021

Rimozione vecchie stampanti

Dopo aver migrato il print server, è necessario cancellare le vecchie stampanti dai client.

E' possibile istruire gli utenti su come farlo, fare il giro di tutti i client, oppure usare uno script.

Io ho scelto di farlo da script, aggiungendo queste righe allo script di logon degli utenti, che poi successivamente commenterò. Una alternativa è quella di creare una GPO che esegua uno script in cui aggiungere le righe sotto.

rundll32 printui.dll,PrintUIEntry /q /dn /n "\\server\printer1"

rundll32 printui.dll,PrintUIEntry /q /dn /n "\\server\printer2"

rundll32 printui.dll,PrintUIEntry /q /dn /n "\\server\printer3"

rundll32 printui.dll,PrintUIEntry /q /dn /n "\\server\printer4"

rundll32 printui.dll,PrintUIEntry /q /dn /n "\\server\printer5"



GPO - Filtri WMI per pc DESKTOP e PORTATILI

 Ciao a tutti,

sto preparando alcune GPO che vorrei applicare solo ai portatili in azienda (e a dir la verità neppure a tutti!!!).

Il mio primo scoglio e' proprio come distinguere un desktop da un portatile.

Per fare questo ho pensato di usare i WMI filtering, tramite cui è possibile recuperare alcune informazioni sul computer

Facendo riferimento a questa pagina:

https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-computersystem

Ho identificato due proprietà che mi possono essere utili:

PCSystemType e PCSystemTypeEx

La seconda e' disponibile solo da Windows 8.1 e Windows 2012 R2 in poi.

Quindi se:

PCSystemType=1 o 3 si tratta di PC Desktop (a dir la verita non so in quale categoria ricadano le workstation mobili!)

PCSystemType=2 si tratta di laptop

Sotto riporto un estratto dal sito su queste 2 proprieta

PCSystemType

Type of the computer in use, such as laptop, desktop, or Tablet.

Unspecified (0)

Desktop (1)

Mobile (2)

Workstation (3)

Enterprise Server (4)

SOHO Server (5) Small Office and Home Office (SOHO) Server

Appliance PC (6)

Performance Server (7)

Maximum (8)


PCSystemTypeEx

Type of the computer in use, such as laptop, desktop, or Tablet.

Windows Server 2012, Windows 8, Windows Server 2008 R2, Windows 7, Windows Server 2008 and Windows Vista not supported.

This property is not supported before Windows 8.1 and Windows Server 2012 R2.

Unspecified (0)

Desktop (1)

Mobile (2)

Workstation (3)

Enterprise Server (4)

SOHO Server (5)

Appliance PC (6)

Performance Server (7)

Slate (8)

Maximum (9)


Adesso devo definire la query per decidere la classe

DESKTOP

Namespace: root\CIMv2

Select * from Win32_ComputerSystem WHERE (PCSystemType = 1) or (PCSystemType = 3)

LAPTOP

Namespace: root\CIMv2

Select * from Win32_ComputerSystem WHERE (PCSystemType = 2)


Adesso devo aprire GPMC ed andare in WMI Filter e scegliere NEW.

Namespace: root\CIMv2

Description: PC DESKTOP

Query: Select * from Win32_ComputerSystem WHERE (PCSystemType = 1) or (PCSystemType = 3)

Fare lo stesso, modificando la query, per i portatili.

Direi che abbiamo finito.

NOTE

Inizialmente avevo pensato di usare questa query: Select * from Win32_Battery WHERE (BatteryStatus <> 0), ma il risultato sarebbe stato che un desktop con attaccato un UPS sarebbe passato per un portatile. :)


APPENDICE

WIN32-SYSTEMENCLOSURE

A dir la verita ci sarebbe anche un'altra proprieta che sarebbe utile allo scopo, ma per semplicita' ho preferito usare quella precedente.

Ad ogni modo va considerata come alternativa.

https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-systemenclosure

ChassisTypes

This value comes from the Type member of the System Enclosure or Chassis structure in the SMBIOS information.

Other (1)

Unknown (2)

Desktop (3)

Low Profile Desktop (4)

Pizza Box (5)

Mini Tower (6)

Tower (7)

Portable (8)

Laptop (9)

Notebook (10)

Hand Held (11)

Docking Station (12)

All in One (13)

Sub Notebook (14)

Space-Saving (15)

Lunch Box (16)

Main System Chassis (17)

Expansion Chassis (18)

SubChassis (19)

Bus Expansion Chassis (20)

Peripheral Chassis (21)

Storage Chassis (22)

Rack Mount Chassis (23)

Sealed-Case PC (24)

Tablet (30)

Convertible (31)

Detachable (32)


QUERY x LAPTOP

Namespace: root\CIMv2

Query:  select * from Win32_SystemEnclosure where ChassisTypes = "{8}" or ChassisTypes = "{9}" or ChassisTypes = "{10}" or ChassisTypes = "{11}" or ChassisTypes = "{12}" or ChassisTypes = "{14}" or ChassisTypes = "{18}" or ChassisTypes = "{21}"


WMI

WMI e' l'acronimo di Windows management instrumentation.

Cosa puo fare?

WMI (Windows Management Instrumentation) è un insieme di interfacce che permettono di interagire con le informazioni di sistema, interrogarle e modificarle.

Nel nostro caso abbiamo bisogno di trovare quella particolare classe che contiene la proprieta che consente di capire se il pc in questione e' un desktop oppure un portatile.

E' possibile interrogare WMI tramite powershell. Un tool grafico che ho utilizzato e' WmiExplorer.

Il problema e' che non sempre le proprieta sono chiare ed occorre fare qualche ricerca per trovare cio di cui abbiamo bisogno


NOTE

wmic, tool di interrogazione WMI e stato rimpiazzato da Get-WmiObject (powershell)

Get-WmiObject e' stato rimpiazzato, dalla versione 3.0 di powershell da Get-CimInstance


ESEMPI POWERSHELL

Get-CimInstance -ClassName Win32_ComputerSystem | Select-Object -Property *

Get-CimInstance -ClassName Win32_ComputerSystem | Select-Object -Property pcsystemtype


REFERENCE

https://www.linkedin.com/pulse/wmi-filtering-gpos-philip-cumiskey

https://social.technet.microsoft.com/Forums/en-US/8f802a56-a66e-495f-9e6f-48bfca341343/gpo-wmi-filter-for-laptops?forum=winserverGP

https://docs.microsoft.com/it-it/windows/win32/cimwin32prov/win32-operatingsystem

https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-systemenclosure

https://docs.microsoft.com/it-it/windows/win32/cimwin32prov/win32-computersystem

https://docs.microsoft.com/en-us/dotnet/api/microsoft.powershell.commands.pcsystemtype?view=powershellsdk-1.1.0

https://docs.microsoft.com/it-it/powershell/scripting/samples/collecting-information-about-computers?view=powershell-7.1

https://powershell.one/wmi/root/cimv2/win32_computersystem

https://docs.microsoft.com/it-it/dotnet/framework/wcf/diagnostics/wmi/

http://www.dotnethell.it/articles/WMI.aspx

https://github.com/vinaypamnani/wmie2/releases


GPO - group policy permission

 Sistemazione permessi GPO

Sto effettuando la migrazione di un dominio da Windows Server 2008R2 a Windows Server 2019. Ho aggiunto quindi il nuovo domain controller 2019 ed effettuato le verifiche del caso.

Tutto funziona correttamente tranne un problema che ho notato dalla console di gestione delle policy. Infatti se la apro (GPMC.MSC), selezione il dominio, e nella destra, tra i tab in alto scelgo STATUS e premo “DETECT NOW”, vengono trovati degli errori si sync.

Solitamente accade per i DC da Windows Server 2012 in poi.

Nel mio caso ha problemi la replica con Windows Server 2019. 

Si tratta di un problema di permessi. Non sono corrette le ACL di una o più policy (nel mio caso quasi tutte).

Ogni ACL (lista dei permessi e’ formata da un insieme di ACE

ACL = Access control list. Elenco dei permessi. Un file dove administrator ed user hanno permessi di lettura rappresenta una ACL

ACE = Access control entry. L’insieme delle ACE crea una ACL. L’utente pippo che può accedere ad un file/oggetto in sola lettura rappresenta un’ACE. 

Ad ogni modo si tratta di un problema noto. Il problema nasce dal fatto che Windows Server 2008R2 e precedenti mettevano più ACE per uno stesso utente (parlando di GPO). Verificando i permessi sulle GPO si nota che DOMAIN ADMINS appare più volte. Questo si può verificare anche per altri utenti (Enterprise admins, SYSTEM ecc. ecc.) 

La parte subdola del problema e’ che questa fatto si evidenzia solo usando ICACLS, tool a riga di comando per la gestione dei permessi. Da GUI sembra tutto normale. 

Prima di fare qualsiasi modifica vi consiglio di fare un backup delle GPO, tramite gpmc.msc.

Selezionare “Group policy objects” – tasto DX e scegliere “Backup ALL” 

Per risolvere occorre togliere le ACE duplicate e forzare una replica. Dopodiché occorre gestire e creare le nuove policy solo da Windows Server 2012 e superiori. 

Per sistemare occorre accedere al server 2008, aprire un command prompt ed andare nel percorso locale delle GPO (ES: C:\Windows\SYSVOL\domain\Policies). 

Utilizzare i seguenti comandi: 

icacls "{GPO UID}"

Fate attenzione e verificate i permessi degli utenti che andrete a toccare. 

icacls "{GPO UID}" /remove:g "<localdomain>\Domain Admins"

icacls "{GPO UID}" /grant "<localdomain>\Domain Admins":(OI)(CI)(F)

repadmin /syncall

repadmin /syncall /AdePq 

ESEMPIO

icacls {F8D0D4C5-EAFB-44C2-8AF5-9A93B1BFB639}

mostra i permessi della GPO 

icacls {F8D0D4C5-EAFB-44C2-8AF5-9A93B1BFB639} /remove:g "<localdomain>\Domain Admins"

toglie tutte le ACE relative a DOMAIN ADMINS

icacls {01C13992-5EC3-4C95-8F85-1D73AEEB657D} /grant "<localdomain>\Domain Admins":(OI)(CI)(F)

aggiunge la ACE relativa a DOMAIN ADMINS, una sola volta! 

p.s. icacls * > c:\temp\GPO_ACL_2008r2.txt crea un file di report di tutti i permessi, utile soprattutto se ci sono molte policy 

Dopodiché posso verificare nuovamente la ACL per vedere che non ci siano entry duplicate per altri utenti.

Come dicevo sopra, mi sono trovato entry duplicate anche per ENTERPRISE ADMINS e SYSTEM.

Alla fine, dopo aver verificato le ACL posso forzare una sincronizzazione usando i seguenti comandi. 

repadmin /syncall

repadmin /syncall /AdePq 

Lasciare passare un pochino da uno all’altro e verificate da GPMC sul nuovo server se il problema si e’ risolto verificando con GPMC dal server dove si e’ verificato l’errore di allineamento. 

Altri comandi utili per verificare lo stato di replica sono:

repadmin /replsummary

repadmin /showrepl 

Ma nel mio caso non hanno mai dato esito negativo nonostante questo problema sulle GPO. 

NOTA

Per creare le nuove policy usando solo il nuovo DC occorre selezionarlo dalla console gpmc.msc.
Aprire la console, selezionare il dominio, tasto dx e dal menu scegliere:
"CAMBIA CONTROLLER DI DOMINIO" 
Da qui procedere alla scelta del controller di dominio da utilizzare.


REFERENCE

https://social.technet.microsoft.com/Forums/ie/en-US/f16b0af1-8772-4f96-a9ac-fac47943e8e9/sysvol-permissions-for-one-or-more-gpo-are-not-in-sync?forum=ws2016

https://social.technet.microsoft.com/Forums/ie/en-US/1a5db5cb-f194-40b5-8545-37ccbac300e1/windows-server-2012-gpos-wont-sync?forum=winserverGP

https://ss64.com/nt/icacls.html

giovedì 5 agosto 2021

Cambio fuso orario

 Ciao,

mi e' capitato di dover cambiare il fuso orario di un server, che continuava a mostrare l'ora degli Stati uniti anziché quella italiana. Nonostante fossi domain admin, non riuscivo a farlo per mancanza di permessi. Per risolvere ho fatto cosi:

C:\Windows\System32

timedate.cpl - runs as administrator.

Risolto :)

REFERENCE

https://4sysops.com/archives/error-changing-time-zone-in-windows-server-2019-use-the-command-line-or-powershell-instead/


Spostamento DHCP

Ciao.

nei giorni scorsi ho dovuto spostare un server DHCP. L'operazione e' stata piuttosto rapida, e mi ha consentito di avere una configurazione identica. Tutti i comandi vanno eseguiti da powershell (admin) del nuovo server. 

Powershell as admin da nuovo server


DHCP su vecchio server attivo

DHCP su vecchio server disattivo

Export-DhcpServer -ComputerName SBS2011 -leases c:\dhcpbackup\vs.xml -verbose


DHCP su vecchio server disattivo

DHCP su vecchio server attivo

Import-DhcpServer -File c:\dhcpbackup\vs.xml -BackupPath c:\dhcpbackup\ -Leases -ScopeOverwrite -Force -ComputerName nuovoserver –Verbose

Riavvio DHCP su nuovo server

deautorizzazione DHCP su vecchio server se tutto OK


REFERENCE

https://community.spiceworks.com/how_to/160139-migrate-dhcp-from-windows-server-2008-to-windows-server-2019

https://social.technet.microsoft.com/Forums/en-US/f4aab17f-d683-4e06-aede-48f3609de238/has-anyone-migrated-dhcp-from-2008r2-to-2019-server?forum=winserveripamdhcpdns

https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/dn338985(v=ws.11)

https://docs.microsoft.com/en-us/answers/questions/121246/change-dhcp-failover-shared-secret-password.html

Verifica scadenza password

 Ciao,

per verificare quando scade la password di un utente in AD e quando e' stata impostata l'ultima volta.

Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} –Properties "DisplayName", passwordlastset, Passwordneverexpires, "msDS-UserPasswordExpiryTimeComputed" | Select-Object -Property "Displayname", passwordlastset, Passwordneverexpires, @{Name="ExpiryDate";Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}

REFERENCE:
https://activedirectorypro.com/how-to-get-ad-users-password-expiration-date/