lunedì 22 marzo 2021

PowerShell: Monitorare un file di testo in tempo reale

Spesso i sistemisti hanno la necessità di monitorare file di log rilevando eventuali modifiche in tempo reale. PowerShell permette di monitorare un file di testo visualizzano in tempo reale le modiche attraverso il cmdlet Get-Content.

Ad esempio
Get-Content C:\temp\log.txt -Wait

Il comando può essere utilizzato in tutte le versioni di PowerShell ma presenta un grosso limite: visualizza l'intero contenuto del file prima di visualizzare le nuove righe aggiunte. A partire dalla versione 3 di PowerShell (Windows 8 e successivi) al cmdlet è stato aggiunto un nuovo argomento -Tail che consente di iniziare a monitorare il file dalla fine e non mostrando prima il suo intero contenuto.

Ad esempio
Get-Content C:\temp\log.txt -Tail 0 -Wait
Il file inizierà ad essere monitorato dalla fine e non verrà mostrato prima il suo contenuto. Al parametro -Tail è possibile passare il numero di linee, alla fine del file, da includere nel monitoraggio e da visualizzare.
PowerShell, Get-Content
FIG 1 - PowerShell, Get-Content
Get-Content C:\temp\log.txt -Tail 3 -Wait
Visualizza le ultime 3 righe del file prima di visualizzare eventuali nuove righe aggiunte.

E' anche possibile filtrare le linee che contengono un testo specifico. Il comando
Get-Content C:\temp\log.txt  -Tail 0 -Wait | where { $_ -match "ERROR" }
visualizzerà solo le linee aggiunte alla fine del file che contengono la stringa ERROR.





martedì 16 marzo 2021

Windows Server 2019: Schedulare la generazione di rapporti di archiviazione

Nell'articolo precedente (Windows Server 2019: Gestione rapporti di archiviazione) abbiamo visto come generare un rapporto di archiviazione relativo ai file duplicati. In un'azienda può essere utile schedulare settimanalmente o mensilmente questo tipo di rapporti in modo da tenere sotto controllo la presenza di file duplicati, la quota di occupazione disco o verificare che tipo di file gli utenti stanno salvando sul file server. Il procedimento è molto simile a quello visto nell'articolo precedente:
  • Da Server Manager cliccare su Strumenti quindi su Gestione risorse file server.
    Sever Manager, Strumenti
    FIG 1 - Sever Manager, Strumenti

  • Cliccare, con il tasto destro del mouse, su Gestione rapporti di archiviazione e selezionare, dal menu contestuale, la voce Pianifica una nuova attività rapporto.
    Gestione risorse file server
    FIG 2- Gestione risorse file server

  • Nella casella Nome rapporto digitare il nome che si intende assegnare al report. In Dati rapporto selezionare i report che si intende generare (in questo esempio sono state selezionate le voci File di grandi dimensioni e File duplicati).
    Proprietà attività rapporto archiviazione
    FIG 3 - Proprietà attività rapporto archiviazione

  • Selezionare, evidenziandola in blu, l'opzione File di grandi dimensioni e cliccare sul pulsante Modifica parametri.
    Proprietà attività rapporto archiviazione, File di grandi dimensioni
    FIG 4 - Proprietà attività rapporto archiviazione, File di grandi dimensioni

  • Specificare la dimensione minima superata la quale il file viene considerato di grandi dimensioni (in questo caso è stata specificata la dimensione minima di 50 MB) e cliccare su OK.
    Proprietà rapporto
    FIG 5 - Proprietà rapporto

  • Cliccare sulla scheda Ambito e quindi sul pulsante Aggiungi.
    Proprietà attività rapporto archiviazione. Ambito
    FIG 5 - Proprietà attività rapporto archiviazione, Ambito

  • Selezionare la cartella o il disco che si intende verificare (in questo caso la cartella C:\Dati Personali) e cliccare su OK.
    File Duplicati, cartella
    FIG 6 - File Duplicati, cartella

  • Selezionare la scheda Pianificazione. In tale scheda possiamo pianificare la generazione dei report settimanalmente o mensilmente. Lasciare selezionate l'opzione Ogni settimana, selezionare il giorno (ad es. sabato) e inserire l'ora. Terminate le impostazioni cliccare su OK.
    Pianificazione generazione rapporto
    FIG 7 - Pianificazione generazione rapporto

  • Come visibile in FIG 8, la generazione dei report è stata pianificata.
    Elenco report pianificati
    FIG 8 - Elenco report pianificati

  • Per generare subito i rapporti senza attendere la pianificazione basta cliccarci su con il tasto destro del mouse e selezionare Esegui attività rapporto.
    Esegui attività rapporto
    FIG 9 - Esegui attività rapporto

  • Nella finestra successiva possiamo decidere se attendere che il report venga generato e visualizzato oppure generare il report in background. Lasciare selezionata l'opzione Attendi che i rapporti vengano generati, quindi visualizzati e cliccare su OK.
    Genera rapporti archiviazioni
    FIG 10 - Genera rapporti archiviazioni

  • Dopo qualche secondo verranno generati i report sotto forma di documenti HTML che è possibile consultare con il proprio browser.
    Report generati
    FIG 11 - Report generati









