Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
970 connectés 

  FORUM HardWare.fr
  Systèmes & Réseaux Pro
  Management du SI

  [Scripting] Powershell

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Scripting] Powershell

n°87891
Zaib3k
Posté le 25-11-2011 à 09:02:19  profilanswer
 

Powershell, enfin un shell pour Windows.
 
Il n'y a pas encore de topic de référence sur ce produit, il faut corriger ce manque.
 
Je débute avec cet outil et je trouve que l'on apprends très vite, sur la base de cas pratiques et de recherches Google. L'idée de ce topic serait donc de partager notre expérience, nos recherches et nos trouvailles concernant Powershell (aka PoSh).
 
N'hésitez pas, participez !
Je pense que ce script à plus sa place ici que dans la cat Prog, mais je ne trouve pas de sous-cat appropriée. Modo, éclairez-moi :o
 
Quelques idées de sujets à aborder :

  • Quel éditeur utilisez-vous ?
  • Quelles sont les bonnes pratiques à appliquer ?
  • Comment gérer les erreurs ? try/catch/finally vs. throw/trap vs. ErrorAction/$? vs. $Error vs. ...
  • set-strictmode or Not ?
  • et VBS, il est mort ?
  • Faut-il signer les scripts ?

mood
Publicité
Posté le 25-11-2011 à 09:02:19  profilanswer
 

n°87892
Zaib3k
Posté le 25-11-2011 à 09:02:51  profilanswer
 

