PROJET AUTOBLOG


IT-Connect

Site original : IT-Connect

⇐ retour index

Powershell pour les débutants (4ème partie)

jeudi 29 janvier 2015 à 10:16

I. Présentation

Pour faire suite et achever cette introduction à Powershell, je vous propose de découvrir la gestion des erreurs sous Powershell. Un vaste programme, mais là encore, je souhaite vous amener à l’essentiel. Et pour conclure, histoire de se détendre un peu, je vous parlerais de la gestion des couleurs sous Powershell.

Pour ceux qui souhaitent consulter les autres parties :

II. Précision sur les canaux ou flux (stream) d’une commande

Bien que cette précision soit quelque peu “annexe” au traitement des erreurs, il me semble que sa compréhension est utile ne serait-ce que pour intercepter les bonnes informations.

ps41

Les flux d’une commande peuvent être redirigés ou fusionnés à votre convenance. Pour cela, il suffit d’utiliser le caractère “>” pour la redirection avec ou sans l’esperluette “&” pour une fusion :

> Redirection vers un fichier (création/Ecrasement)
>> Redirection vers un fichier (mode ajout)
&> Fusion de flux
*> Redirige tous les flux (vers un fichier par exemple)

– Exemples :

3> Redirige les avertissements vers un fichier
3>&1 Fusionne les avertissements avec la sortie standard

Powershell propose plusieurs applets de commande, utilisant le verbe “write-*” destinées à l’écriture de données sur les différents flux.

Exemple de fonction de test d’envoi d’un message vers les différents canaux :

Function Write-Messages
{
    [CmdletBinding()]			
    param($Message = "Message de test")   
    Write-Host "Canal [Host] $message"			
    Write-Output "Canal 1 [Output] $Message"	
    Write-Error " Canal 2 [Error] $Message"
    Write-Verbose "Canal 4 [Verbose] $Message"
    Write-Warning "Canal 3 [Warning] $Message"
    Write-Debug "Canal 5 [Debug] $Message"
}

Write-Messages -Verbose -Debug

Bien sûr, si vous interrogez les applets de commande utilisant le verbe “write“, (“gcm -verb write”), vous obtiendrez un périmètre sensiblement annexe aux flux, tel que “write-host“, “write-eventlog“, ou “write-progress“.

Vers un flux donné Préfixe de message Couleurs par défaut (Fore / Back)
Write-Host DarkYellow / DarkMagenta
Write-Output
Write-Error Red / Black
Write-Warning AVERTISSEMENT : Yellow / Black
Write-Verbose COMMENTAIRES : Yellow / Black
Write-Debug DÉBOGUER : Yellow / Black

 

Note : Reportez-vous à la partie sur la gestion des couleurs de cet article si vous souhaitez modifier les valeurs par défaut lors de l’affichage de ces messages particuliers.

Exemples de redirection :

– Par commande :

Get-Process none 2> Errors.txt

– Pour un script :

.\MyScript.ps1 2>&1 | Tee-Object -filePath c:\results.txt

III. La gestion (basique) des erreurs

A. Les variables

Avant de parler des instructions spécifiques aux traitements des erreurs, il convient de présenter les variables dédiés à ces cas particuliers.

1 – “$ErrorActionPreference”

La première variable à connaitre est “$ErrorActionPreference” qui définit le comportement global de Powershell lorsqu’il rencontre une erreur. Par défaut, la valeur est positionnée sur “Continue” – Autrement dit, en cas d’erreur, Powershell renvoie l’information sur le canal d’erreur (et dans un objet dédié que j’évoque juste après) et poursuit le reste du code. (Ce qui correspond à la directive “on error resume next” en vbs.).

Les valeurs possibles pour “$ErrorActionPreference” sont :

• ‘Continue’ (default)
• ‘stop’
• ‘Inquire’
• ‘SilentlyContinue’

Si vous intégrez un traitement d’erreur dans votre code, (genre, trap, ou try/catch), je vous conseille de positionner la valeur sur ‘stop’ afin que l’erreur devienne “bloquante”. Il est en effet fort désagréable de laisser passer une erreur non bloquante qui pourrait avoir des conséquences ultérieures.