sabato 6 marzo 2021

Windows Server 2019: Gestione rapporti di archiviazione

Il tool per la gestione rapporti di archiviazione può essere utile per individuare file duplicati o di grandi dimensioni sul Server file permettendo di valutarne una migliore organizzazione e salvaguardare lo spazio su disco. 

  • Da Server Manager cliccare su Strumenti quindi su Gestione risorse file server.
    Sever Manager, Strumenti
    FIG 1 - Sever Manager, Strumenti

  • Cliccare, con il tasto destro del mouse, su Gestione rapporti di archiviazione e selezionare, dal menu contestuale, la voce Genera rapporti.
    Gestione rapporti di archiviazione
    FIG 2 - Gestione rapporti di archiviazione

  • In Selezionare i rapporti da generare selezionare la casella File duplicati. In fondo è possibile selezionare anche il formato del rapporto: in questo caso lasciare selezionata l'opzione proposta di default (DHTML).
    Proprietà attività rapporto archiviazione
    FIG 3 - Proprietà attività rapporto archiviazione

  • Per specificare la cartella o il disco su cui agire cliccare sulla scheda Ambito e quindi sul pulsante Aggiungi.
    Proprietà attività rapporto archiviazione. Ambito
    FIG 4 - Proprietà attività rapporto archiviazione, Ambito

  • Selezionare la cartella o il disco che si intende verificare (in questo caso la cartella C:\Dati Personali) e cliccare su OK.
    File Duplicati, cartella
    FIG 5 - File Duplicati, cartella

  • Ritornando alla finestra Proprietà attività rapporto archiviazione cliccare su OK.
    Proprietà attività rapporto archiviazione
    FIG 6 - Proprietà attività rapporto archiviazione

  • Nella finestra successiva possiamo decidere se attendere che il report venga generato e visualizzato oppure generare il report in background. Lasciare selezionata l'opzione Attendi che i rapporti vengano generati, quindi visualizzati e cliccare su OK.
    Genera rapporti archiviazioni
    FIG 7 - Genera rapporti archiviazioni

  • Dopo qualche secondo viene generato il report sotto forma di documento HTML. Aprire il documento tramite il browser.
    Report in formato HTML
    FIG 8 - Report in formato HTML
  • Il report ci indica i file duplicati trovati e altre informazioni come la loro dimensione, le cartelle in cui risiedono, le abilitazioni, ecc.
    Rapporto file duplicati
    FIG 9 - Rapporto file duplicati




sabato 27 febbraio 2021

PowerShell: Rimuovere un membro da un gruppo Active Directory

Il cmdlet per rimuovere un membro da un gruppo Active Directory è Remove-ADGroupMember.

Sintassi

