PowerShell: prime configurazioni
Dopo aver installato la RTM di PowerShell in questi giorni stavo iniziando a configurarla.
Appena installata, per default, PowerShell impedisce l'esecuzione di tutti gli script, locali e remoti ed è quindi usabile solo per eseguire i comandi uno per volta da linea di comando.
Questo comportamento è governato dalla variabile ExecutionPolicy che può assumere 4 diversi valori:
- Restriceted: è il default e impedisce l'esecuzione di
script
- AllSigned: gli script devono essere firmati con
Authenticode per essere eseguiti e
l'utente deve confermare l'esecuzione
- RemoteSigned: gli script scaricati ed eseguiti da una
locazione remota devono essere firmati
con Authenticode
- Unrestricted: non ci sono restrizioni all'esecuzione di
script anche se per gli script scaricati
da remoto viene chiesta conferma
prima dell'esecuzione
Per come uso io PowerShell la policy RemoteSigned va benissimo e quindi l'ho impostata con il comando
set-ExecutionPolicy RemoteSigned
Con get-ExecutionPolicy posso sapere la policy attiva.
Posso ora usare usare lo script di impostazione del profilo per configurare l'aspetto e le funzionalità shell.
Lo script di impostazione del profilo è un normale script eseguito all'avvio della shell; il suo nome è Microsoft.PowerShell_profile.ps1 e risiede nel profilo utente nel folder My Documents\WindowsPowerShell (Documents\WindowsPowerShell in Vista).
La prima cosa che ho fatto è stato modificare il prompt di default della shell con uno che mi mostrasse la directory corrente.
Per fare questo si deve definire la funzione prompt e far eseguire a questa il codice necessario a modificare l'aspetto del prompt secondo i propri desideri.
Nel mio caso il ho usato:
function prompt
{
"[" + (get-location).path + "] "
}
Io uso Windows Vista con User Account Control abilitato. Posso quindi lanciare delle shell sia come utente normale sia come utente amministratore.
Mi piace l'idea di impostare automaticamente alcuni aspetti della shell a seconda che sia lanciata da un account normale o da un amministratore.
I due aspetti che voglio cambiare sono il colore dello sfondo e il titolo della finestra. Niente di più semplice, in realtà, tenendo conto che Powershell consente di accedere direttamente a .NET e che mette a disposizione una serie di metodi per la manipolazione della shell attraverso l'oggetto $host.UI.RawUI
Ecco il codice che ho utilizzato:
# Prendo l'identità corrente
$winIdentity = [System.Security.Principal.WindowsIdentity]::GetCurrent()
# Creo un oggetto di tipo "Principal" e ne verifico il ruolo. In base al ruolo modifico colore e testo della finesta della shell
$winPrincipal = new-object 'System.Security.Principal.WindowsPrincipal' $winIdentity
if ($winPrincipal.IsInRole("Administrators") -eq 1)
{
$host.UI.RawUI.WindowTitle = $host.UI.RawUI.WindowTitle + “: AMMINISTRATORE“;
$host.UI.RawUI.set_BackgroundColor("darkred")
$host.UI.RawUI.set_ForegroundColor("white")
clear-host
}
else
{
$host.UI.RawUI.WindowTitle = $host.UI.RawUI.WindowTitle + “: Utente normale“;
$host.UI.RawUI.set_BackgroundColor("black")
$host.UI.RawUI.set_ForegroundColor("green")
clear-host
}
Per ultimo ho definito due funzioni (e due alias) per spostarmi velocemente nella mia directory personale e nella root del disco di sistema:
function go-root
{ Set-Location $env:homedrive"\"
}
function go-home
{ Set-Location $home
}
Per oggi ho lavorato abbastanza con PoweShell...
Sotto trovate l'ultima versione del mio profile e ricordate: se non sapete come fare qualcosa in PowerShell questi comandi sono i vostri amici:
man <comando>
man about_*
get-member
Ciao e buona esplorazione di PowerShell
Giorgio
# Giorgio Malusardi 30/11/2006 - 12/12/2006
#
# Profilo personale per PowerShell
#-----------------------------------------------------------------------
# miei alias
#-----------------------------------------------------------------------
set-alias close bye
set-alias getWMI get-WMIObject
set-alias root go-root
set-alias home go-home
#-----------------------------------------------------------------------
# mie funzioni
#-----------------------------------------------------------------------
function prompt { "[" + (get-location).path + "] " }
function go-root { Set-Location $env:homedrive"\" }
function go-home { Set-Location $home }
function bye { exit }
#-----------------------------------------------------------------------
# Codice di configurazione della shell
#-----------------------------------------------------------------------
# Prendo l'identità corrente
$winIdentity = [System.Security.Principal.WindowsIdentity]::GetCurrent()
# Creo un oggetto di tipo "Principal" e ne verifico il ruolo: in base al ruolo modifico colore e testo della finesta della shell
$winPrincipal = new-object 'System.Security.Principal.WindowsPrincipal' $winIdentity
if ($winPrincipal.IsInRole("Administrators") -eq 1)
{
$host.UI.RawUI.WindowTitle = $host.UI.RawUI.WindowTitle + “: AMMINISTRATORE“;
$host.UI.RawUI.set_BackgroundColor("darkred")
$host.UI.RawUI.set_ForegroundColor("white")
clear-host
}
else
{
$host.UI.RawUI.WindowTitle = $host.UI.RawUI.WindowTitle + “: Utente normale“;
$host.UI.RawUI.set_BackgroundColor("black")
$host.UI.RawUI.set_ForegroundColor("green")
clear-host
}
root