2 – “$?”

Cette variable “$?” d’état binaire (booléenne) prend la valeur $false si la dernière commande a retourné une erreur, $true s’il n’y a pas eu d’erreur.

3 – “$Error”

Cet objet dédié, nommé “$Error“, recense toutes les erreurs qui sont survenues précédemment (Vous vous souvenez, le fameux canal 2). Attention, c’est ce que j’appellerais une sorte de pile FIFO, (First In First Out). C’est-à-dire que l’élément [0] correspond à la dernière erreur retournée.

Vous pouvez l’afficher ainsi :

$Error[0]

Pour vider toutes les erreurs :

$Error.clear()

Mais cet objet est plus complexe et riche qu’il n’y parait. Pour faire court, vous pouvez afficher uniquement le message de l’erreur (à l’instar de “err.description” en vbs) :

$Error.Exception.Message

Information provenant du type [System.Management.Automation.ErrorRecord] mais vous pouvez obtenir bien d’autres éléments sur son origine, comme par exemple :

$Error.CategoryInfo.Reason

Dans les grandes lignes, vous trouverez des informations (à consigner dans un journal par exemple) sous :

ErrorRecord Informations
$error[0].Exception Contient l’instance de l’erreur
$error[0].Exception |gm Détails sur les membres disponibles d’une erreur
$error[0].InvocationInfo Détails sur le “contexte” de l’erreur (dépend du type d’erreur et n’est pas toujours disponible)

4 – “$LASTEXITCODE”

Cette variable correspond approximativement au célèbre “ErrorLevel” utilisé en mode batch, et qui retourne la valeur “0” en l’absence d’erreur. – Faites toutefois attention à la portée et au caractère local de cette variable (scope)

En effet, si vous utilisez cette variable au sein d’une fonction, il est souhaitable de modifier la portée afin d’utiliser la valeur plus tard, comme par exemple :

function DemoExitCode
{
Param ($computer)
    $global:LASTEXITCODE = $null
    ping $computer > $null
    Write-Host "Ping sur $computer"
    # Write-Host "La valeur de LastExitCode est : $LASTEXITCODE"
}

DemoExitCode -computer localhost
Write-Host "La valeur de LastExitCode est : $LASTEXITCODE"
DemoExitCode -computer bidon
Write-Host "La valeur de LastExitCode est : $LASTEXITCODE"

5 – Options au niveau des applets de commandes

Le dernier élément qui me semble pertinent à préciser, est l’usage des variables ponctuelles qui peuvent être mentionnées lors de l’appel d’une applet de commande.

En effet, chacune d’entre elles contient les 2 options suivantes :

Option Alias d’option Description
-ErrorAction -EA Outrepasse ponctuellement le comportement indiqué dans la variable globale “$ErrorActionPreference
-ErrorVariable -EV Redirige l’erreur vers un objet dédié (pas $Error) – Indiquez un nom quelconque de variable sans le préfixe “$”

 

B. Les instructions “Trap” et “Throw”

Historiquement, la première mouture de Powershell (v1) proposait une gestion d’erreur plutôt triviale avec les instructions “trap” et “throw” (un peu comme “raise” en vbs).

Grossièrement, le trap consiste à “préparer” le code à un traitement d’erreur, afin d’intercepter celle-ci puis effectuer une action en conséquence.

Exemple de fonction trap :

function Demo-Trap {
   trap {"Erreur détectée"; return;}
     1/$null    # on génère une erreur, on exécute le "trap" et on quitte la fonction via "return" ou le script via un "break"
    Write-Host "Fonction terminée." # Ce message ne s'affichera pas car une erreur sera détectée
  }
Demo-Trap # on appelle la fonction
Write-Host "Code Demo-trap terminé"

Exemple de fonction throw :

function Demo-Throw {
param ($file)
if (-not (Test-Path $file)) 
 {
  Throw  [System.IO.FileNotFoundException] "Le fichier $file est introuvable!."
 }
}
Demo-Throw -file c:\Foo.txt

Vous n’êtes pas obligé d’indiquer le type d’erreur entre crochet, dans le cas ou seul le message vous intéresse, mais l’erreur sera moins précise.(cf $error.CategoryInfo)

Note : Alternativement à l’instruction “Throw”, il peut être préférable d’utiliser les applets de commande “write-error” ou “write-warning” avec éventuellement l’option “-ErrorAction”. En effet, cette technique permet de gérer des erreurs que vous considérez “non critiques”, alors que throw est plutôt réservé au traitement des erreurs “bloquantes”. (à moins que vous indiquiez “write-error -ErrorAction stop” ce qui reviendrait approximativement au même résultat)

 

C. Les instructions “Try” ,”Catch” (et “Finally”)

Depuis Powershell v2, l’instruction trap est de plus en plus rarement utilisée au profit des blocs de code “Try” et “Catch“. Cette fois ci, on essaye un bloc de code via “Try“, et en cas d’erreur on exécute les instructions contenues dans le(s) bloc(s) “Catch” suivant(s).

Le bloc “Finally” est optionnel et sera toujours exécuté.

ps42

Par exemple :

$array = @(3,0,1,2)
$nb = 10

foreach ($item in $array)
{
    try
    {
        $nb/$item | Out-Null
        Write-Host  -Fore 'green' "Le chiffre $nb est divisible par $item"
    }
    catch
    {
        Write-Host -Fore 'red' "Erreur! Impossible de diviser $nb par $item !"
    }
    finally
    {
        Write-Host -Fore 'green' "Information - Le chiffre traité est $nb"
    }
}

Voici un second exemple, exploitant certains concepts évoqués précédemment :

try {            
    # on génère une erreur
    1 + "ab"  
} 
catch {            
   # on affiche uniquement le message d'erreur
    Write-Warning -Message "$($_.Exception.Message)"
}

Vous aurez probablement remarqué que nous utilisons l’objet du pipeline “$_” correspondant de ce cas au canal d’erreur du bloc “try“.

Remarque : Dans cet exemple, le bloc catch ci-dessus traite et s’applique à toutes les erreurs. Vous pouvez traiter uniquement certaines erreurs en indiquant le type .NET [System.Management.Automation….] en modifiant le code comme suit :

try {            
  # génère une erreur gérée
  # Remove-Item "C:\fauxfichier.txt" -ErrorAction Stop
  # génère une erreur non gérée
  1 + "ab"  
 } 

catch [System.Management.Automation.ItemNotFoundException]
    {
  # Exemple de capture d'erreurs spécifiques 
  # afin de personnaliser les actions en conséquence
  write-host "Une erreur de type [objet non trouvé] a été détectée" -ForegroundColor Magenta
 }

Catch {
  # Traitement des autres erreurs
  write-host "Une erreur non gérée est survenue :`n $($Error[0])" -ForegroundColor Magenta
 }