Remove-ADGroupMember
      [-WhatIf]
      [-Confirm]
      [-AuthType <ADAuthType>]
      [-Credential <PSCredential>]
      [-Identity] <ADGroup>
      [-Members] <ADPrincipal[]>
      [-Partition <String>]
      [-PassThru]
      [-Server <String>]
      [-DisablePermissiveModify]
      [<CommonParameters>]

Parametri

-AuthType 
Specifica il metodo di autenticazione. I valori accettati dal parametro sono:
  • Negotiate oppure 0 (default)
  • Basic oppure 1
-Confirm
Se specificato, tale parametro mostra la richiesta di conferma prima di eseguire il cmdlet.

-Credential
Specifica le credenziali dell'account utente con cui eseguire il comando. Se omesso viene considerato l'utente corrente che sta eseguendo il comando. Al parametro può essere passato il nome dell'account, come ad es. "utente01" o "Dominio\utente01" oppure può essere passato un'oggetto PSCredential generato dal cmdlet Get-Credential. Se viene specificato un'account utente verrà richiesto di inserire la password all'esecuzione del comando.

-DisablePermissiveModify
Gli aggiornamenti dei membri del gruppo utilizzano una modifica permissiva per impostazione predefinita e il messaggio di errore quando si tenta di rimuovere un account non presente viene soppresso. Specificando tale parametro il messaggio di errore verrà visualizzato.

-Identity
Tale parametro specifica l'oggetto gruppo Active Directory su cui si desidera intervenire. Al parametro può essere passato un qualsiasi valore che identifica il gruppo in maniera univoca come:
Distinguished name
GUID (objectGUID)
Security identifier (objectSid)
Security Account Manager account name (sAMAccountName) 

-Members
Permette di specificare un array di utenti, gruppi e computer separati da virgola da rimuovere dal gruppo. Il parametro accetta come valori:
Distinguished name
GUID (objectGUID)
Security identifier (objectSid)
SAM account name (sAMAccountName)

-Partition
A tale parametro va passato il Distinguished Name (DN) di una partizione di Active Directory. Il cmdlet utilizzerà tale partizione per ricercare l'oggetto specificato dal parametro Identity.

-PassThru
Restituisce un oggetto che rappresenta l'item su cui si sta lavorando. Per impostazione predefinita, il cmdlet non genera alcun output.

-Server
Permette di specificare l'istanza di Active Directory Domain Services a cui connettersi per eseguire l'operazione.

-WhatIf
Mostra cosa accadrebbe se venisse eseguito il cmdlet. Il cmdlet non viene eseguito.


Rimuovere un membro da un gruppo Active Directory
Per rimuovere un membro da un gruppo Active Directory il comando sarà analogo al seguente
Remove-ADGroupMember -Identity Gruppo1 -Members Giovanni.Lubrano
dove con il parametro -Indentity si va ad indicare il gruppo sul quale agire e con -Members indichiamo l'account o più account separati da virgola da rimuovere.
PowerShell, Remove-AdGroupMember
FIG 1 - PowerShell, Remove-AdGroupMember

E' possibile creare un file CSV contenente l'elenco di tutti gli account da rimuovere dal gruppo Active Directory come quello in FIG 2.
File CSV con l'elenco degli account
FIG 2 - File CSV con l'elenco degli account

Il comando da eseguire per rimuovere dal gruppo specificato (Gruppo1) l'elenco degli account presenti nel file CSV (FileUtenti.csv) sarà simile a
Import-CSV C:\FileUtenti.csv -Header utenti | ForEach-Object {Remove-AdGroupMember -Identity "Gruppo1" -members $_.utenti}

Per rimuovere un account da tutti i gruppi Active Directory si può utilizzare il comando
Get-ADUser -Identity Giovanni.Lubrano -Properties MemberOf | ForEach-Object {$_.MemberOf | Remove-ADGroupMember -Members $_.DistinguishedName -Confirm:$false}





martedì 23 febbraio 2021

