Visualizzazione post con etichetta cmdlet. Mostra tutti i post
Visualizzazione post con etichetta cmdlet. Mostra tutti i post

martedì 20 marzo 2018

MS Exchange: Visualizzare la configurazione di trasporto dell'intera infrastruttura

Per visualizzare la configurazione delle impostazioni di trasporto globali applicate all'interno della propria organizzazione si utilizza il cmdlet Get-TransportConfig.
Il cmdlet va eseguito da Exchange Management Shell (EMS). 

La sintassi del comando è la seguente:
Get-TransportConfig [-Identity <OrganizationIdParameter>] [-DomainController <Fqdn>]



Esempi


Esempio 1
Get-TransportConfig
Se eseguito su un Mailbox Server visualizzerà la configurazione di trasporto globale mentre nel caso venga eseguito su un server di Trasporto Edge verrà visualizzata la configurazione di trasporto del solo computer locale.
MS Exchange, Get-TransportConfig
FIG 1 - MS Exchange, Get-TransportConfig


Esempio 2
Get-TransportConfig |Select MaxReceiveSize
Eseguito su un Mailbox Server visualizza la dimensione massima per i messaggi ricevuti impostato per l'intera organizzazione.






venerdì 2 marzo 2018

MS Exchange: Verificare la versione di Exchange in esecuzione nella propria organizzazione

In un organizzazione può rivelarsi utile conoscere le versioni di MS Exchange in esecuzione sui server al fine di allineare/aggiornare i sistemi.
Per visualizzare il numero di build per le versioni di MS Exchange 2013/2016 in esecuzione sulla propria infrastruttura si può utilizzare il cmdlet Get-ExchangeServer in Exchange Management Shell (EMS).

Il comando da eseguire per visualizzare i server Exchange con relativa versione è il seguente:
Get-ExchangeServer | Format-List Name, Edition, AdminDisplayVersion


Visualizzare il numero di build dei server MS Exchange
FIG 1 - Visualizzare il numero di build dei server MS Exchange

Per visualizzare un elenco riepilogativo con tutti gli attributi di tutti i server Exchange presenti nell'infrastruttura si utilizza il comando
Get-ExchangeServer | Format-List


Per visualizzare le informazioni su uno specifico server Exchange, al cmdlet Get-ExchangeServer va passato il parametro Identity seguito dal nome del server di proprio interesse
Get-ExchangeServer -Identity SrvExc01 | Format-List




mercoledì 17 gennaio 2018

MS Exchange: Ricerca all'interno delle Public Folders utilizzando EMS

Per recuperare gli attributi di una cartella o un insieme di cartelle pubbliche in Exchange Management Shell (EMS) è disponibile il cmdlet Get-PublicFolder.
Il cmdlet può essere utilizzato da solo oppure insieme ad uno o più parametri di seguito elencati.

Parametri principali


GetChildren
Permette di specificare se restituire solo gli elementi figlio della cartella specificata da -Identity. Non può essere utilizzato con il parametro Recurse.

Identity
Il parametro Identity permette di specificare una determinata public folder. Consente di indicare anche il path utilizzando il formato \TopLevelPublicFolder\PublicFolder.

Recurse 
Il parametro recurse specifica che il comando restituirà la cartella pubblica indicata e tutti i sui figli.

Mailbox
Il parametro Mailbox consente di specificare l'identità della casella di posta di cartelle pubbliche gerarchica. Il parametro accetta l'Alias, il Display Name, il Distinguished Name (DN) o il Domain\Account.

ResultSize
Con ResultSize è possibile specificare il numero massimo di risultati da restituire. Il valore massimo predefinito è 10.000. Se non si intende impostare alcun limite al numero di risultati restituiti, al parametro va passato il valore Unlimited. Resultsize può essere specificato solo con i parametri Recurse o GetChildren.


Esempi


Esempio 1
Get-PublicFolder
Il cmdlet senza parametri restituisce la cartella pubblica radice (IPM_SUBTREE).

Esempio 2
Get-PublicFolder -Identity "\Agenzia1\Documenti\Legale"
Il comando restituisce la cartella pubblica Legale presente in \Agenzia1\Documenti\. Per visualizzare anche il contenuto delle sottocartelle di Legale è possibile utilizzare il parametro -Recurse come indicato di seguito
Get-PublicFolder -Identity "\Agenzia1\Documenti\Legale" -Recurse

Esempio 3
Get-PublicFolder -Mailbox "Ufficio1" -ResidentFolders
Restituisce le cartelle pubbliche che risiedono nella cartella pubblica della casella Ufficio1.

Esempio 4
Get-PublicFolder -recurse -resultsize unlimited | where {$_.name -like "sala*"}
Ricerca le cartelle il cui nome inizia per sala all'interno delle cartelle pubbliche.