Exécutez ce code en l’état puis décommentez (enlevez le “#”) sur la 3ème ligne et exécutez-le de nouveau. Vous constaterez alors plusieurs choses : Seul le dernier bloc catch correspondant à l’erreur non gérée est traité. Au 2ème lancement, l’exception est traitée par le premier bloc catch correspondant au type d’erreur alors que le second catch est ignoré. Enfin, dès qu’une erreur survient, l’interpréteur “quitte” le bloc try sans exécuter les instructions suivantes.

Nous sommes malheureusement loin d’avoir exploré toutes les possibilités et subtilités en matière de gestion des erreurs sous Powershell, mais je pense qu’il y a déjà bien assez de matière pour un début.

IV. La gestion des couleurs

Après la lecture d’un sujet aussi sensible que la gestion des erreurs, je pense que nous méritons bien, un passage moins éprouvant pour l’esprit. J’ai donc pensé à vous présenter les moyens d’agrémenter l’affichage en vous présentant la gestion des couleurs dans Powershell.

A. Les constantes prédéfinies

Vous probablement déjà remarqué qu’il était très facile d’afficher un résultat en couleur avec l’applet de commande “Write-Host” suivie des commutateurs ” -ForegroundColor” et/ou “ -BackgroundColor“, avec respectivement un nom de couleur en anglais. Ce que vous connaissez probablement moins, c’est d’où sortent ces constantes désignant ces couleurs, ainsi que les différentes valeurs supportées.

Pour afficher les constantes prédéfinies (utilisables dans la console) vous pouvez utiliser le code suivant :

[system.Consolecolor] | get-member -Static -MemberType Properties | select name

Ou plus simplement :

[system.consolecolor]::GetNames("consolecolor")

Ou bien encore :

[Enum]::GetValues([System.ConsoleColor])

Et pour le fun, voici une jolie fonction d’affichage des couleurs de base :

function Show-Colors( ) {
  $colors = [Enum]::GetValues( [ConsoleColor] )
  $max = ($colors | foreach { "$_ ".Length } | Measure-Object -Maximum).Maximum
  foreach( $color in $colors ) {
    Write-Host (" {0,2} {1,$max} " -f [int]$color,$color) -NoNewline
    Write-Host "$color" -Foreground $color
  }
}
Show-Colors

B. Les couleurs par défaut

Vous avez la possibilité de modifier les couleurs par défaut affichées en fonction des différents types de message de console.

Pour cela, vous pouvez modifier les valeurs des variables suivantes :

Variable Valeur par défaut
$Host.UI.RawUI.ForegroundColor = ‘DarkYellow’
$Host.UI.RawUI.BackgroundColor = ‘DarkMagenta’
$Host.PrivateData.ErrorForegroundColor = ‘Red’
$Host.PrivateData.ErrorBackgroundColor = ‘Black’
$Host.PrivateData.WarningForegroundColor = ‘Yellow’
$Host.PrivateData.WarningBackgroundColor = ‘Black’
$Host.PrivateData.DebugForegroundColor = ‘Yellow’
$Host.PrivateData.DebugBackgroundColor = ‘Black’
$Host.PrivateData.VerboseForegroundColor = ‘Yellow’
$Host.PrivateData.VerboseBackgroundColor = ‘Black’
$Host.PrivateData.ProgressForegroundColor = ‘Yellow’
$Host.PrivateData.ProgressBackgroundColor = ‘DarkCyan’

Vous pouvez éventuellement renseigner ces valeurs dans le profil afin de conserver vos préférences pour chaque session Powershell.

C. Les couleurs avancées

Pour terminer cette petite présentation, sachez qu’il est possible de renseigner de nombreuses autres variantes de couleurs, basées sur des noms prédéfinis et/ou des codes ARGB. Cette fonctionnalité est essentiellement destinée aux formulaires et autres représentations graphiques. (PresentationFramework / Windows.Forms).

Voici une fonction permettant d’afficher le nom des couleurs prédéfinies et leur code ARGB en hexa.

# Merci à Learn-PowerShell

Function Get-ARGBColor {
    Param ([string[]]$Color)
    Begin {
        Add-Type –assemblyName PresentationFramework
    }
    Process {
        If (-Not $PSBoundParameters['Color']) {
            $Color = [windows.media.colors] | Get-Member -static -Type Property | Select -Expand Name        
        }
        ForEach ($c in $color) {
            Try {
                $ARGB = [windows.media.color]$c
                New-Object PSObject -Property @{
                    ARGB = "$([windows.media.colors]::$c)"
                    Color = $c
                }
            } Catch {
                Write-Warning "[$c] n'est pas un nom de couleur valide "
            }
        }
    }
}

Pour utiliser cette fonction, il suffit de l’invoquer en indiquant le nom d’une couleur en paramètre :

Get-ARGBColor -Color magenta

Utilisée sans paramètre, la fonction vous renverra tous les noms de couleurs disponibles (+140 !)

Amusez-vous bien.
Powershellement votre.

Active Directory : Supprimer les ordinateurs d’une OU en PowerShell

mercredi 28 janvier 2015 à 12:55

I. Présentation

Dans un annuaire Active Directory, les objets (utilisateurs, groupes, ordinateurs, etc.) sont organisés par Unités d’Organisation (Organizational Unit, OU, UO). Ainsi, dans une unité d’organisation on peut retrouver un grand nombre d’ordinateurs enregistrés comme faisant partie du domaine.

Si vous avez besoin de supprimer les ordinateurs contenus dans une OU, via un script (notamment pour de l’automatisation), vous pouvez effectuer cette tâche grâce à PowerShell. C’est ce que nous allons voir dans ce tutoriel, une astuce simple mais pratique quand le cas se présente.

Pour ma part : Un contrôleur de domaine sous Windows Server 2012 R2, pour le domaine it-connect.fr, avec une unité d’organisation nommée “Formation” et qu’il est nécessaire de purger au niveau des objets ordinateurs (elle contient aussi des utilisateurs). Le chemin LDAP de l’OU est :

OU=Formation,DC=it-connect,DC=fr

psdel1

II. Code PowerShell

Pour effectuer l’opération, on va s’appuyer sur deux commandlets PowerShell :

Ainsi, nous allons concaténer l’utilisation de ces deux commandes pour obtenir la liste des ordinateurs présent dans une OU en particulier, puis, pour chaque objet nous effectuerons une action de suppression.

Ceci se traduit par la commande suivante :

Get-ADComputer -SearchBase "OU=Formation,DC=it-connect,DC=fr" -Filter * | Remove-ADComputer -confirm:$false

Dans un premier temps, je vous conseil d’exécuter uniquement la première partie de la commande, à savoir :

Get-ADComputer -SearchBase "OU=Formation,DC=it-connect,DC=fr" -Filter *

Ceci permettra de lister les ordinateurs sans effectuer d’action, dans le but de s’assurer que les ordinateurs qui sont présents dans le résultat de cette commande sont bien ceux que le souhaitent supprimer.

psdel2

Une fois la vérification effectuée, la commande de suppression peut être exécutée plus sereinement.

psdel3

Quand Microsoft vous contrôle… Épisode 1…

mardi 27 janvier 2015 à 14:00

Ca y est, j’y suis, j’ai droit à un audit de contrôle des licences Microsoft…

Alors ? Comment cela se passe ?

J’ai reçu, courant novembre dernier, un mail signé « Microsoft France » mais qui émane en fait de la société « U Progress » agissant en tant que sous-traitant.

Ce mail contient plusieurs pièces jointes dont un magnifique tableau Excel (1,4Mo) dans lequel on vous demande de faire l’inventaire de vos logiciels Microsoft. Les autres pièces jointes contiennent différentes recommandations pour établir cet inventaire ainsi que les licences MS que vous auriez pu acquérir en volume.

Le message de Microsoft est néanmoins un peu ambigu, je cite :

“Cette vérification a pour objectif, d’une part, d’aider les organisations à comprendre les termes des accords de licence de Microsoft et, d’autre part, de promouvoir les meilleures pratiques en matière de gestion des actifs logiciels. Pour l’heure, Microsoft souhaite vous inviter à participer à une vérification de vos actifs logiciels. Pour vous aider dans la réalisation de cette tâche, nous menons des vérifications conduites par des consultants spécifiquement qualifiés.”

Bon vous l’avez compris, c’est bien parce que l’on ne s’y retrouve pas dans la nébuleuse des licences Microsoft que ces derniers nous contrôlent et nous auditent…

Cela ne me choque pas du tout d’être audité quand il s’agit véritablement d’une opération visant à mettre le doigt sur les points forts et les points faibles de mon organisation mais lorsque le but de cet audit est uniquement à des fins commerciales alors, c’est un véritable contrôle « fiscal » dont le seul objectif consiste à vous faire peur et à acheter encore un peu plus de « Microsoft » histoire d’être tranquille. Et pourtant, côté licences MS, je suis tranquille…enfin je crois…

windows_licensing

Premier écueil, le fameux tableau Excel de 1,4 Mo à remplir… Bon, c’est pas gagné, moi qui suis sous Linux avec LibreOffice…c’est blindé de « macros » et c’est inexploitable ! Il faut donc absolument trouver une machine Windows avec Excel pour remplir ce satané tableau mais, vous n’êtes pas au bout de vos surprises

Je me rends donc sur un poste de travail Windows, avec Office 2013, en pensant que cela allait rouler… Euh, à l’ouverture du tableau j’obtiens un joli message : « Ce fichier contient des macros dont la signature est expirée ou a été révoquée – Ces macros seront désactivées ». Bon ça commence fort, du coup je m’interroge et je vais même jusqu’à me demander s’il ne s’agit pas d’une arnaque. Et si tout cela était « bidon » ! J’imagine mal une société comme Microsoft envoyer un fichier Excel aussi médiocre tant sur son contenu que sur sa conception !

Ni une, ni deux, je renvoie un mail à mon interlocuteur en lui demandant certaines précisions telles que :

- dois-je vraiment remplir ce tableau comportant 250 colonnes x 900 lignes (oui, vous avez bien lu cela fait 225 000 cellules!) ?

- dois-je vraiment activer les macros malgré le message d’avertissement ?

- est-ce que vous me garantissez la confidentialité des informations que je vais vous fournir ? Exemple : MS vous demande le nombre d’Ipad dans votre entreprise… En quoi cette information a t-elle un rapport avec les licences MS ?

Huit jours se sont passés et je n’ai aucun retour de cet « auditeur », je passe donc à autre chose…logo-windows7

Le lendemain, je reçois un courrier de Microsoft France me confirmant que j’allais être contacté pour un « audit », ce qui confirme alors que tout cela n’était pas du « bidon »…

Je remplis donc le fameux tableau, ce qui n’était pas très compliqué chez moi dans le sens où, mis à part les postes de travail sous Windows, quelques MSOffice par-ci, par-là nous n’utilisons que très peu de produits MS (Tiens, c’est peut-être pour cela que je suis contrôlé ?)… Et je renvoie donc le précieux tableau à mon correspondant qui, d’ailleurs, n’a toujours pas répondu à mon premier mail…pas très sérieux tout cela !

Huit jours se passent et toujours pas de retour…si ce n’est un deuxième courrier de Microsoft et le ton a changé : Monsieur, vous n’avez toujours pas répondu à notre audit …blablabla… !

Ouh là là….Cela commence à me chauffer un tantinet, je prends donc mon téléphone et je compose le n° inscrit sur le courrier…

- Allo ? Bonjour Monsieur, je vous contacte au sujet d’un courrier de rappel que je viens de recevoir de votre part et qui me met en garde sur le fait que je n’ai pas répondu à votre audit…alors que je suis en contact avec la société « U Progress » depuis plusieurs jours et que je leur ai fourni les informations demandées…mails restés sans réponse d’ailleurs…

- Bonjour Monsieur, je suis Martin DURAND et je vais prendre en charge votre problème… Je ne connais pas la société « U Progress » mais en fait il s’agit d’un courrier automatique et si vous êtes déjà en contact avec un collaborateur de chez Microsoft pour la mise à jour de vos licences, alors vous n’avez rien à faire, si ce n’est d’aller sur le site de Microsoft pour certifier que vous êtes bien à jour et les courriers cesseront !

- Ah bon ? Mais alors à quoi sert l’audit et tout le bazar ?

- C’est une procédure en parallèle pour bien vous faire comprendre comment fonctionne le principe des licences Microsoft…

Bon, je coupe court à cette discussion stérile et je m’empresse d’aller sur le site de Microsoft afin de leur indiquer que je suis à jour en terme de licences…

Je pensais alors que l’histoire s’arrêterait définitivement ici mais que nenni, quinze jours plus tard je recevais à nouveau un mail dont le sujet était « Après analyse de votre inventaire, il s’avère que…. »

Mais ça, ce sera l’objet du prochain billet…

A bientôt !

Remplacer l’index Apache par h5ai

mardi 27 janvier 2015 à 11:33

I. Présentation

Vous avez tous un jour utilisé l’index Apache pour accéder, mais aussi télécharger, des documents depuis internet. Cette interface n’est vraiment pas conviviale. De plus, si on souhaite récupérer tout un répertoire de photos, il faudra les télécharger une par une…pas pratique du tout, et surtout très long. L’interface n’est pas non plus très esthétique…

indexOf

Mais ça, c’était avant ;) Il y a quelque temps je suis tombé sur h5ai qui est bien plus glamour. Il permet de sélectionner le ou les fichiers que l’on souhaite télécharger. Mais également d’avoir un aperçu des photos, des fichiers texte, etc. Et petit plus,  un aperçu de notre arborescence. Au final il a tout pour plaire :p