Je commence par mon petit cas perso :
Mon environnement : Win 7 + module AD + PowerShell ISE sur mon poste et ADMGS sur certains DC.
Mes principaux besoins : intercation avec un domaine Active Directory plutôt vaste (bcp d'utilisateurs, de serveur, de sites, ...).
Ma pratique du scripting Posh : Quick & Dirty assez souvent, basique et sans IHM à chaque fois, sans composants tiers.
 
Script à partager/critiquer :
 
Contexte : Lire les dernières lignes des fichiers de logs, même volumineux. A la manière de tail sous Unix. Le script a été élboré sur la base de scripts trouvés sur le net avec quelques adaptations. Je souhaitais pouvoir utiliser le pipe et plusieurs fichiers. La dernière modification apportée concernant l'accès au fichier : je devais pouvoir lire des fichiers lockés.
 

Code :
  1. function Get-tail {
  2. param(
  3.    [Parameter(Mandatory=$true,
  4.               Position=0,
  5.               ParameterSetName="Path",
  6.               ValueFromPipeline=$true,
  7.               ValueFromPipelineByPropertyName=$true)]
  8.    [ValidateNotNullOrEmpty()]
  9.    [string[]]
  10.    $Path,
  11.   
  12.    [Parameter()]
  13.    [ValidateRange(0, 2GB)]
  14.    [int]
  15.   $Last = 10,
  16.   
  17.    [Parameter()]
  18.    [int]$CharsPerLine = 500
  19. )
  20. $files = @(Get-ChildItem $path);
  21.    foreach ($file in $files)
  22.    {
  23.        if (-not $file) {return}
  24.        $fs = [System.IO.File]::Open($file,[System.IO.FileMode]::Open, [System.IO.FileAccess]::Read, [System.IO.FileShare]::ReadWrite)
  25.        $BytesToRead = $charsPerLine * $last
  26.       
  27.        if ($BytesToRead -ge $fs.length) {$BytesToRead = $fs.length}
  28.        $fs.Position = $fs.Length - $BytesToRead
  29.        $Stream = New-Object System.IO.StreamReader($fs)
  30.        $Stream.readtoend() -split "`n" -replace "\s+$","" | Select-Object -last $Last
  31.       
  32.        $Stream.Close()
  33.        $fs.Close()
  34.       
  35.    }
  36. }

n°87893
Zaib3k
Posté le 25-11-2011 à 09:03:00  profilanswer
 

résérvé

n°87932
nebulios
Posté le 25-11-2011 à 17:01:01  profilanswer
 

S'il s'agit de récupérer les logs Windows on peut le faire très simplement avec Get-WinEvent.
 
Sinon je l'utilisa principalement avec Active Directory et Exchange et c'est un vrai plaisir d'avoir un CLI de ce niveau (bon dsquery reste très correct). Malheureusement pour l'AD la version actuelle est basique et pour des manips plus pointues (Délégation, PKI...) il faut passer par les cmdlets Quest (mais ils sont gratuits). La version 3 devrait compenser ce manque.
 
ET pour le VBS, il n'est plus supporté par MS, comme les autres outils de scripting d'ailleurs. MS est en train de centraliser les utilitaires d'administration et de scripting en un seul.
 

n°87933
Zaib3k
Posté le 25-11-2011 à 17:04:07  profilanswer
 

Mon besoin était sur des fichiers de log tiers ou des fichiers text comme le netlogon.log. Vu les volumes, un simple get-content est trop gourmand.
 
Pour les délégations, à quoi penses-tu ? Les manips d'ACL sont déjà possible, peu importe l'objet.

n°87934
nebulios
Posté le 25-11-2011 à 17:33:26  profilanswer
 

Oui les manip d'ACL sur des objets AD, par exemple spécifier que le groupe helpdesk à le droit de reseter les mots de passe sur l'OU utilisateurs.
J'avais regardé du côté de Get/Set-ACL mais il me semblait plus adapté au ACL de fichiers/répertoires.

n°87936
Zaib3k
Posté le 25-11-2011 à 19:26:34  profilanswer
 

je m'en suis servi pour manipuler les droits sur les GPOs récemment. C'est super puissant :D

n°87937
nebulios
Posté le 25-11-2011 à 19:43:45  profilanswer
 

Effectivement, j'aurai jamais cru pouvoir réaliser une délégation complète en quelques lignes.
 
Les précédentes avaient été réalisées en VBS...je crois que je me serai mis une balle si j'aurai du scripter çà.
 
Le gros problème étant que la CLI continue de faire peur à beaucoup de gens...

n°87938
Zaib3k
Posté le 25-11-2011 à 19:49:37  profilanswer
 

Plus généralement, dans l'univers du système, j'ai l'impression que le scripting est peu présent. C'est pourtant un outil précieux.

n°87942
Je@nb
Modérateur
Kindly give dime
Posté le 25-11-2011 à 20:52:37  profilanswer
 

Chez nous la plupart des projets qu'on délivre c'est script only.
 
Ca permet de passer de docs d'install/config de 300 pages à une trentaine/quarantaine en évitant les mauvaises manips. En plus c'est répétable facilement (juste des fichiers xml la plupart du temps pour entrer les paramètres du script).
 
Déploiement d'exchange, lync, hyper-v, scvmm, sccm, mdt, ad and co.

mood
Publicité
Posté le 25-11-2011 à 20:52:37  profilanswer
 

n°87959
nebulios
Posté le 26-11-2011 à 17:42:51  profilanswer
 

Pour nous ce sont les clients qui nous imposent ceci, plus facile à recetter notamment.

n°88018
boobaka
Posté le 28-11-2011 à 17:21:38  profilanswer
 

Je pose mon drapeau .. Je ne vais pas tarder à mettre les mains dans le cambouis .
 


---------------
www.google.fr  
n°88176
Je@nb
Modérateur
Kindly give dime
Posté le 02-12-2011 à 17:24:14  profilanswer
 

Moi je vous propose de lancer ça avec Powershell :

Code :
  1. iex (New-Object Net.WebClient).DownloadString("http://bit.ly/e0Mw9w" )

n°88178
Zaib3k
Posté le 02-12-2011 à 17:37:40  profilanswer
 

je me méfie :o Le script que ça lance à un joli truc planqué :o
..
Plus de la musique ...


Message édité par Je@nb le 02-12-2011 à 17:45:18
n°88179
Zaib3k
Posté le 02-12-2011 à 17:39:35  profilanswer
 

C'est con ! :D

 

et faut être connaisseur, sinon c'est pas drôle.


Message édité par Zaib3k le 02-12-2011 à 17:44:26
n°88181
Je@nb
Modérateur
Kindly give dime
Posté le 02-12-2011 à 17:45:49  profilanswer
 

C'est du base64 hein, tu le décodes avec les 3 premières lignes.
 
Mais ouais c'est drôle :p

n°88186
nebulios
Posté le 02-12-2011 à 20:21:44  profilanswer
 

Enorme !
 
Merci  :lol:

n°88603
Zaib3k
Posté le 13-12-2011 à 14:11:25  profilanswer
 

Avez-vous des idées pour manipuler DFSN ? dfsutil.exe :/ ?

n°89546
Zaib3k
Posté le 05-01-2012 à 07:40:32  profilanswer
 

Pour DFSN, je n'ai rien troué d'autre que dfsutil.
 
Je cherche désormais un exemple de script powershell pour parcourir une boite Lotus Notes. J'ai déjà des éléments mais j'ai du mal à manipuler les documents pour récupérer les champs.
 
Des pistes ?

n°89721
Zaib3k
Posté le 09-01-2012 à 11:45:12  profilanswer
 

J'ai utilisé ça :o
 

Code :
  1. # Create LN Object
  2. $DomSession = New-Object -ComObject Lotus.NotesSession
  3. # Initialize LN Object
  4. # You'll be asking for LN password to your id
  5. $DomSession.Initialize()
  6. # Connect to Server, select db and display the name
  7. $DomDatabase = $DomSession.GetDatabase("leserveur","labase.nsf" )
  8. Write-Host "Database open : " $DomDatabase.Title
  9. # Open specific View (Forum\Principale (forum))
  10. $DomView = $DomDatabase.GetView('($All)')
  11. Write-Host "View read : " $DomView.Name
  12. # Show number of documents
  13. $DomNumOfDocs = $DomView.AllEntries.Count
  14. Write-Host "Num of Docs : " $DomNumOfDocs
  15. # Get First Document in the View
  16. $DomDoc = $DomView.GetFirstDocument()
  17. # parcours
  18. while ($DomDoc -ne $null) {
  19.     $from = $DomDoc.ColumnValues[4]
  20.     $date = $DomDoc.ColumnValues[8].toshortdatestring()
  21.     "$from,$date"  | out-file ".\export.csv" -Append
  22.     $DomDoc = $DomView.GetNextDocument($DomDoc)
  23. }


 
Sinon, je cherche une info : Quelle est la position officielle de MS sur VBScript ? Je croyais qu'il était abandonné mais je n’arrive pas à trouver de communication "officielle".


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Systèmes & Réseaux Pro
  Management du SI

  [Scripting] Powershell

 

Sujets relatifs
[RESOLU] Script Powershell - Récupération des Event Logs - WLAN[Résolu] Problème Powershell
Pb exchange - powershellScript powershell pour de la sauvegarde
powershell Exchange 2007 : recupérer la liste de ses BAL triée par UO[Exchange 2007] Modifier droits calendrier via Powershell
Plus de sujets relatifs à : [Scripting] Powershell


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR