41

Windows Powershell : Automatiser votre administration système

  • Upload
    minya

  • View
    98

  • Download
    1

Embed Size (px)

DESCRIPTION

Windows Powershell : Automatiser votre administration système. Mardi 8 février 2011. Arnaud PETITJEAN Consultant et formateur PowerShell-Scripting.com. Jacques BARATHON Consultant et formateur PowerShell-Scripting.com. Agenda. La Communauté PowerShell francophone - PowerPoint PPT Presentation

Citation preview

Page 1: Windows  Powershell  : Automatiser votre administration  système
Page 2: Windows  Powershell  : Automatiser votre administration  système

2

Windows Powershell : Automatiser votre administration système

Arnaud PETITJEANConsultant et formateur PowerShell-Scripting.com

Mardi 8 février 2011Jacques BARATHON

Consultant et formateur PowerShell-Scripting.com

Page 3: Windows  Powershell  : Automatiser votre administration  système

3

Agenda

• La Communauté PowerShell francophone• Introduction sur Windows PowerShell• Les principaux éléments du langage• Administration de l’Active Directory• Les différentes techniques de Remoting• Q&A

Page 4: Windows  Powershell  : Automatiser votre administration  système

4

La Communauté Francophone

Entrez dans la communauté francophone

• News

• Tutoriaux

• Scripts

• Forum

Page 5: Windows  Powershell  : Automatiser votre administration  système

5

Un forum vivant !

Profitez d’un partage de connaissances avec les plus grands spécialistes français

Page 6: Windows  Powershell  : Automatiser votre administration  système

6

La Galaxie PowerShell

Page 7: Windows  Powershell  : Automatiser votre administration  système

7

Toute l’industrie informatique s’y met !

Page 8: Windows  Powershell  : Automatiser votre administration  système

8

Windows PowerShell• Interpréteur de commandes

• Jeu de commandes normalisé• Jeu de paramètres normalisé

• Langage de scripts• Concision des scripts

• Comparaison avec VBScript• Sécurisé dès la conception

• Règles d’exécution des scripts• S’appuie sur le Framework .NET 2.0

• Manipulation d’objets• Accès aux classes .NET

• Extensibilité du langage : snap-ins, modules

Page 9: Windows  Powershell  : Automatiser votre administration  système

9

Un langage simple et puissantPS> get-process | where {$_.workingset -gt 100MB} | format-table name, id, handles, path -auto

Name Id Handles Path---- -- ------- ----OUTLOOK 2488 4708 C:\Program Files\Microsoft Office\Office12\OUTLOOK.EXEPOWERPNT 1556 826 C:\Program Files\Microsoft Office\Office12\POWERPNT.EXEpowershell 3656 1844 C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe

PS> notepadPS> $avant = get-processPS> get-process notepad | stop-processPS> $apres = get-processPS> compare-object $avant $apres

InputObject SideIndicator----------- -------------System.Diagnostics.Process (notepad) <=

Page 10: Windows  Powershell  : Automatiser votre administration  système

10

Filtrer: Where-Object• Examine un à un les objets transmis par le pipeline et les compare à

une condition Si la condition est remplie, l’objet est transmis à la suite du

pipeline Si la condition n’est pas remplie, l’objet n’est pas transmis

• Chaque objet examiné est représenté par la variable $_• Alias : where, ?

PS > Get-Service | Where-Object {$_.Status -eq 'Stopped'}

Status Name DisplayName------ ---- -----------Stopped AeLookupSvc Application ExperienceStopped ALG Application Layer Gateway ServiceStopped AppIDSvc Application IdentityStopped AxInstSV ActiveX Installer (AxInstSV)Stopped BDESVC BitLocker Drive Encryption ServiceStopped bthserv Bluetooth Support ServiceStopped CertPropSvc Certificate Propagation...

Page 11: Windows  Powershell  : Automatiser votre administration  système

11

Traiter par lots: Foreach-Object• Exécute une série de commandes pour chaque

objet transmis par le pipeline• Chaque objet transmis est représenté par la

variable $_• Alias : Foreach, %• Syntaxe :