PowerShell: Aggiungere membri in un gruppo Active Directory

Per aggiungere account utente e computer ad un gruppo Active Directory viene utilizzato il cmdlet Add-AdGroupMember.

Sintassi

Add-ADGroupMember
   [-WhatIf]
   [-Confirm]
   [-AuthType <ADAuthType>]
   [-Credential <PSCredential>]
   [-Identity] <ADGroup>
   [-Members] <ADPrincipal[]>
   [-MemberTimeToLive <TimeSpan>]
   [-Partition <String>]
   [-PassThru]
   [-Server <String>]
   [-DisablePermissiveModify]
   [<CommonParameters>]

   
Parametri

-AuthType 
Specifica il metodo di autenticazione. I valori accettati dal parametro sono:
  • Negotiate oppure 0 (default)
  • Basic oppure 1
-Confirm
Se specificato, tale parametro mostra la richiesta di conferma prima di eseguire il cmdlet.

-Credential
Specifica le credenziali dell'account utente con cui eseguire il comando. Se omesso viene considerato l'utente corrente che sta eseguendo il comando. Al parametro può essere passato il nome dell'account, come ad es. "utente01" o "Dominio\utente01" oppure può essere passato un'oggetto PSCredential generato dal cmdlet Get-Credential. Se viene specificato un'account utente verrà richiesto di inserire la password all'esecuzione del comando.

-DisablePermissiveModify
Gli aggiornamenti dei membri del gruppo utilizzano una modifica permissiva per impostazione predefinita e il messaggio di errore quando si aggiunge un account che è già membro del gruppo viene soppresso. Specificando tale parametro il messaggio di errore verrà visualizzato.

-Identity
Tale parametro specifica l'oggetto gruppo Active Directory su cui si desidera intervenire. Al parametro può essere passato un qualsiasi valore che identifica il gruppo in maniera univoca come:
Distinguished name
GUID (objectGUID)
Security identifier (objectSid)
Security Account Manager account name (sAMAccountName) 

-Members
Permette di specificare un array di utenti, gruppi e computer separati da virgola da aggiungere al gruppo. Il parametro accetta come valori:
Distinguished name
GUID (objectGUID)
Security identifier (objectSid)
SAM account name (sAMAccountName)

-MemberTimeToLive
Permette di specificare un Time to Live (TTL) per i nuovi membri del gruppo.

-Partition
A tale parametro va passato il Distinguished Name (DN) di una partizione di Active Directory. Il cmdlet utilizzerà tale partizione per ricercare l'oggetto specificato dal parametro Identity.

-PassThru
Restituisce un oggetto che rappresenta l'item su cui si sta lavorando. Per impostazione predefinita, il cmdlet non genera alcun output.

-Server
Permette di specificare l'istanza di Active Directory Domain Services a cui connettersi per eseguire l'operazione.

-WhatIf
Mostra cosa accadrebbe se venisse eseguito il cmdlet. Il cmdlet non viene eseguito.

Aggiungere membri in un gruppo Active Directory
Per aggiungere account utente, computer o altri gruppi come membri in un gruppo Active Directory il comando sarà simile a
Add-AdGroupMember -Identity Gruppo1 -Members yosemite.sam, Giovanni.Lubrano
Come visibile è possibile specificare più membri separandoli con la virgola.

PowerShell, Add-AdGroupMember
FIG 1 - PowerShell, Add-AdGroupMember

Per aggiungere un account computer è necessario aggiungere il simbolo $ alla fine del nome dell'account.
Add-AdGroupMember -Identity Gruppo1 -Members PCDIR004$

Per velocizzare l'inserimento di account all'interno di un gruppo è possibile creare un file CSV. Il file sarà simile a quello mostrato in FIG 2 e conterrà l'elenco degli account da aggiungere al gruppo.
File CSV con l'elenco degli account
FIG 2 - File CSV con l'elenco degli account