Get-PublicFolder, ricerca cartelle pubbliche
FIG 1 - Get-PublicFolder, ricerca cartelle pubbliche




mercoledì 8 novembre 2017

MS Exchange: Visualizzare lo stato delle code dei messaggi utilizzando EMS

Exchange Management Shell mette a disposizione il cmd-let Get-Queue per visualizzare lo stato delle code dei messaggi relative ai server mailbox e di trasporto. Il cmd-let è utile per verificare che il flusso dei messaggi all'interno dell'organizzazione non presenti intoppi o colli di bottiglia evidenziando il numero di email ancora da processare. La sintassi del comando è la seguente:

Get-Queue [-Filter <String>] [-Server <ServerIdParameter>]
oppure
Get-Queue [-Identity <QueueIdentity>]

Parametri principali


Exclude
Permette di specificare il tipo di code da escludere dai risultati. Accetta le proprietà InternalExternal o una delle proprietà DeliveryType (DeliveryAgentDnsConnectorDeliveryNonSmtpGatewayDeliverySmartHostConnectorDelivery) per filtrare le code.

Include
Consente di specificare il tipo di code da includere nei risultati. Accetta le stesse proprietà viste per Exclude.

Filter
Il parametro Filter viene utilizzato per specificare una o più code utilizzando la sintassi del filtro OPath: nome di una proprietà della coda seguito da un operatore di confronto e da un valore. Ad es. {NextHopDomain -eq "contoso.com"}

Identity
Tale parametro consente di specificare la coda da interrogare. Al parametro va passata in input la coda da visualizzare nel formato Server\coda, ad es. Server1\contoso.com



Esempi


Esempio 1
Get-Queue | FL
Visualizza informazioni dettagliate su tutte le code.

Esempio 2
Get-Queue -Exclude Internal
Visualizza solo le code che non hanno il valore Internal all'interno della proprietà NextHopCategory

Esempio 3

Get-Queue -Filter {MessageCount -gt 50}
Permette di elencare solo le code che contengono più di 50 messaggi.

Esempio 4

Get-Queue Server1\contoso.com | FL
Visualizza informazioni dettagliate sulla coda esistente sul server Server1.



venerdì 20 ottobre 2017

PowerShell: Visualizzare informazioni dettagliate sui dischi fisici installati nel sistema tramite il cmdlet Get-PhysicalDisk

Introdotto a partire da Windows 8/ Windows Server 2012, il cmdlet Get-PhysicalDisk consente di elencare i dischi fisici installati nel sistema e relative informazioni dettagliate.

Lanciando il comando senza alcun parametro verranno elencati i dischi installati nel sistema con alcune informazioni come il modello, il Serial Number, il tipo di disco (HDD o SDD), lo stato di 'salute' del disco, la dimensione, ecc. 

Get-PhysicalDisk
FIG 1 - Get-PhysicalDisk

Per visualizzare maggiori dettagli è possibile utilizzare il comando
Get-PhysicalDisk | Select *
Get-PhysicalDisk, visualizzare maggiori dettagli
FIG 2 - Get-PhysicalDisk, visualizzare maggiori dettagli


Tramite Select è possibile specificare solo le informazioni che ci interessano tra quelle disponibili. Ad es. per visualizzare solo il modello del disco e il tipo possiamo utilizzare il comando
Get-PhysicalDisk | Select Model, MediaType



Parametri principali


-CanPool
Passando al parametro il valore $True verranno elencati solo i dischi installati che consentono l'utilizzo in un pool di storage. Con $False, viceversa, verranno elencati solo i dischi che non possono essere utilizzati in uno storage pool.
Es.
Get-PhysicalDisk -CanPool $True

-CimSession
Esegue il comando su una sessione o un computer remoto.
Get-PhysicalDisk -CimSession <NomeServer1>

-FriendlyName
Permette di visualizzare le informazioni del disco passato al parametro
Get-PhysicalDisk -FriendlyName <NomeDisco>

-HealthStatus
Permette di visualizzare le informazioni dei dischi installati che hanno lo stato di 'salute' specificato dal parametro HealthStatus. I valori accettati sono Healthy, Unhealthy, Unknown, Warning.
Ad es. volendo visualizzare solo i dischi che hanno il valore HealthStatus impostato su Warning il comando è il seguente:
Get-PhysicalDisk -HealthStatus Warning

-Manufacturer
Il parametro Manufacturer consente di visualizzare le informazioni solo dei dischi prodotti dal produttore specificato.
Get-PhysicalDisk -Manufacturer WDC

-Model
Analogamente al parametro Manufacturer, Model consente di specificare il modello del disco.
Get-PhysicalDisk -Model "WDC WD5000AAKX-75U6AA0"

