PowerShell
17 mai 2010
Windows PowerShell 2.0
Construit folosind .NET Common Language Runtime
(CLR) si .NET Framework
Windows PowerShell 2.0
Preinstalat pe Windows 7, Windows Server 2008 R2
Microsoft .NET Framework 2.0
Windows PowerShell Integrated Scripting Environment
(ISE)
Preinstalat pe Windows 7
Microsoft .NET Framework 3.5
2 MSSR
Windows PowerShell
Command line Inlocuitor pentru [Link]
Orientat pe obiecte
Scripting Language
Comenzi verb-noun,
demunite cmdlets
Automation Engine
Include multe alias-uri din
Linux/Unix
3 MSSR
Windows PowerShell
Command line Orice set de comenzi
poate devini un script
Scripting Language Scripturile nu ruleaza
implicit
Automation Engine PowerShell Integrated
Scripting Environment
4 MSSR
Windows PowerShell
Command line Poate fi integrat cu
aplicatiile .NET
Scripting Language Folosit pentru
administrarea remote a
calculatoarelor
Automation Engine
5 MSSR
Cmdlets
Denumirea comenzilor din PowerShell
Scrise in C#.NET
Parametri prefixati de semnul -
Ofera suport pentru obiecte
COM (Component Object Model)
comunicare intre diverse componente software
WMI (Windows Management Instrumentation)
interfata cu sistemul de operare
.NET
obiecte din .NET Framework
obiecte create de utilizatori
~240 de comenzi in Windows 7
PS C:\> Get-Command | where {$_.CommandType -eq "Cmdlet"}
| measure
6 MSSR
Comenzi de bază
get-command informatii de baza despre
un cmdlet
get-help
datele extrase direct din
get-member codul sursa
get-psdrive exemplu
PS C:\> get-command ls
CommandType Name Definition
----------- ---- ----------
Alias ls Get-ChildItem
7 MSSR
Comenzi de bază
get-command afiseaza informatii despre o
comanda
get-help alias-uri help si man
get-member help - full
afiseaza informatii detaliate,
inclusiv exemple
get-psdrive
help – examples
afiseaza doar exemple
help –online
deschide resursele online
disponibile
8 MSSR
Comenzi de bază
get-command afiseaza proprietatile si
metodele unui obiect
get-help
Exemplu
C:\PS>get-service | get-
get-member
member
get-psdrive Name MemberType Definition
---- ---------- ----------
Close Method [Link]
Close()
CanStop Property [Link]
CanStop {get;}
9 MSSR
Comenzi de bază
get-command afiseaza resursele
disponibile pentru
get-help sesiunea curenta
get-member dispozitivele logice,
inclusiv cele mapate din
retea
get-psdrive
accesarea registrilor
dispozitivele create prin
comanda new-psdrive
10 MSSR
Operatii asupra listelor de obiecte
Commanda Actiune
Compare Compara doua obiecte
Group Separarea unui set de obiecte in grupuri
Measure Masoara o anumita proprietate a unui obiect
Select Selectia unui grup de proprietati
Sort Ordonarea obiectelor
Tee Duplicarea rezultatului
Where Selectarea unui subset de obiecte
11 MSSR
Alias-uri
Exista alias-uri create pentru utilizatori Linux/CMD
PS C:\Users\Mihai> alias | where {$_.Definition -eq "Get-ChildItem"}
CommandType Name Definition
----------- ---- ----------
Alias dir Get-ChildItem
Alias gci Get-ChildItem
Alias ls Get-ChildItem
Se pot crea noi alias-uri folosind comanda new-alias
C:\PS>new-alias list get-childitem
Functi pentru aliasuri comenzi cu parametri
function as {help *about_alias*}
Posibilitatea de export/import intre calculatoare
12 MSSR
Pipeline si variabile
Definirea se face folosind $
$current_process = Get-Process
Afisarea unei variabile se poate face folosind comanda
echo
Trimiterea de obiecte intre doua comenzi
Variabila $_ reprezinta obiectul curent
Format-list
folosit pentru afisarea proprietatilor
13 MSSR
If, elseif si else
Sintaxa
if (condition) {command(s) to execute}
elseif (condition2){command(s) to execute}
else{command(s) to execute}
Parametrii
Operator Descriere
-eq Equals
-match Match regular expression -> $matches
-ne Not Equal
-notmatch Does not match
-gt -ge Greater than/ Greater than or equal to
-lt -le Less than/ Less than or equal to
Exemplu
$current_process = Get-Process
if ($current_process.count -lt 50)
{ Write-Host ”Low server load"; }
14 MSSR
Folosirea unui loop
Sintaxa
while (condition) {command(s) to execute}
do {command(s) to execute} while (condition)
do {command(s) to execute} until (condition)
for (initializer; exit condtiont; step action)
{comand(s) to execute}
foreach ( $item in $collection) {command(s) to execute}
Exemple
$var = 1; while ($var -le 50) {$var; $var += 1}
$var = 2; for ($var = 1; $var -le 50; $i++) {$var}
Accesarea manualului se poate face folosind help
help about_do, help about_for, etc.
15 MSSR
WMI support
Windows Management Instrumentation
baza de date cu informatii pentru sistemele windows
serviciu wmi folosit pentru interogarea bazei de date
namespace-ul folosit este “root\CIMV2”
Get-WmiObject -List -Namespace “root\CIMV2″
pentru listarea proprietatilor unei clase folosim
Get-WmiObject -Class “win32_Processor” | Get-Member
CIMV2 – Common Information Model Version 2
16 MSSR
Folosirea directa a resurselor .NET
spatiul .NET este ierarhizat folosind namespace
accesarea se face folosind []
Exemplu
[[Link]]::Clear()
[[Link]]::Log10(100)
$p = [[Link]]::Start("[Link]")
$p | Get-Member
[System.Int32]::Parse("254");
Link-uri utile biblioteca .NET
[Link]
17 MSSR
Scripturi powershell
Windows PowerShell Integrated Scripting Environment
(ISE)
Extensie .ps1
Nu pot fi rulate extern
Necesita full-path
Controlate prin Execution-Policy sau Group Policy
Set-ExecutionPolicy
Nivele de securitate pentru scripturi
Restricted (implicit)
AllSigned
RemoteSigned
Unrestricted (nerecomandat)
18 MSSR
Exemplu script
$NICs = Get-WMIObject Win32_NetworkAdapterConfiguration
| where{$_.IPEnabled -eq “TRUE”}
$i = 1
Foreach($NIC in $NICs)
{
$[Link](”192.168.”+$i+”.42″, “[Link]″)
$[Link](”192.168.”+$i+”.1″)
$DNSServers = “[Link]″,”[Link]″
$[Link]($DNSServers)
$[Link](”TRUE”)
$[Link](”[Link]″, “[Link]″)
$i ++
}
19 MSSR
Background jobs
Start-job
start-job -scriptblock {get-process} -name MyJob
Get-job
$j = get-job -name MyJob
Receive-job
receive-job -job $j
Stop-job
stop-job MyJob
Remove-job
remove-job MyJob
20 MSSR
Permisiuni pentru fisiere
Listarea permisiunilor existente
[enum]::GetNames([[Link]
hts])
Setarea permisiunilor in patru pasi :
Descriptorul curent de securitate
$SD = get-acl c:\2k8\Powershell2\[Link]
Construirea unui ACE (Access Control Entities)
$rule = new-object
[Link](“guest”,”FullContr
ol”, “Allow”)
Adaugarea ACE la DACL
$[Link]($Rule)
Setarea noului nivel de permisuni
Set-Acl c:\2k8\Powershell2\[Link] $SD
21 MSSR
Accesarea registrilor
Accesarea unui anumit set de registri
Set-location HKCU:
Afisarea continutului
Get-ChildItem
Afisarea proprietatilor
$path=“HKLM:\Software\Microsoft\Windows NT\CurrentVersion”
$key = Get-ItemProperty $path
$[Link]
Setarea unor noi proprietati
Set-ItemProperty -$path –name “PSinfo” –type “String” –value
“Razvan was here”
22 MSSR
Interesting scripting
Crearea unui fisier de 1GB
$path = “$env:temp\[Link]“;
$file = [[Link]]::Create($path);
$[Link](1gb);
$[Link]();
Get-Item $path;
Ping catre toate calculatoarele din retea
1..254 | ForEach-Object -Process { Get-WmiObject
Win32_PingStatus -Filter ("Address='172.16.1." + $_ +"'") } |
Select-Object -Property Address,ResponseTime,StatusCode
23 MSSR