Академический Документы
Профессиональный Документы
Культура Документы
Elenco cmdlet
http://technet.microsoft.com/en-us/library/ee692945.aspx
Elenco alias
http://msdn.microsoft.com/en-us/library/windows/desktop/dd878329(v=vs.85).aspx
Generare una lista dei primi dieci processi, ordinati in base alla loro percentuale di utilizzo del
processore. Per fare ci, utilizzare il risultato ottenuto dallesercizio precedente e aggiungerci il
comando Select-Object. Ci sono due modi per raggiungere una soluzione ottimale, a seconda di
come la lista viene ordinata.
Assegna alla variabile $P la lista dellesercizio precedente. Visualizzare il contenuto della variabile
a video semplicemente digitando $P al prompt.
1
un file XML con nome A4.XML.
Il comando > sostituisce il pipe |, richiesto solo per gli autentici cmdlet come Out-File, Export-
CSV etc. (i file vengono salvati allutente corrente)
1) $P > .\A4.txt
2) $P | Export-CSV .\a4.csv
3) $P | Export-CLIXML .\a4.xml
Generare la lista di tutti i servizi ed ordinarla per stato (propriet Status). Consiglio:
utilizzare lo stesso metodo utilizzato per ordinare i processi per percentuale di
elaborazione ma utilizzare Get-Service e Status come argomenti per Sort-Object.
Output in HTML
esempi per esplorare le varie opzioni rese disponibili dal cmdlet ConvertTo-HTML.
Get-Service | ConvertTo-HTML
Generate una pagina web pi concisa e riportate solo il nome e lo stato di ciascun servizio.
Ordinare loutput per stato prima della conversione.
Suggerimento: la linea di comando utilizzer quattro comandi distinti:
lista di tutti i servizi, ordina per stato, conversione in HTML, memorizzazione su file.
Windows PowerShell considera tutti i file come fossero oggetti. La dimensione di un file pu essere
recuperata direttamente e non deve essere estrapolata da una stringa. Windows PowerShell, inoltre,
non lavora con il file system classico; utilizzando il cmdlet Get-PSDrive visualizzate tutti i
percorsi a cui Windows PowerShell consente di accedere direttamente. I drive sono individuabili
dal fatto che terminano con il carattere due punti (:).
Utilizzare poi cd FK: per passare a quella cartella e verificare di essere nella cartella giusta.
Rimuovere il drive appena creato utilizzando Remove-PSDrive FK e riprovare.
Visualizzare solo il nome del file e la dimensione, escludendo sempre i file temporanei
con estensione tmp o temp. Suggerimento: usate la tecnica impiegata per i processi e i
servizi.
Digitare Get-Alias | Sort-Object Definition (una lista di possibili varianti riconosciute per i
Comandi).
Get-ChildItem * Exclude *.tmp | Select-Object Name, Length
Pu diventare:
ls * ex *.tmp | select n, le (molto piu sintetico)
Ordinate i file per dimensione (length), e per nome (name). Suggerimento: usate lo
stesso metodo impiegato per i processi negli esempi precedenti.
Creare una lista di tutti i possibili attributi per un file utilizzando il cmdlet Get-Member.
Ordinare tutti i file per la data di ultimo accesso.
Get-ChildItem | Get-Member
Get-ChildItem | Get-Member | Sort-Object
3
Il cmdlet Group-Object
Measure-Object
Esiste un altro utile cmdlet, al di l di Get-Member, per recuperare informazioni sugli oggetti:
Measure-Object.
Remove-Item .\*.tmp
4
Creare cartelle
New-Item. Questo cmdlet accetta il nome dellelemento come argomento ed il tipo come parametro,
come Directory per una cartella.
Oggetti WMI
Windows Management Instrumentation (WMI) linfrastruttura per la gestione dei dati e delle operazioni sui sistemi operativi
basati su Windows. Il WMI uno strato software che gira come servizio allinterno del sistema operativo. Questo servizio
paragonabile a quello di un DBMS http://www.giovanniascione.it/?p=87
5
Elencare tutti gli hotfix installati nel sistema:
Get-WmiObject Class Win32_QuickfixEngineering
Script
Criteri di esecuzione
Gli script sono estremamente potenti, purtroppo per possono anche essere utilizzati per
danneggiare un sistema. In PS esistono una serie di funzionalit di protezione, tra cui i criteri di
esecuzione che determinano se gli script possono essere eseguiti ed eventualmente se devono essere
firmati.
Verifico quindi il criterio di protezione tramite il cmdlet Get-ExecutionPolicy e verifico che sia
effettivamente Restricted. Modifico quindi con il cmdlet Set-ExecutionPolicy RemoteSigned
(questa l'impostazione che uso io attualmete). Proviamo ora a rilanciare lo script e verifichiamone il
corretto funzionamento.
Non molto intuitivo ricordarselo, ma per lanciare gli script bisogna indicare il path di esecuzione
6
(nel mio caso il ./ prima del nome dello script); un modo facile per non dimenticarselo utilizzare
l'autocomplete attivato sul tasto tab, che ci completa la stringa digitata a mano .
7
Esercizio velocita di download e upload
http://powershell.it/Snippet/Monitorare-la-velocita-di-download-ed-upload.aspx
$machineName = '.'
$perfCategory = New-Object System.Diagnostics.PerformanceCounterCategory('Network
Interface')
$perfData = New-Object System.Collections.ArrayList
$perfCategory.GetInstanceNames() |
ForEach-Object {
$perfReceived = New-Object System.Diagnostics.PerformanceCounter('Network Interface',
'Bytes Received/sec', $_, $machineName)
$perfSent = New-Object System.Diagnostics.PerformanceCounter('Network Interface', 'Bytes
Sent/sec', $_, $machineName)
$perfData.Add(@{
'Interface' = $_;
'PerfReceived' = $perfReceived;
'PerfSent' = $perfSent;
'Received' = $perfReceived.RawValue;
'Sent' = $perfSent.RawValue
})
}
Start-Sleep 1
$perfData |
ForEach-Object {
'Interfaccia: ' + $_.Interface
Risultato
0
1
2
3
Interfaccia: VirtualBox Host-Only Ethernet Adapter
Spediti: 0
Ricevuti: 0
Interfaccia: Intel[R] 82578DC Gigabit Network Connection
Spediti: 0.041015625
Ricevuti: 0.7724609375
Interfaccia: isatap.itisap.it
Spediti: 0
Ricevuti: 0
Interfaccia: isatap.{40C55133-5FD5-439E-8412-B70D321540DF}
Spediti: 0
Ricevuti: 0
8
Visualizza in modo ricursivo il contenuto delle cartelle
Get-ChildItem -Path $_. <# Commento #> -Recurse
($_. Significa dir corrente)
In Strumentazione gestione Windows (WMI) Windows Management Instrumentation (WMI) viene utilizzato
un oggetto data/ora diverso dall'oggetto data/ora di .NET Framework restituito da Get-Date. Per
utilizzare le informazioni relative a data e ora restituite da WMI in un comando in cui tali
informazioni vengono restituite da Get-Date, necessario utilizzare il metodo ConvertToDateTime
per convertire gli oggetti CIM_DATETIME di WMI in oggetti DateTime di .NET Framework.
Nel primo comando viene utilizzato il cmdlet Get-WmiObject per ottenere un'istanza della classe
Win32_BIOS in dt che viene memorizzata nella variabile $a.
Nel secondo comando viene utilizzato l'operatore pipeline (|) per inviare l'oggetto WMI archiviato
in $a al cmdlet Format-List. Viene quindi utilizzato il parametro Property di Format-List per
specificare due propriet da visualizzare nell'elenco, ovvero "Name" e "BIOS Age". La propriet
"BIOS Age" viene specificata in una tabella hash. Tale tabella include la chiave Label, in cui
specificato il nome della propriet, e la chiave Expression, che include l'espressione per il calcolo
dell'et del BIOS. Nell'espressione viene utilizzato il metodo ConvertToDateTime per convertire
ogni istanza di ReleaseDate in un oggetto DateTime di .NET Framework. Il valore viene quindi
sottratto da quello del cmdlet Get-Date, che, senza parametri, consente di ottenere la data corrente.
Il carattere di apice inverso (`) il carattere di continuazione della riga in Windows PowerShell.
Tenere presente che la variabile ExecutionPolicy deve essere impostata per consentire
l'esecuzione di script non firmati, per cui prima di eseguire lo script (se non gi stato
fatto) lanciare il comando
Set-ExecutionPolicy Unresticted
Importante
Tornando all'esecuzione dello script, per eseguilo sui PC remoti in dominio bisogna avere
le autorizzazioni ad eseguire comandi WMI, per cui l'utenza locale non va bene: bisogna
utilizzare un utenza di dominio con le giuste autorizzazioni.
Per lanciare gli script esterni da PowerShell specificare anche il path, per ragioni di sicurezza ( sufficiente il
path relativo):
.\shutdown.ps1
10
Creazione di un account sulla macchina locale (in parte)
Input
Visualizza PWD in chiaro
Clear-Host
$Password =
[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Mars
hal]::SecureStringToBSTR($Password))
$Password1 =
[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Mars
hal]::SecureStringToBSTR($Password1))
get-childitem env:
[Security.Principal.WindowsIdentity]::GetCurrent().Name
Il primo elemento dell'array, cio quello con indice 0, restituir lo userdomainname, il secondo elemento il
solo username.
In questo caso sei costretto a manipolare la stringa per ottenere ci che desideri.
Tramite la classe environment invece puoi ottenere direttamente le singole variabili. (vedi Visualizzare i valori
di tutte le variabili di ambiente:
[Security.Principal.WindowsIdentity]::GetCurrent().Name.split("\")[0]
[Security.Principal.WindowsIdentity]::GetCurrent().Name.split("\")[1]
11
Listare i file appartenenti ad un certo utente
per recuperare l'owner dei file usare il cmdlet Get-Acl, associandolo, naturalmente, a Get-ChildItem per
recuperare ricorsivamente il contenuto della directory che interessa.
In questo caso parto da C:\temp e filtro il risultato in base all'owner, che nel mio caso ALKAID\Ikmju. Nel
caso te lo chiedessi, il cmdlet Convert-Path serve per ritornare un percorso legato al provider utilizzato (nel
nostro caso il filesystem).
Esempio:
Get-ChildItem -Path z:\ -Recurse |
Get-Acl |
Where-Object { $_.Owner -like 'BUILTIN\Administrators' } |
Convert-Path
Get-Acl
Il cmdlet Get-Acl ottiene oggetti che rappresentano il descrittore di sicurezza di un file o di una risorsa. Tale
descrittore contiene gli elenchi di controllo di accesso (ACL, Access Control List) della risorsa. L'elenco di
controllo di accesso specifica le autorizzazioni di cui devono disporre utenti e gruppi di utenti per accedere
alla risorsa.
12
Analisi dei file di log
Create una lista di tutti i file di log nella cartella di Windows (variabile dambiente Windir); cercate
allinterno dei file di log la parola Error, visualizzate in output il nome del file di log e la linea con lerrore:
>
13