-Usage
Consente di visualizzare le informazioni dei dischi in base alla loro destinazione di utilizzo. I valori accettati sono  AutoSelect, HotSpare, Journal, ManualSelect, Retired, Unknown.
Get-PhysicalDisk -Usage Journal

-VirtualDisk
Passando al parametro un oggetto Virtual Disk consente di visualizzare le informazioni del disco fisico usato dal disco virtuale. L'oggetto VirtualDisk può essere trovato tramite il cmdlet Get-VirtualDisk.

-UniqueId
Permette di visualizzare le informazioni del disco con uno specifico ID.





martedì 3 ottobre 2017

MS Exchange: Recuperare l'elenco dei dispositivi mobili sincronizzati con la casella di posta tramite EMS

Per recuperare l'elenco dei dispositivi mobili, configurati per sincronizzarsi con una casella di posta, tramite Exchange Management Shell (EMS) si utilizza il cmdlet Get-MobileDeviceStatistics.

La sintassi del comando è la seguente
Get-MobileDeviceStatistics -Identity <MobileDeviceIdParameter>
oppure
Get-MobileDeviceStatistics -Mailbox <MailboxIdParameter>


Parametri Principali

  • Identity
    Tale parametro è obbligatorio a meno che non venga utilizzato il parametro Mailbox,  in tal caso verrà ignorato. Il parametro consente di specificare l'ID del dispositivo dell'utente da analizzare.

  • Mailbox
    Tale parametro è obbligatorio a meno che non venga utilizzato il parametro Identity. Consente di recuperare le statistiche dei device mobili sincronizzati con la casella di posta specificata.

  • ActiveSync 
    Il parametro ActiveSync consente di specificare se restituire le statistiche per Microsoft Exchange ActiveSync o per la sincronizzazione di altri dispositivi mobili.

  • GetMailboxLog
    Se impostato su $true permette di specificare se inviare i registri della casella di posta tramite email all'amministratore che esegue l'attività.

  • NotificationEmailAddresses
    Se GetMailboxLog è impostato su $true, con tale parametro è possibile specificare un indirizzo o un elenco di indirizzi di posta separati da virgola a cui verranno inviati i registri della casella di posta analizzata. Con GetMailboxLog impostato su $false tale parametro verrà ignorato.

  • ShowRecoveryPassword
    Se impostato su $true, il comando restituisce la password di ripristino per il telefono cellulare.


Esempio:
Get-MobileDeviceStatistics -Mailbox giovanni.lubrano@contoso.com
Con tale comando vengono visualizzate informazioni e statistiche relative ai dispositivi mobili che si sincronizzano con la casella giovanni.lubrano@contoso.com

MS Exchange, Get-MobileDeviceStatistics
FIG 1 - MS Exchange, Get-MobileDeviceStatistics 




martedì 16 maggio 2017

MS Exchange: Rimuovere la foto associata all'account utente tramite EMS

Per rimuovere una foto associata ad un'account utente in ambiente MS Exchange 2013/2016 è possibile agire tramite EMS (Exchange Management Shell) utilizzando il cmdlet Remove-UserPhoto. La sintassi del comando è la seguente

Remove-UserPhoto -identity <IdentificativoMailbox>

oppure

Remove-UserPhoto -ClearMailboxPhotoRecord <SwitchParameter> -Identity <IdentificativoMailbox>

MS Exchange, foto associata all'account utente
FIG 1 - MS Exchange, foto associata all'account utente


Parametri principali


Identity
Il parametro Identity specifica l'identità dell'account utente. Il parametro accetta un qualsiasi valore che consenta di identificare l'account in modo univoco come:
GUID
Nome distinto (DN)
Dominio\Account
Nome dell'entità utente
LegacyExchangeDN
SamAccountName
Indirizzo SMTP
Alias 


ClearMailboxPhotoRecord
Il parametro ClearMailboxPhotoRecord è disponibile solo per il servizio basato su cloud e indica che la foto eliminata da una casella di posta viene considerata vuota anziché rimossa. Non è necessario specificare un valore per questa opzione.



Esempi


Esempio 1
Remove-UserPhoto -identity GLUBRANO
Elimina la foto associata all'account GLUBRANO

Esempio 2
Remove-UserPhoto -identity giovanni.lubrano@contoso.com -Confirm:$false
Rimuove la foto associata all'account identificato dall'indirizzo giovanni.lubrano@contoso.com senza chiedere conferma prima di procedere.



giovedì 29 dicembre 2016

PowerShell: Inviare un'email tramite il cmdlet Send-MailMessage

Per inviare un'email tramite PowerShell è possibile utilizzare il cmdlet Send-MailMessage. La sintassi del comando è la seguente:

Send-MailMessage [-Attachments <String[]>] [-Bcc <String[]>] [[-Body] <String>] [-BodyAsHtml] [-Encoding <Encoding>] [-Cc <String[]>] [-DeliveryNotificationOption <DeliveryNotificationOptions>] -From <String> [[-SmtpServer] <String>] [-Priority <MailPriority>] [-Subject] <String> [-To] <String[]> [-Credential <PSCredential>] [-UseSsl] [-Port <Int32>] [<CommonParameters>]


Parametri principali


-Attachments
Consente di specificare il path e il nome dei file da allegare al messaggio.

-Bcc
Blind Carbon Copy. Permette di specificare uno o più indirizzi a cui inviare il messaggio in copia conoscenza nascosta. Tali indirizzi non vengono visualizzati dai destinatari del messaggio.

-Body
Al parametro Body va passato il corpo del messaggio.

-BodyAsHtml

La presenza di tale parametro indica che il corpo del messaggio passato a Body contiene codice HTML.

-Cc
Specifica gli indirizzi a cui inviare l'email in copia conoscenza (o copia carbone). E' possibile specificare solo l'indirizzo email oppure nome e indirizzo nel formato Nome <esempio@contoso.com>

-Credential
Per default l'email viene inviata con le credenziali dell'utente corrente. Per inviare l'email con un altro account è necessario utilizzare tale parametro.

-DeliveryNotificationOption

Il parametro DeliveryNotificationOption (abbreviabile in -dno) consente di impostare le opzioni di notifica del messaggio. I valori accettati sono:
None Nessuna notifica (impostazioni di default);
OnSuccess Si riceve una notifica se il messaggio viene recapitato correttamente;
OnFailure Si riceve un messaggio se il messaggio non viene recapitato;
Delay  Si riceve in caso di recapito ritardato;
Never Non notifica in alcun caso.
Alcune opzioni possono essere utilizzare contemporaneamente ad es. OnSuccess e OnFailure.

-Encoding
Specifica il tipo di codifica utilizzata dal corpo e dall'oggetto del messaggio. I valori accettati sono:
ASCII
UTF8
UTF7
UTF32
Unicode
BigEndianUnicode
Default
OEM
Per default è impostata la codifica ASCII.

-From
Il parametro From è obbligatorio e viene utilizzato per specificare l'indirizzo del mittente. Al parametro è  possibile passare solo l'indirizzo email oppure nome e indirizzo nel formato Nome <esempio@contoso.com>.

-Port
Questo parametro è disponibile a partire da PowerShell 3.0 e consente di indicare una porta SMTP alternativa a quella di default (la porta SMTP di default è la 25).

-Priority
Il parametro Priority permette di specificare la priorità del messaggio. I valori accettati sono:
Normal
High
Low

-SmtpServer
Permette di specificare il nome del server SMTP che invia il messaggio.

-Subject
Questo è un parametro obbligatorio. Al parametro va passato l'oggetto dell'email.

-To
Tale parametro, richiesto, permette di indicare gli indirizzi a cui spedire il messaggio. Anche in questo caso (come per i parametri From, CC e BCC) è possibile specificare solo l'indirizzo email oppure nome e indirizzo nel formato Nome <esempio@contoso.com>.

-UseSsl
Se usato, forza la connessione al server remoto tramite protocollo SSL (Secure Sockets Layer).


Vediamo alcuni esempi

Esempio 1
Send-MailMessage -SmtpServer Smtp.contoso.com -To bill.gates@example.com -From 'Giovanni Lubrano <giovanni.lubrano@contoso>' -Subject 'Riunione Aziendale' -Body '<h1>Ciao Bill</h1>' -BodyAsHtml -Priority High
Invia un messaggio a priorità alta in formato HTML.

Esempio 2
Send-MailMessage -From "Giovanni Lubrano <giovanni.lubrano@example.com>" -To "Bill Gates <bill.gates@example.com>", "Mark Zuckerberg <mark.zuckerberg@example2.com>" -Subject "Invio CV in allegato" -Body "In allegato il mio CV." -Attachments "Curriculum.pdf" -Priority High -dno onSuccess, onFailure -SmtpServer "smtp.contoso.com"
Invio di un allegato a più persone con un messaggio di solo testo, a priorità alta e con richiesta di notifica nel caso in cui il messaggio venga recapitato o nel caso in cui la consegna fallisca.




mercoledì 7 dicembre 2016

Windows: Gestire il ripristino di sistema tramite PowerShell

La funzione ripristino di sistema ha fatto il suo debutto con Windows XP. Tale funzionalità risulta molto utile nel caso si riscontrino problemi con Windows, permettendo il ripristino dell'intero sistema ad una data antecedente a quella in cui si è presentato il problema.

In quest'articolo verrà mostrato come gestire tale funzionalità tramite i seguenti comandi PowerShell:
Enable-ComputerRestore
Disable-ComputerRestore
Checkpoint-Computer
Get-ComputerRestorePoint
Restore-Computer