h5ai

Il fonctionne avec Apache httpd, lighttpd, nginx et Cherokee.

II. Installation

Je précise que l’application nécessite PHP 5.3 au minimum.

Nous allons créer un répertoire à la racine du répertoire web “/var/www” que nous allons ensuite indexer pour pouvoir y accéder depuis internet.

mkdir /var/www/partage

Télécharger la dernière version d’h5ai au 08/01/2015 dans le répertoire /var/www :

cd /var/www
wget http://release.larsjung.de/h5ai/h5ai-0.26.1.zip
unzip h5ai-0.26.1.zip
rm -r h5ai-0.26.1.zip

 

III. Modification apache

Création d’un virtualhost :

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www/partage
        <Directory /var/www/partage/>
                Options +Indexes
                AllowOverride all
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/h5ai_error.log

        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/h5ai_access.log combined
</VirtualHost>

Modification du fichier de configuration apache :

vi /etc/apache2/apache2.conf

Et ajouter à la fin du fichier :

DirectoryIndex index.html index.php /h5ai/server/php/index.php

Activer et redémarrer le service apache2 :

a2ensite h5ai
/etc/init.d/apache2 restart

Accès à notre espace web :

http://adresse_ip/partage

IV. Conclusion

À présent vous avez une interface plus sympa :) que vous pouvez personnaliser si vous le souhaitez grâce à h5ai !

