Windows Powershell Automatiser votre administration systme Mardi 8









































- Slides: 41
Windows Powershell : Automatiser votre administration système Mardi 8 février 2011 Arnaud PETITJEAN Consultant et formateur Power. Shell-Scripting. com Jacques BARATHON Consultant et formateur Power. Shell-Scripting. com 2
Agenda • La Communauté Power. Shell francophone • Introduction sur Windows Power. Shell • Les principaux éléments du langage • Administration de l’Active Directory • Les différentes techniques de Remoting • Q&A 3
La Communauté Francophone Entrez dans la communauté francophone • News • Tutoriaux • Scripts • Forum 4
Un forum vivant ! Profitez d’un partage de connaissances avec les plus grands spécialistes français 5
La Galaxie Power. Shell 6
Toute l’industrie informatique s’y met ! 7
Windows Power. Shell • 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 8
Un langage simple et puissant PS> get-process | where {$_. workingset -gt 100 MB} | format-table name, id, handles, path -auto Name Id Handles Path ------- ---OUTLOOK 2488 4708 C: Program FilesMicrosoft OfficeOffice 12OUTLOOK. EXE POWERPNT 1556 826 C: Program FilesMicrosoft OfficeOffice 12POWERPNT. EXE powershell 3656 1844 C: WINDOWSsystem 32Windows. Power. Shellv 1. 0powershell. exe PS> PS> PS> notepad $avant = get-process notepad | stop-process $apres = get-process compare-object $avant $apres Input. Object -----System. Diagnostics. Process (notepad) Side. Indicator ------<= 9
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 Display. Name ------ -----Stopped Ae. Lookup. Svc Application Experience Stopped ALG Application Layer Gateway Service Stopped App. IDSvc Application Identity Stopped Ax. Inst. SV Active. X Installer (Ax. Inst. SV) Stopped BDESVC Bit. Locker Drive Encryption Service Stopped bthserv Bluetooth Support Service Stopped Cert. Prop. Svc Certificate Propagation. . . 10
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 : . . . dwm démarré à 09/21/2008 16: 53: 26 ehmsas démarré à 09/21/2008 16: 53: 36 ehtray démarré à 09/21/2008 16: 53: 33 explorer démarré à 09/22/2008 23: 45: 50. . . Get-Process | foreach { "{0} démarré à {1}" –f $_. Name, $_. Start. Time } 11
Trier: Sort-Object • • Trie les objets transmis par le pipeline Alias : sort PS > get-process | sort-object ID Handles NPM(K) WS(K) VM(M) CPU(s) Id Process. Name ------- ------ -- ----- 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) WS(K) VM(M) CPU(s) Id Process. Name ------- ------ -- ----- 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. . . 12
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 Hotfix. ID, Description, Installed. By Hotfix. ID Description Installed. By -------- ----------KB 958830 Update jbaratho 07Jacques KB 2079403 Security Update NT AUTHORITYSYSTEM. . . PS > dir c: windows | sort Last. Write. Time | select -last 3 Directory: C: windows Mode Last. Write. Time Length Name ---- ------- ----a--- 23/10/2010 16: 28 1530877 Windows. Update. log d---- 23/10/2010 20: 33 Prefetch d---- 23/10/2010 21: 25 Temp 13
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. Service. Process. Service. Controller, S. . . 84 Stopped {System. Service. Process. Service. Controller, 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. . 14
Mesurer: Measure-Object • • Effectue des calculs sur les propriétés des objets transmis Alias : measure PS > get-process | measure-object Working. Set –min –max -average Count : 73 Average : 25718222, 9041096 Sum : Maximum : 199229440 Minimum : 24576 Property : Working. Set PS > get-content c: windowsWindows. Update. log | measure -line -word -char Lines Words Characters ----- 11503 161297 1507871 15
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 Input. Object Side. Indicator ------ ------Hubert => Lea => Andrea <= Pierre <= Alex <= PS > compare $anglais $espagnol -Include. Equal -Exclude. Different Input. Object Side. Indicator ------ ------Ludo == Sophie == 16
Démo La farandole des objets 17
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 18
Démo Les 3 lames de notre Couteau Suisse 19
Active Directory • 2 techniques pour administrer l’Active Directory : • L’API ADSI (classique) • Module Active Directory pour Windows Power. Shell 20
Module Active Directory • Installé de base sur tout DC Windows Server 2008 R 2 • Installable sous Windows 7 (uniquement) via RSAT (Remote Server Administration Tools) • Le module apporte : • • 76 commandelettes Fournisseur Active. Directory (et son lecteur AD: ) • Permet aussi d’administrer Active Directory Lightweight Domain Services (AD LDS) 21
Module Active Directory : ADWS • Dialogue avec les Services Web Active Directory (ADWS) PS> get-service –displayname '*active directory*' Status Name Display. Name ------ -----Running ADWS Services Web Active Directory Running NTDS Services de domaine Active Directory Pensez à ouvrir une exception dans le pare-feu 22
Active Directory Management Gateway Service (ADMGS) • Services Web de Passerelle Active Directory pour les anciennes versions d’Active Directory • Composant logiciel (± 1 Mo) installable sur : • • DC Windows Server 2008 SP 2 DC Windows Server 2003 SP 2 / 2003 R 2 SP 2 • Prérequis : 1 hotfix + Framework. Net 3. 5 SP 1 23
Module Active Directory Comment accéder aux commandelettes ? • Lancer « la console » via le Menu Démarrer/Outils d’administration/Module Active Directory pour Windows Power. Shell • Lancer « la console » via le Menu Démarrer/Outils d’administration/Windows Power. Shell Modules • Lancer la console Power. Shell classique et importer le module Active. Directory 24
Module Active Directory 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'} 25
Module Active Directory 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 Object. GUID : 12 f 9 e 488 -47 f 3 -4154 -b 1 c 9 -c 75 b 9 c 1 bf 7 d 5 Son SID: S-1 -5 -21 -3628732846 -2239576409 -4110719840 -1103 Son SAMAccount. Name: Jean Exemple: Get-ADObject -Identity 12 f 9 e 488 -47 f 3 -4154 -b 1 c 9 -c 75 b 9 c 1 bf 7 d 5 26
Démo Administration Active Directory 27
L’administration à distance • Egalement appelée « Remoting » ( « remote » : distant) • Avant Power. Shell • • Principalement de la consultation WMI à la rescousse ! PSExec pour l’exécution de scripts à distance Et autres bricolages maison… 28
L’administration à distance • Disponible dès Power. Shell 1. 0 • • Paramètre -Computer. Name Exécute la commande sur le(s) serveur(s) distant(s) • Dans Power. Shell 1. 0, une seule commande : PS> get-help * -parameter computername Name ---Get-Wmi. Object 29
L’administration à distance • Paramètre -Computer. Name dans Power. Shell 2. 0 PS> (get-help * -parameter computername). count 35 • Principe étendu à de nombreux types d’objets et d’actions Get-Process Get-Service Set-Service Get-Counter Get-Event. Log Get-Win. Event Get-Hot. Fix Write-Event. Log Clear-Event. Log Test-Connection Stop-Computer Restart-Computer Invoke-Wmi. Method Register-Wmi. Event Set-Wmi. Instance 30
Démo Remoting v 1 31
L’administration à distance • Remoting avancé avec Power. Shell 2. 0 • • • Utilisation du service Win. RM 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 32
Le Remoting v 2 • Pré-requis • • Power. Shell 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 disposition Enable-PSRemoting Start-Job Get-Job Wait-Job Receive-Job Stop-Job Remove-Job Invoke-Command New-PSSession Get-PSSession Remove-PSSession Enter-PSSession 33
Démo Remoting v 2 34
Annonce Disponible sur le stand des éditions ENI 35
MSDN et Tech. Net : l’essentiel des ressources techniques à portée de clic Portail administration et infrastructure pour informaticiens Portail de ressources technique pour développeurs http: //technet. com http: //msdn. com 36
Slides de backup 38
39
Démo Remoting v 1 PS> gwmi win 32_logicaldisk -comp frapp 0028, frapp 0018 -filter "drivetype=3" | select __server, deviceid, size, freespace __SERVER deviceid size freespace -------- ----FRAPP 0028 C: 31459717120 22950543360 FRAPP 0028 D: 332708655104 25402429440 FRAPP 0018 C: 8598138880 1414307840 FRAPP 0018 D: 209898696704 83053187072 FRAPP 0018 F: 423157035008 99024175104 PS> gwmi win 32_logicaldisk -comp frapp 0028, frapp 0018 -filter "drivetype=3" | select __server, deviceid, @{n="Size(GB)"; e={[math]: : round($_. size/1 GB, 2)}}, @{n="Free. Space(GB"; e={[math]: : round($_. freespace/1 GB, 2)}} __SERVER deviceid Size(GB) Free. Space(GB) ---- -------- ------FRAPP 0028 C: 29, 3 21, 37 FRAPP 0028 D: 309, 86 23, 46 FRAPP 0018 C: 8, 01 1, 32 FRAPP 0018 D: 195, 48 77, 35 FRAPP 0018 F: 394, 1 92, 22 PS> gwmi Win 32_ntlogevent -filter "eventidentifier=4624" | select computername, @{n="Time. Written"; e={$_. Convert. To. Date. Time($_. timewritten)}}, @{n="User"; e={$_. insertionstrings[5]}} | where {$_. Time. Written -gt (get-date). Add. Hours(-1)}
Démo Remoting v 2 PS> $demo = new-pssession -comp mce 01, jbaratho 07 PS> $scan = invoke-command -session $demo -scriptblock {dir c: *. mp 3 -rec} –asjob PS> $scan. childjobs PS> $mp 3 = receive-job $scan PS> $mp 3 | sort pscomputername, directory PS> $mp 3. count PS> $mp 3 | measure length –sum |select @{n="Sum(GB)"; e={[math]: : round($_. sum / 1 GB, 2)}} PS> $clean = invoke-command -session $demo -scriptblock {dir c: *. mp 3 –rec | remove-item} –asjob