Per poter utilizzare tali cmdlet è necessario eseguire PowerShell come amministratore:
Dal menu Start ricercare PowerShell, quindi cliccare sul collegamento con il tasto destro del mouse e selezionare Esegui come amministratore. All'eventuale richiesta di conferma visualizzata dal UAC (Controllo dell'account utente), confermare cliccando su SI.

Windows 10: Avviare PowerShell come amministratore
FIG 1 - Windows 10: Avviare PowerShell come amministratore

I cmdlet indicati permettono di abilitare/disabilitare la protezione ripristino di sistema, creare nuovi punti di ripristino ed eseguire il restore. Vediamoli in dettaglio.

Enable-ComputerRestore
Enable-ComputerRestore consente di abilitare il ripristino di sistema e specificare su quali dischi attivare la protezione. I dischi su cui va abilitata la protezione da parte del ripristino di sistema vanno specificati separati da virgola come indicato di seguito 
Enable-ComputerRestore "C:\", "D:\"
Sui dischi/partizioni non specificati esplicitamente all'interno del comando, la protezione verrà disabilitata. Impostazioni più dettagliate, come la percentuale del disco da utilizzare, possono essere settate tramite il Pannello di Controllo oppure agendo sulle chiavi di registro presenti in 
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore


Disable-ComputerRestore
La sintassi del comando Disable-ComputerRestore è del  tutto analoga a quella vista per Enable-ComputerRestore con la differenza che in questo caso la protezione viene disabilitata per i dischi/partizioni specificati.
Disable-ComputerRestore "C:\", "D:\"


Checkpoint-Computer
Checkpoint-Computer consente di creare un nuovo punto di ripristino. La sintassi è molto semplice, basta far seguire al comando una breve descrizione, contenuta tra apici, da assegnare al punto di ripristino. Ad es.
Checkpoint-Computer "Punto di ripristino antecedente ad Office 2016"


Get-ComputerRestorePoint
Il cmdlet Get-ComputerRestorePoint visualizza tutti i punti di ripristino disponibili e basta eseguirlo senza alcun parametro
Get-ComputerRestorePoint
Oltre alla data/ora e la descrizione del punto di ripristino viene riportato anche il relativo numero sequenziale (SequenceNumber).
Nel caso in cui sia già stato eseguito un ripristino di sistema è possibile verificare il punto di ripristino utilizzato tramite il comando 
Get-ComputerRestorePoint -LastStatus


Restore-Computer
Per ripristinare il sistema si utilizza il cmdlet Restore-Computer indicando il relativo SequenceNumber del punto di ripristino che si intende utilizzare:
Restore-Computer -RestorePoint <SequenceNumber>
Ad esempio, supponendo di voler ripristinare il punto di ripristino avente come SequenceNumber 10 il comando è il seguente
Restore-Computer -RestorePoint 10
Per conoscere il SequenceNumber del punto di ripristino più recente si utilizza il comando 
(Get-ComputerRestorePoint)[-1].sequencenumber
Combinando i 2 cmdlet Restore-ComputerGet-ComputerRestorePoint, come indicato di seguito, possiamo automatizzare il restore al punto di ripristino più recente:
Restore-Computer -RestorePoint (Get-ComputerRestorePoint)[-1].sequencenumber
Il cmdlet Restore-Computer viene eseguito senza richiedere alcuna conferma all'utente. Per visualizzare un messaggio di conferma bisogna aggiungere al cmdlet il parametro -confirm:$true
Restore-Computer -RestorePoint (Get-ComputerRestorePoint)[-1].sequencenumber -confirm:$true

Cmdlet PowerShell per la gestione dei punti di ripristino
FIG 2 - Cmdlet PowerShell per la gestione dei punti di ripristino





giovedì 10 novembre 2016

PowerShell: Mandare in stampa determinati file presenti in una cartella

Per mandare in stampa un determinato file utilizzando PowerShell è possibile utilizzare il comando
Start-Process -FilePath <path_e_nome_file> –Verb Print

Ad es. per stampare il file c:\temp\list.pdf il comando da eseguire è
Start-Process -FilePath c:\temp\list.pdf –Verb Print

Il file verrà aperto, mandato in stampa sulla stampante predefinita e quindi verrà chiuso.

Per stampare tutti i file PDF contenuti nella cartella c:\temp\ 
Dir c:\temp\*.pdf | Foreach-Object { Start-Process -FilePath $_.FullName –Verb Print }
PowerShell, stampare tutti i file PDF presenti in una cartella
FIG 1 - PowerShell, stampare tutti i file PDF presenti in una cartella

In caso di file di solo testo si può scegliere di utilizzare i cmdlet Get-Content e Out-Printer
Get-Content c:\temp\list.txt | Out-Printer