<collection> | Foreach-Object { # bloc d’instructions}

• Exemple : Get-Process | foreach { "{0} démarré à {1}" –f $_.Name, $_.StartTime  }

...dwm démarré à 09/21/2008 16:53:26ehmsas démarré à 09/21/2008 16:53:36ehtray démarré à 09/21/2008 16:53:33explorer démarré à 09/22/2008 23:45:50...

Page 12: Windows  Powershell  : Automatiser votre administration  système

12

Trier: Sort-Object• Trie les objets transmis par le pipeline• Alias : sort

PS > get-process | sort-object ID

Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName------- ------ ----- ----- ----- ------ -- ----------- 0 0 0 24 0 0 Idle 696 0 60 4652 6 4 System 30 1 264 808 4 272 smss...

PS > get-process | sort-object WS –desc

Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName------- ------ ----- ----- ----- ------ -- ----------- 4851 82 117108 194208 598 732,67 2488 OUTLOOK 936 84 157432 132764 420 3 988,20 1556 POWERPNT 980 20 110324 129768 289 113,32 3656 powershell 1092 44 46240 103120 339 1 154,10 2468 WINWORD...

Page 13: Windows  Powershell  : Automatiser votre administration  système

13

Sélectionner: Select-Object• Sélectionne certaines propriétés des objets transmis par le pipeline, ou

certains objets parmi une série• Alias : select

PS > Get-Hotfix | select-object HotfixID, Description, InstalledBy

HotfixID Description InstalledBy-------- ----------- -----------KB958830 Update jbaratho07\JacquesKB2079403 Security Update NT AUTHORITY\SYSTEM...

PS > dir c:\windows | sort LastWriteTime | select -last 3

Directory: C:\windows

Mode LastWriteTime Length Name---- ------------- ------ -----a--- 23/10/2010 16:28 1530877 WindowsUpdate.logd---- 23/10/2010 20:33 Prefetchd---- 23/10/2010 21:25 Temp

Page 14: Windows  Powershell  : Automatiser votre administration  système

14

Regrouper: Group-Object• Regroupe des objets transmis par le pipeline selon une (des) propriété(s)

commune(s)• Alias : group

PS > get-service | group-object Status

Count Name Group----- ---- ----- 75 Running {System.ServiceProcess.ServiceController, S... 84 Stopped {System.ServiceProcess.ServiceController, S...

PS > get-process | group Company -noelement | sort Count -desc

Count Name----- ---- 48 Microsoft Corporation 3 Microsoft Corp. 3 2 Synaptics Incorporated 2 AMD 2 IDT, Inc....

Page 15: Windows  Powershell  : Automatiser votre administration  système

15

Mesurer: Measure-Object• Effectue des calculs sur les propriétés des objets transmis • Alias : measure

PS > get-process | measure-object WorkingSet –min –max -average

Count : 73Average : 25718222,9041096Sum :Maximum : 199229440Minimum : 24576Property : WorkingSet

PS > get-content c:\windows\WindowsUpdate.log | measure -line -word -char

Lines Words Characters ----- ----- ---------- 11503 161297 1507871

Page 16: Windows  Powershell  : Automatiser votre administration  système

16

Comparer: Compare-Object• Compare deux objets ou deux séries d’objets• Alias : compare

PS > $anglais = ('Sophie','Ludo','Andrea','Pierre','Alex')PS > $espagnol = ('Ludo','Hubert','Lea','Sophie')PS > compare-object $anglais $espagnol

InputObject SideIndicator----------- -------------Hubert =>Lea =>Andrea <=Pierre <=Alex <=

PS > compare $anglais $espagnol -IncludeEqual -ExcludeDifferent

InputObject SideIndicator----------- -------------Ludo ==Sophie ==

Page 17: Windows  Powershell  : Automatiser votre administration  système

17

DémoLa farandole des objets

Page 18: Windows  Powershell  : Automatiser votre administration  système

18

Le Couteau Suisse• Get-Command

• Fournit des informations sur les commandes disponibles

• Alias : gcm

• Get-Help• Fournit de l’aide sur les commandes (scripts y

compris)

• Get-Member• Retourne les méthodes et les propriétés d’un objet• Alias : gm

Page 19: Windows  Powershell  : Automatiser votre administration  système

19

DémoLes 3 lames de notre Couteau Suisse

Page 20: Windows  Powershell  : Automatiser votre administration  système

20

Active Directory• 2 techniques pour administrer l’Active Directory :

• L’API ADSI (classique)

• Module Active Directory pour Windows PowerShell

Page 21: Windows  Powershell  : Automatiser votre administration  système

21

• Installé de base sur tout DC Windows Server 2008 R2• Installable sous Windows 7 (uniquement) via RSAT

(Remote Server Administration Tools)

• Le module apporte :• 76 commandelettes• Fournisseur ActiveDirectory (et son lecteur AD:)

• Permet aussi d’administrer Active Directory Lightweight Domain Services (AD LDS)

Module Active Directory

Page 22: Windows  Powershell  : Automatiser votre administration  système

22

• Dialogue avec les Services Web Active Directory (ADWS)

PS> get-service –displayname '*active directory*'

Status Name DisplayName------ ---- -----------Running ADWS Services Web Active DirectoryRunning NTDS Services de domaine Active Directory

Module Active Directory : ADWS

Pensez à ouvrir une exception dans le pare-feu

Page 23: Windows  Powershell  : Automatiser votre administration  système

23

• Services Web de Passerelle Active Directory pour les anciennes versions d’Active Directory

• Composant logiciel (±1 Mo) installable sur :

• DC Windows Server 2008 SP2• DC Windows Server 2003 SP 2 / 2003 R2 SP2

• Prérequis : 1 hotfix + Framework .Net 3.5 SP 1

Active Directory Management Gateway Service (ADMGS)

Page 24: Windows  Powershell  : Automatiser votre administration  système

24

Comment accéder aux commandelettes ?

• Lancer « la console » via le Menu Démarrer/Outils d’administration/Module Active Directory pour Windows PowerShell

• Lancer « la console » via le Menu Démarrer/Outils d’administration/Windows PowerShell Modules

• Lancer la console PowerShell classique et importer le module ActiveDirectory

Module Active Directory

Page 25: Windows  Powershell  : Automatiser votre administration  système

25

Recherche d’objets

• Plusieurs façons de faire :1. Recherche basée sur un filtre au format LDAP

(paramètre -LDAPFilter)Exemple: Get-ADObject -LDAPFilter '(name=admin*)'

2. Recherche basée sur un filtre générique(paramètre -Filter)Exemple: Get-ADObject -filter {objectclass -eq 'computer'}

Module Active Directory

Page 26: Windows  Powershell  : Automatiser votre administration  système

26

Accès direct à un objet

• On peut « adresser » un objet dès lors que l’on connait :• Son DN : CN=Jean,CN=powershell,DC=fr• Son ObjectGUID : 12f9e488-47f3-4154-b1c9-c75b9c1bf7d5• Son SID: S-1-5-21-3628732846-2239576409-4110719840-1103• Son SAMAccountName: Jean

Module Active Directory

Exemple: Get-ADObject -Identity 12f9e488-47f3-4154-b1c9-c75b9c1bf7d5

Page 27: Windows  Powershell  : Automatiser votre administration  système

27

DémoAdministration Active Directory

Page 28: Windows  Powershell  : Automatiser votre administration  système

28

L’administration à distance• Egalement appelée « Remoting » (« remote » :

distant)

• Avant PowerShell

• Principalement de la consultation• WMI à la rescousse !• PSExec pour l’exécution de scripts à distance• Et autres bricolages maison…

Page 29: Windows  Powershell  : Automatiser votre administration  système

29

L’administration à distance• Disponible dès PowerShell 1.0

• Paramètre -ComputerName• Exécute la commande sur le(s) serveur(s) distant(s)

• Dans PowerShell 1.0, une seule commande :

PS> get-help * -parameter computername Name----Get-WmiObject

Page 30: Windows  Powershell  : Automatiser votre administration  système

30

L’administration à distance• Paramètre -ComputerName dans PowerShell 2.0

PS> (get-help * -parameter computername).count35 

• Principe étendu à de nombreux types d’objets et d’actionsGet-ProcessGet-ServiceSet-ServiceGet-CounterGet-EventLogGet-WinEventGet-HotFix

Write-EventLogClear-EventLogTest-ConnectionStop-ComputerRestart-ComputerInvoke-WmiMethodRegister-WmiEventSet-WmiInstance

Page 31: Windows  Powershell  : Automatiser votre administration  système

31

DémoRemoting v1

Page 32: Windows  Powershell  : Automatiser votre administration  système

32

L’administration à distance• Remoting avancé avec PowerShell 2.0

• Utilisation du service WinRM• Sessions « ad-hoc » (à la demande) ou

persistantes• Tâches en arrière-plan (« jobs »)

• Délègue l’entière exécution au serveur distant• S’intègre avec les règles de sécurité des pare-

feu

Page 33: Windows  Powershell  : Automatiser votre administration  système

33

Le Remoting v2• Pré-requis

• PowerShell 2.0 des deux côtés• Activation explicite du Remoting sur le poste

distant• Configuration de la sécurité (hors domaine)• Configurable par GPO

• Les nouvelles commandes à notre dispositionEnable-PSRemoting

Invoke-Command

New-PSSessionGet-PSSessionRemove-PSSessionEnter-PSSession

Start-JobGet-JobWait-JobReceive-JobStop-JobRemove-Job

Page 34: Windows  Powershell  : Automatiser votre administration  système

34

DémoRemoting v2

Page 35: Windows  Powershell  : Automatiser votre administration  système

35

Annonce

Disponible sur le stand des éditions

ENI

Page 36: Windows  Powershell  : Automatiser votre administration  système

36

MSDN et TechNet : l’essentiel des ressources techniques à portée de clic

http://technet.com http://msdn.com

Portail administration et infrastructure pour informaticiens

Portail de ressources technique pour développeurs

Page 37: Windows  Powershell  : Automatiser votre administration  système
Page 38: Windows  Powershell  : Automatiser votre administration  système

38

Slides de backup

Page 39: Windows  Powershell  : Automatiser votre administration  système

39

Page 40: Windows  Powershell  : Automatiser votre administration  système

Démo Remoting v1PS> gwmi win32_logicaldisk -comp frapp0028, frapp0018 -filter "drivetype=3" | select

__server, deviceid, size, freespace __SERVER deviceid size freespace-------- -------- ---- ---------FRAPP0028 C: 31459717120 22950543360FRAPP0028 D: 332708655104 25402429440FRAPP0018 C: 8598138880 1414307840FRAPP0018 D: 209898696704 83053187072FRAPP0018 F: 423157035008 99024175104 PS> gwmi win32_logicaldisk -comp frapp0028, frapp0018 -filter "drivetype=3" | select

__server, deviceid, @{n="Size(GB)"; e={[math]::round($_.size/1GB, 2)}}, @{n="FreeSpace(GB"; e={[math]::round($_.freespace/1GB, 2)}}

 __SERVER deviceid Size(GB) FreeSpace(GB)-------- -------- -------- ------------FRAPP0028 C: 29,3 21,37FRAPP0028 D: 309,86 23,46FRAPP0018 C: 8,01 1,32FRAPP0018 D: 195,48 77,35FRAPP0018 F: 394,1 92,22

PS> gwmi Win32_ntlogevent -filter "eventidentifier=4624" | select computername, @{n="TimeWritten"; e={$_.ConvertToDateTime($_.timewritten)}}, @{n="User"; e={$_.insertionstrings[5]}} | where {$_.TimeWritten -gt (get-date).AddHours(-1)}

Page 41: Windows  Powershell  : Automatiser votre administration  système

Démo Remoting v2PS> $demo = new-pssession -comp mce01,jbaratho07PS> $scan = invoke-command -session $demo -scriptblock {dir

c:\ *.mp3 -rec} –asjobPS> $scan.childjobsPS> $mp3 = receive-job $scanPS> $mp3 | sort pscomputername, directoryPS> $mp3.countPS> $mp3 | measure length –sum |select @{n="Sum(GB)";

e={[math]::round($_.sum / 1GB, 2)}}PS> $clean = invoke-command -session $demo -scriptblock {dir

c:\ *.mp3 –rec | remove-item} –asjob