Il comando da eseguire per aggiungere al gruppo specificato (Gruppo1) l'elenco degli account presenti nel file CSV (FileUtenti.csv) sarà simile a
Import-CSV C:\FileUtenti.csv -Header utenti | ForEach-Object {Add-AdGroupMember -Identity "Gruppo1" -members $_.utenti}

Per aggiungere un account utente a più gruppi è possibile utilizzare il comando
"Gruppo1","Gruppo2" | Add-ADGroupMember -Members Giovanni.Lubrano
con il seguente comando viene richiesto di specificare l'account utente da inserire nei due gruppi
"Gruppo1","Gruppo2" | Add-ADGroupMember -Members (Read-Host -Prompt "Inserisci l'account utente: ")

PowerShell, Aggiungere un account utente a più gruppi
FIG 3 - PowerShell, Aggiungere un account utente a più gruppi

Sfruttando i cmdlet Get-ADGroupMemberGet-ADUser possiamo copiare gli account utente da un gruppo all'altro. Ad esempio il seguente comando copia i membri account utente dal Gruppo1 al Gruppo2.
Get-ADGroupMember "Gruppo1" | Get-ADUser | ForEach-Object {Add-ADGroupMember -Identity "Gruppo2" -Members $_}








domenica 21 febbraio 2021

PowerShell: Visualizzare i membri di un gruppo Active Directory

In questo articolo tratteremo il cmdlet Get-ADGroupMember utilizzato per visualizzare i membri di un gruppo Active Directory. I membri possono essere account utente, computer o altri gruppi.

Sintassi

Get-ADGroupMember
   [-AuthType <ADAuthType>]
   [-Credential <PSCredential>]
   [-Identity] <ADGroup>
   [-Partition <String>]
   [-Recursive]
   [-Server <String>]
   [<CommonParameters>]

Parametri

-AuthType 
Specifica il metodo di autenticazione. I valori accettati dal parametro sono:
  • Negotiate oppure 0 (default)
  • Basic oppure 1
-Credential
Specifica le credenziali dell'account utente con cui eseguire il comando. Se omesso viene considerato l'utente corrente che sta eseguendo il comando. Al parametro può essere passato il nome dell'account, come ad es. "utente01" o "Dominio\utente01" oppure può essere passato un'oggetto PSCredential generato dal cmdlet Get-Credential. Se viene specificato un'account utente verrà richiesto di inserire la password all'esecuzione del comando.

-Identity
Tale parametro specifica l'oggetto gruppo Active Directory su cui si desidera intervenire. Al parametro può essere passato un qualsiasi valore che identifica il gruppo in maniera univoca come:
Distinguished name
GUID (objectGUID)
Security identifier (objectSid)
Security Account Manager account name (SAMAccountName) 

-Partition
A tale parametro va passato il Distinguished Name (DN) di una partizione di Active Directory. Il cmdlet utilizzerà tale partizione per ricercare l'oggetto specificato dal parametro Identity.

-Recursive
Specifica che il cmdlet ottiene i membri di un gruppo inclusi i membri di gruppi secondari.

-Server
Permette di specificare l'istanza di Active Directory Domain Services a cui connettersi per eseguire l'operazione.

Visualizzare i membri di un gruppo Active Directory
Per visualizzare i membri di un gruppo Active Directory (ad es. un gruppo con nome Gruppo1) si utilizza il comando
Get-ADGroupMember -Identity Gruppo1
PowerShell, Get-ADGroupMember
FIG 1 - PowerShell, Get-ADGroupMember


Se il gruppo contiene altri gruppi e possibile visualizzare anche i membri dei gruppi secondari utilizzando il parametro -Recursive come indicato dal seguente comando
Get-ADGroupMember -Identity "Gruppo1" -Recursive





mercoledì 17 febbraio 2021

PowerShell: Visualizzare informazioni su uno o più gruppi Active Directory

Per visualizzare uno o più gruppi Active Directory si utilizza il cmdlet Get-ADGroup.

Sintassi

Get-ADGroup
   [-AuthType <ADAuthType>]
   [-Credential <PSCredential>]
   -Filter <String>
   [-Properties <String[]>]
   [-ResultPageSize <Int32>]
   [-ResultSetSize <Int32>]
   [-SearchBase <String>]
   [-SearchScope <ADSearchScope>]
   [-Server <String>]
   [-ShowMemberTimeToLive]
   [<CommonParameters>]

Get-ADGroup
   [-AuthType <ADAuthType>]
   [-Credential <PSCredential>]
   [-Identity] <ADGroup>
   [-Partition <String>]
   [-Properties <String[]>]
   [-Server <String>]
   [-ShowMemberTimeToLive]
   [<CommonParameters>]

Get-ADGroup
   [-AuthType <ADAuthType>]
   [-Credential <PSCredential>]
   -LDAPFilter <String>
   [-Properties <String[]>]
   [-ResultPageSize <Int32>]
   [-ResultSetSize <Int32>]
   [-SearchBase <String>]
   [-SearchScope <ADSearchScope>]
   [-Server <String>]
   [-ShowMemberTimeToLive]
   [<CommonParameters>]

Parametri

-AuthType 
Specifica il metodo di autenticazione. I valori accettati dal parametro sono:
  • Negotiate oppure 0 (default)
  • Basic oppure 1
-Credential
Specifica le credenziali dell'account utente con cui eseguire il comando. Se omesso viene considerato l'utente corrente che sta eseguendo il comando. Al parametro può essere passato il nome dell'account, come ad es. "utente01" o "Dominio\utente01" oppure può essere passato un'oggetto PSCredential generato dal cmdlet Get-Credential. Se viene specificato un'account utente verrà richiesto di inserire la password all'esecuzione del comando.

-Filter
Permette di specificare una query che recupera l'oggetto gruppo Active Directory.

-Identity
Tale parametro specifica l'oggetto gruppo Active Directory su cui si desidera intervenire. Al parametro può essere passato un qualsiasi valore che identifica il gruppo in maniera univoca come:
Distinguished name
GUID (objectGUID)
Security identifier (objectSid)
Security Account Manager account name (sAMAccountName) 

-LDAPFilter
Specifica una query LDAP che viene utilizzata per filtrare gli oggetti Active Directory. 

-Partition
A tale parametro va passato il Distinguished Name (DN) di una partizione di Active Directory. Il cmdlet utilizzerà tale partizione per ricercare l'oggetto specificato dal parametro Identity.

-Properties
Specifica le proprietà dell'oggetto da recuperare. Può essere usato per recuperare le proprietà che non sono incluse nel set di default.

-ResultPageSize
Specifica il numero di oggetti da includere in una pagina per una query AD DS.

-ResultSetSize
Specifica il numero massimo di oggetti da restituire per la query AD DS.

-SearchBase
Specifica un percorso Active Directory all'interno del quale effettuare la ricerca.

-SearchScope
Specifica l'ambito di una ricerca Active Directory. I valori accettabili per questo parametro sono:
  • Base o 0
  • OneLevel o 1
  • SubTree o 2
-Server
Permette di specificare l'istanza di Active Directory Domain Services a cui connettersi per eseguire l'operazione.

-ShowMemberTimeToLive
Indica che questo cmdlet visualizza i valori di Time to Live (TTL) per i membri del gruppo.


Esempi

Esempio 1
Get-ADGroup -filter * -properties GroupCategory | ft name,groupcategory
Visualizza tutti i gruppi Active Directory
Visualizza tutti i gruppi Active Directory
FIG 1 - Visualizza tutti i gruppi Active Directory


Esempio 2
Get-ADGroup -Identity Gruppo1
Visualizza il gruppo specificato dal parametro -Identity.
Visualizza il gruppo Active Directory specificato
FIG 2 - Visualizza il gruppo Active Directory specificato

Esempio 3
Get-ADGroup -Filter 'GroupCategory -eq "Security"'
Visualizza solo i gruppi di sicurezza.