PowerShell: Visualizzare il tipo di avvio e lo stato dei servizi di sistema utilizzando Get-WMIObject

Per visualizzare lo stato dei servizi di Windows e il relativo tipo di avvio impostato è possibile utilizzare il cmdlet di PowerShell Get-WMIObject.
Da PowerShell eseguire il comando
Get-WMIObject Win32_Service | Select-Object Name, StartMode, State

Se si intende visualizzare le informazioni relative ad un solo servizio possiamo filtrare il risultato con Where {$_.name -eq "Nome_Servizio"}
Ad es. volendo visualizzare il tipo di avvio e lo stato del servizio Spooler eseguiamo il comando
Get-WMIObject Win32_Service | Where {$_.name -eq "Spooler"} | Select-Object Name, StartMode, State


PowerShell, visualizzare il tipo di avvio e lo stato di un servizio
FIG 1 - PowerShell, visualizzare il tipo di avvio e lo stato di un servizio

In modo analogo è possibile visualizzare solo i servizi in esecuzione utilizzando il filtro Where {$_.state -eq "Running"}
Get-WMIObject Win32_Service | Where {$_.state -eq "Running"} | Select-Object Name, StartMode, State

oppure quelli che hanno impostato come tipo di avvio Automatico con Where {$_.StartMode -eq "Auto"}
Get-WMIObject Win32_Service | Where {$_.StartMode -eq "Auto"} | Select-Object Name, StartMode, State

Per utilizzare più condizioni nello stesso comando basta utilizzare -and. Ad es., lanciando il seguente comando uniamo le 2 condizioni viste precedentemente e verranno mostrati tutti i servizi in esecuzione che hanno impostato come tipo di avvio Automatico
Get-WMIObject Win32_Service | Where {$_.state -eq "Running" -and $_.StartMode -eq "Auto"} | Select-Object Name, StartMode, State

Per visualizzare le informazioni relative ai servizi di una macchina remota, basta utilizzare il parametro -Computer specificando il nome o l'indirizzo IP della postazione. Ad es. volendo verificare il servizio Spooler sulla postazione Server1 il comando da utilizzare è il seguente:
Get-WMIObject Win32_Service -Computer Server1 | Where {$_.name -eq "Spooler"} | Select-Object Name, StartMode, State


lunedì 19 settembre 2016

PowerShell: Implementare la funzione Mostra Desktop tramite PowerShell

Chi lavora con molte finestre aperte in ambiente Windows conoscerà sicuramente il tasto Mostra Desktop presente nella barra delle applicazioni (o la relativa scorciatoia da tastiera WIN+D) che permette di ridurre ad icona tutte le finestre in modo da mostrare il desktop sottostante. Per implementare tale funzione in PowerShell bastano 2 semplici istruzioni:

$showDesk = New-Object -ComObject Shell.Application
$showDesk.ToggleDesktop()


PowerShell: Mostra Desktop
FIG 1 - PowerShell: Mostra Desktop


giovedì 15 settembre 2016

PowerShell: Visualizzare data e ora dell'ultimo boot del sistema utilizzando Get-CimInstance

Il cmdlet Get-CimInstance cattura le istanze Common Information Model (CIM) di una classe da un server CIM. Il cmdlet può essere usato, insieme alla classe Win32_OperatingSystem , per visualizzare la data e l'ora dell'ultimo boot effettuato dal sistema tramite il seguente comando in PowerShell:

Get-CimInstance -ClassName Win32_OperatingSystem | select  lastbootuptime


PowerShell: Last Boot time
FIG 1 - PowerShell: Last Boot time
Per visualizzare la data e l'ora dell'ultimo boot di una postazione remota, basta utilizzare il parametro -ComputerName

Get-CimInstance -ClassName Win32_OperatingSystem -ComputerName <nome_computer> | select  lastbootuptime

indicando al posto di <nome_computer> il nome del computer remoto.

mercoledì 14 settembre 2016

PowerShell: Visualizzare i task schedulati utilizzando Get-ScheduledTask

Il cmdlet Get-ScheduledTask di PowerShell 3.0 (e successivi) consente di visualizzare i task schedulati sulla macchina.


Parametri principali


-AsJob
Il parametro esegue il comando in background. Per poter utilizzare tale parametro è necessario eseguire PowerShell come amministratore

-CimSession
Esegue il comando su una sessione o un computer remoto.

-TaskName
Consente di specificare il nome di un task schedulato da verificare.

-TaskPath
Specifica il path dei task schedulati da verificare.



Di seguito alcuni esempi

Esempio 1
Get-ScheduledTask 
Visualizza tutti i task schedulati presenti sulla macchina.

Esempio 2
Get-Scheduledtask  | where state -eq "Running"
Visualizza tutti i task schedulati che sono al momento in esecuzione sulla macchina.

Esempio 3
Get-ScheduledTask -CimSession "Nome_Computer"
Visualizza tutti i task schedulati del computer remoto indicato da Nome_Computer.

Esempio 4
Get-ScheduledTask -TaskName "Nome_Task"
Visualizza lo stato del task schedulato indicato da Nome_Task (se il task esiste).

Esempio 5
Get-ScheduledTask -TaskPath "\Microsoft\"
Visualizza tutti i task schedulati presenti nel path \Microsoft\.

martedì 16 agosto 2016

PowerShell: Formattare un volume esistente con Format-Volume

Il cmdlet Format-Volume di PowerShell 3.0 (e successivi) consente di formattare un volume esistente. La sintassi è la seguente (a seconda se si intende indicate la lettera del drive, l'ID, l'etichetta, la partizione o il percorso):

DriveLetter
Format-Volume [-DriveLetter] <Char[]> [-AllocationUnitSize <UInt32> ] [-AsJob] [-CimSession <CimSession[]> ] [-Compress] [-DisableHeatGathering] [-FileSystem <String> ] [-Force] [-Full] [-NewFileSystemLabel <String> ] [-SetIntegrityStreams <Boolean> ] [-ShortFileNameSupport <Boolean> ] [-ThrottleLimit <Int32> ] [-UseLargeFRS] [-Confirm] [-WhatIf] [ <CommonParameters>]

ID
Format-Volume -ObjectId <String[]> [-AllocationUnitSize <UInt32> ] [-AsJob] [-CimSession <CimSession[]> ] [-Compress] [-DisableHeatGathering] [-FileSystem <String> ] [-Force] [-Full] [-NewFileSystemLabel <String> ] [-SetIntegrityStreams <Boolean> ] [-ShortFileNameSupport <Boolean> ] [-ThrottleLimit <Int32> ] [-UseLargeFRS] [-Confirm] [-WhatIf] [ <CommonParameters>]

Label
Format-Volume -FileSystemLabel <String[]> [-AllocationUnitSize <UInt32> ] [-AsJob] [-CimSession <CimSession[]> ] [-Compress] [-DisableHeatGathering] [-FileSystem <String> ] [-Force] [-Full] [-NewFileSystemLabel <String> ] [-SetIntegrityStreams <Boolean> ] [-ShortFileNameSupport <Boolean> ] [-ThrottleLimit <Int32> ] [-UseLargeFRS] [-Confirm] [-WhatIf] [ <CommonParameters>]

Partition
Format-Volume [-AllocationUnitSize <UInt32> ] [-AsJob] [-CimSession <CimSession[]> ] [-Compress] [-DisableHeatGathering] [-FileSystem <String> ] [-Force] [-Full] [-NewFileSystemLabel <String> ] [-Partition <CimInstance> ] [-SetIntegrityStreams <Boolean> ] [-ShortFileNameSupport <Boolean> ] [-ThrottleLimit <Int32> ] [-UseLargeFRS] [-Confirm] [-WhatIf] [ <CommonParameters>]

Paths
Format-Volume -Path <String[]> [-AllocationUnitSize <UInt32> ] [-AsJob] [-CimSession <CimSession[]> ] [-Compress] [-DisableHeatGathering] [-FileSystem <String> ] [-Force] [-Full] [-NewFileSystemLabel <String> ] [-SetIntegrityStreams <Boolean> ] [-ShortFileNameSupport <Boolean> ] [-ThrottleLimit <Int32> ] [-UseLargeFRS] [-Confirm] [-WhatIf] [ <CommonParameters>]


Parametri principali


-AsJob
Il parametro esegue il comando in background. Per poter utilizzare tale parametro è necessario eseguire PowerShell come amministratore

-CimSession
Esegue il comando su una sessione o un computer remoto.

-Compress
Abilita la compressione dei file sul volume NTFS specificato.

-DriveLetter
Specifica la lettera di unità relativa al volume da formattare.

-FileSystem
Permette di specificare il tipo di file system con il quale formattare il volume. I valori accettati da tale parametro sono: NTFS, ReFS, exFAT, FAT32, e FAT.

-FileSystemLabel
Permette di specificare l'etichetta da assegnare al volume da formattare.

-Force
Forza il comando.

-Full
Effettua una formattazione completa. Se non specificato viene eseguita una formattazione veloce.

-NewFileSystemLabel
Specifica una nuova etichetta da assegnare al volume.

-ObjectId
Permette di indicare l'ID del volume da formattare.

-Partition
Permette di specificare la partizione sulla quale creare un nuovo volume. La partizione può essere scelta tra quelle indicate dai cmdlet Get-Partition e New-Partition

-Path
Specifica il Path del volume da formattare.

-Confirm
Chiede conferma prima che il cmdlet venga eseguito.