Convertir des fichiers audio ou vidéo avec VLC, c’est possible !

lundi 26 janvier 2015 à 15:10

I. Présentation

Le lecteur VLC que tout le monde ou presque utilise est capable d’effectuer de la conversion de fichiers, alors pourquoi s’embêter à utiliser encore un autre logiciel ? Vous me direz, on n’est plus à un logiciel près d’installé sur la machine, mais bon quand même…

Dans ce tutoriel, nous verrons qu’il possible de convertir des fichiers avec VLC. Au sein d’un exemple, la conversion d’un fichier audio sera effectuée mais la procédure pour de la vidéo est identique.

II. Convertir un fichier avec VLC

Commencez par ouvrir VLC, cliquez sur “Media” et “Convertir / Enregistrer“.

VLC - Option "Convertir / Enregistrer"

VLC – Option “Convertir / Enregistrer”

Dans la zone “Sélection de fichier“, il faut cliquer sur le bouton “Ajouter” pour indiquer le fichier que l’on souhaite convertir.

Ajouter un fichier à convertir dans VLC

Ajouter un fichier à convertir dans VLC

Une fois le fichier à convertir ajouté, on cliquera sur la flèche au niveau du bouton “Convertir / Enregistrer” et sur “Convertir“, étant donné que c’est l’action que nous souhaitons réaliser.

convertvlc3

Les options de conversion doivent être définies. Au niveau du profil, sélectionnez le format de sortie que vous souhaitez obtenir. Pour ma part, je souhaite passer le fichier du format MP3 au format FLAC.

convertvlc4

Configurer la conversion d’un fichier audio dans VLC

Note : Il est possible de personnaliser les différents profils en cliquant sur le bouton qui représente deux outils. Il est également possible de créer un nouveau profil.

Que ce soit pour l’audio ou la vidéo, VLC propose les formats de codecs les plus populaires, voyez par vous-même (MP4, MPEG, MKV, FLV, WAV, AVI, etc) :

Codecs disponibles dans VLC pour convertir

Codecs disponibles dans VLC pour convertir

Pour ceux qui se posent des questions sur le “Désentrelacement“, je vous renvoie vers Wikipédia qui expliquera bien mieux que moi ce que c’est… Wikipédia Désentrelacement

Que pensez-vous de la fonction de conversion de VLC ?