Di seguito alcuni esempi.

Esempio 1
Format-Volume -DriveLetter D -FileSystem NTFS -Full -Force
Esegue una formattazione completa della partizione D utilizzando il filesystem NTFS.

Esempio 2
Format-Volume -DriveLetter D
Esegue una formattazione veloce del volume con lettera D.


PowerShell, Format-Volume
FIG 1 - PowerShell, Format-Volume




martedì 2 agosto 2016

PowerShell: Verificare la presenza e raggiungibilità di un host in rete tramite Test-Connection

Chi lavora nel campo IT spesso utilizza l'utility Ping per verificare la presenza e raggiungibilità di un Host all'interno della rete. Il ping consiste nell'invio di un pacchetto ICMP (Internet Control Message Protocol) di tipo echo request e attendere in risposta un pacchetto ICMP di tipo echo reply.

Una funzione analoga in PowerShell può essere eseguita tramite il cmdlet Test-Connection. La sintassi del cmdlet è la seguente:

Test-Connection [-ComputerName] <String[]> [-AsJob] [-Authentication <AuthenticationLevel> {Default | None | Connect | Call | Packet | PacketIntegrity | PacketPrivacy | Unchanged} ] [-BufferSize <Int32> ] [-Count <Int32> ] [-Delay <Int32> ] [-Impersonation <ImpersonationLevel> {Default | Anonymous | Identify | Impersonate | Delegate} ] [-InformationAction <System.Management.Automation.ActionPreference> {SilentlyContinue | Stop | Continue | Inquire | Ignore | Suspend} ] [-InformationVariable <System.String> ] [-ThrottleLimit <Int32> ] [-TimeToLive <Int32> ] [ <CommonParameters>]


Parametri principali


-AsJob
Il parametro esegue il comando in background. Per poter utilizzare tale parametro è necessario eseguire PowerShell come amministratore

-Authentication<AuthenticationLevel>
Specifica il livello di autenticazione della connessione WMI (Test-Connection usa WMI). I valori accettati sono: UnchangedDefaultNoneConnectCallPacketPacketIntegrityPacketPrivacy

-BufferSize
Specifica la dimensione, in byte, del pacchetto inviato. Di default la dimensione è 32 byte.

-ComputerName
Si tratta di un parametro obbligatorio e consente di specificare il nome del computer da pingare o il suo indirizzo IP (in formato IPv4 o IPv6).

-Count
Specifica il numero di pacchetti/richieste da inviare. Di default vengono inviati 4 pacchetti.

-Credential
Specifica le credenziali dell'utente autorizzato ad inviare il ping dal computer specificato da -Source.

-Delay
Specifica l'intervallo, in secondi, tra i ping.

-Quiet
Specificando tale parametro verrà restituivo $true se l'host ha risposto al ping, $false in caso contrario. Tutti gli altri messaggi di risposta vengono soppressi.

-Source
Permette di specificare il nome del computer da cui parte il ping. Se non specificato il ping ha origine dal computer locale. É possibile indicare anche più origini del ping separandole tramite virgola.

-TimeToLive
Il parametro TimeToLive (TTL) permette di specificare il tempo di vita, in secondi, del pacchetto ICMP. Il parametro accetta valori interi compresi tra 1 e 255.



Esempi


Esempio 1
Test-Connection Server01
Test-Connection -ComputerName 192.168.0.1
Questi due comandi eseguono il ping rispettivamente verso il computer con nome Server01 e verso l'indirizzo 192.168.0.1. Nel primo comando il parametro -ComputerName viene omesso e indicato direttamente il nome del computer.
Test-Connection -ComputeName
FIG 1 - Test-Connection -ComputeName

Esempio 2
Test-Conntection -ComputerName Server01, Server02
É possibile passare a Test-Connection più host a cui inviare il pacchetto ICMP separandoli tramite virgola.

Esempio 3
Test-Connection -ComputerName 192.168.0.1 -Quiet
Con il parametro Quiet si riceve in output True o False a seconda se si riceve risposta o meno dal computer remoto. Questa caratteristica ci consente di utilizzarlo per verificare la raggiungibilità di un determinato host prima di tentare una qualsiasi operazione. Ad es. 
if (Test-Connection -ComputerName Server01 -Quiet) {New-PSSession Server01}
Test-Connection, parametro -Quiet
FIG 2 - Test-Connection, parametro -Quiet

Esempio 4
Test-Connection -Source Server02, Server03 -ComputerName Server01 -Credential Dominio\Utente
Questo comando invia ping da diversi mittenti/host ad un singolo computer Server01. Il parametro Credential viene utilizzato per specificare le credenziali di un utente che è abilitato all'invio di ping da Server02 e Server03. Questo comando può essere utile per verificare la latenza delle connessioni da diversi punti.