IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

traitement via fichier ou l'AD avec fonction [PowerShell]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Juillet 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2014
    Messages : 7
    Par défaut traitement via fichier ou l'AD avec fonction
    bonjour à tous il manque de peu mais je sature et j'ai besoin d'aide
    je vous explique avant tout ^^

    j'ai un script qui a pour but de chercher dans l'AD tous les ordinateurs qui sont admin local de leur machine
    ce script génère 3 fichiers de sortie
    • résultat des ordinateurs avec le compte admin local
    • les machines qui n'ont pas pu être testées car déconnectées
    • et un fichier de log


    mais c'est là que ça se complique on m'a demandé que le script vérifie si un fichier de la liste des machines non connectées existe, si oui alors on charge la liste sinon le script cherche dans l'AD
    on m'a demandé de mettre ces 2 options dans des fonctions

    et de faire appel à elle pour que le script sache quelle méthode utiliser (fichier csv ou requête AD)

    mais mon code ne fonctionne pas pouvez-vous m'aider à voir mes erreurs svp ?

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    $n=0
    $v=0
    $w=0
    #-------------------- fichiers --------------------------------------
    $strFilePathResut = $PSCommand.Basename + ".csv"
    $log = "c:\temp\logAdminLocal$(get-date -f dd-MM-yyyy-HH-mm-ss).rtf"
    $strFilePathNotConnected = "C:\temp\NotestAdminLocal.csv"
     
     
    Function Get-ComputersFromFile ([ref]$ComputersName) {
    $ComputersName = Import-CSV -path "C:\temp\NotestAdminLocal.csv"  -Encoding UTF8
    }
     
     
    Function Get-ComputersFromAD ([ref]$ComputersName) {
    #-------------------- Domaine ---------------------------------------
     $adFilter = "(objectClass=Computer)"
     $adSearch = New-Object System.DirectoryServices.DirectorySearcher
     $adSearch.PageSize = 15000
     $adSearch.Filter = $adFilter		
     $adSearch.SearchRoot = "LDAP://OU=Racine,DC=XXX,DC=local"
     $adall = $adSearch.FindAll()
     $adItemT = $Adall.Properties
     $ComputersName = $adItemT.name 
     }
     
     
     Start-Transcript -Path $log
     Write-host -nonewline "Vérification en cour ..." `n
     
     #===============================================================================
    #Si j'ai un fichier strFilePathNotConnected, je charge les valeurs
    if (Test-Path "C:\temp\NotestAdminLocal.csv"){
    $arrayComputersName = Get-ComputersFromFile ([ref]$ComputersName)
    }
    #===============================================================================
    #===============================================================================
    #Sinon je recherche dans l'AD 
    else {
    $arrayComputersName = Get-ComputersFromAD ([ref]$ComputersName)
    }
    #===============================================================================
     
     
    foreach ( $Computers in $arrayComputersName)
     {     
     
    ############# machine en cours de vérification et test de connexion
    	 Write-host -nonewline "Vérification Machine " `n	
     
        if ( Test-Connection $Computer -count 1 -quiet )
     
    		{
     
                Get-WmiObject Win32_UserAccount -ComputerName $Computer
    			$MembresAdmin =""
                $Connexion = [ADSI]"WinNT://$Computer/Administrateurs,group"
     
                $MembresAdmin = $Connexion.psbase.invoke('Members') | %{$_.GetType().InvokeMember('Name','GetProperty', $null, $_, $null)}| Where-Object {$_ -notlike "*admin*" -and $_ -notlike ""} 
     
     
                if ( !$MembresAdmin )
                    {
                       Write-host -nonewline "Machine $Computer testé mais sans compte admin local" `n				   
                    }
     
                else
                    {
                       Write-host -nonewline "Machine $Computer connecté avec compte administrateur local"`n
                       "Nom de la machine ; Nom du compte
                       $Computer ; $MembresAdmin
                       ------------"  |  Out-File -filepath $strFilePathResut -encoding -Encoding UTF8
                    }  
                $v++
            }
       else 
            {
     
               Write-host -nonewline "$Computer, Machine  non connectées" `n
               if (Test-Path "C:\temp\NotestAdminLocal.csv")
                 {
                    Remove-Item - chemin C:\temp\NotestAdminLocal.csv
                 }
               else {
                    " $Computer" | Out-File -filepath -Force $strFilePathNotConnected -Encoding UTF8 
                    }
     
                $n++
            }
     
     
     }
     
     
    Write-host "il y a $n machines deconnectées"  
    Write-host "il y a $v machines connectées"  
    $w=$n+$v
    Write-Host "Il y a $w machines"
    Write-host -nonewline "Vérification terminé"
    Stop-Transcript

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Sans regarder le contenu et en supposant que dans le fichier csv les noms des ordinateurs sont dans la colonne Name


    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Function Get-ComputersFromFile {
     return (Import-CSV -path "C:\temp\NotestAdminLocal.csv" -Encoding UTF8 | Select-Object Name)
    }
     
     
    Function Get-ComputersFromAD {
    #-------------------- Domaine ---------------------------------------
     $adFilter = "(objectClass=Computer)"
     $adSearch = New-Object System.DirectoryServices.DirectorySearcher
     $adSearch.PageSize = 15000
     $adSearch.Filter = $adFilter		
     $adSearch.SearchRoot = "LDAP://OU=Racine,DC=XXX,DC=local"
     $adall = $adSearch.FindAll()
     $adItemT = $Adall.Properties
     return $adItemT.name
     }
     
    if (Test-Path "C:\temp\NotestAdminLocal.csv"){
     $arrayComputersName = Get-ComputersFromFile
    }
    else {
     $arrayComputersName = Get-ComputersFromAD
    }

    Note :
    - La fonction Get-ComputersFromFile devrait accepter un paramètre File
    - Ça c'est fou ! Write-host -nonewline "Vérification en cour ..." `n
    - Ne pas utiliser les alias tel que %
    - Prévoir les cas d'erreur (accès refusé...)
    - Ça marche ça ? Remove-Item - chemin C:\temp\NotestAdminLocal.csv
    - Il doit te manquer des Append à tes Out-File
    - Une fois que ça fonctionnera, une ProgressBar pour des opérations longues est un vrai plus

  3. #3
    Membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Juillet 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2014
    Messages : 7
    Par défaut
    Merci pour tes retours ^^

    Note :
    - La fonction Get-ComputersFromFile devrait accepter un paramètre File
    je ne sais pas faire et ca a l'air de fonctionner sans

    - Ça c'est fou ! Write-host -nonewline "Vérification en cour ..." `n
    tu en sait plus que moi mais en vrais je pense que c'est inutile

    - Ne pas utiliser les alias tel que %
    je devrait juste mettre $ ?

    - Prévoir les cas d'erreur (accès refusé...)
    - Ça marche ça ? Remove-Item - chemin C:\temp\NotestAdminLocal.csv
    Non je l'ai remplacer par Remove-Item "C:\temp\NotestAdminLocal.csv"

    - Il doit te manquer des Append à tes Out-File
    Oui je les est rajoutées

    - Une fois que ça fonctionnera, une ProgressBar pour des opérations longues est un vrai plus
    je vais faire des recherches pour savoir ce que c'est ^^

    merci beaucoup les fonctions fonctionnent mieux (je savais que ca tenais a rien ^^)
    J'ai maintenant une autre problématique avec le fichier csv

    à la 1er exécution du script le fichier csv est bien crée avec la liste des ordinateurs non tester (super ça marche)
    mais a ma 2 iem exécution il me sort ca pour chaque passage de la boucle

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Vérification Machine @{name=}
    @{name=}, Machine non connectées

    de plus a chaque exécution du script mon fichier double
    c'est pour cela que j'efface mon fichier csv une fois les donner charger dans ma variable mais malgré ca rien y fait mon fichier grossi :/

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    - Ça c'est fou ! Write-host -nonewline "Vérification en cour ..." `n
    tu en sait plus que moi mais en vrais je pense que c'est inutile
    Utilise ceci Write-host "Vérification en cour ..."

    - Ne pas utiliser les alias tel que %
    je devrait juste mettre $ ?
    Utilise la forme parlante ForEach-Object

    - Prévoir les cas d'erreur (accès refusé...)
    Non pris en charge pour le moment, utilise un try/catch lors de l'interrogation du poste

    à la 1er exécution du script le fichier csv est bien crée avec la liste des ordinateurs non tester (super ça marche)
    mais a ma 2 iem exécution il me sort ca pour chaque passage de la boucle

    Vérification Machine @{name=}
    @{name=}, Machine non connectées


    de plus a chaque exécution du script mon fichier double
    c'est pour cela que j'efface mon fichier csv une fois les donner charger dans ma variable mais malgré ca rien y fait mon fichier grossi :/
    Peux tu poster la dernière version de ton script

    PS : Ton fichier csv doit contenir un entête ou pas ?

  5. #5
    Membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Juillet 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2014
    Messages : 7
    Par défaut
    voici la dernière version de mon script
    pas le fichier csv doit juste contenir les machine qui n'ont pas étais tester au 1er passage
    le but étant d'éviter de toujours solliciter L'ad et a terme de faire vérifier toutes les machine de l'AD


    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
     
    $n=0;$v=0;$w=0
    $arrayComputersName = ""
    $strFilePathResut = $PSCommand.Basename + ".csv"
    $log = "c:\temp\logAdminLocal$(get-date -f dd-MM-yyyy-HH-mm-ss).rtf"
    $strFilePathNotConnected = "C:\temp\NotestAdminLocal.csv"
     
    #-------------------- fichiers --------------------------------------
    Function Get-ComputersFromFile {
    return( Import-CSV -path "C:\temp\NotestAdminLocal.csv"  -Encoding UTF8 | Select-Object Name)
    }
     
    #-------------------- Domaine ---------------------------------------
    Function Get-ComputersFromAD {
     $adFilter = "(objectClass=Computer)"
     $adSearch = New-Object System.DirectoryServices.DirectorySearcher
     $adSearch.PageSize = 15000
     $adSearch.Filter = $adFilter		
     $adSearch.SearchRoot = "LDAP://OU=Racine,DC=XXX,DC=local"
     $adall = $adSearch.FindAll()
     $adItemT = $Adall.Properties
     return $adItemT.name 
     }
     
     
     Start-Transcript -Path $log
     Write-host  "Vérification en cour ..." 
     
    #===============================================================================
    #Si j'ai un fichier NotestAdminLocal.csv, je charge les valeurs
     
    if (Test-Path "C:\temp\NotestAdminLocal.csv"){
    $arrayComputersName = Get-ComputersFromFile
    Write-host -nonewline "Recherche effectué dans le fichier NotestAdminLocal.csv " `n
    Remove-Item "C:\temp\NotestAdminLocal.csv"
    New-Item -ItemType File -Path $strFilePathNotConnected
    Add-Content -Path $strFilePathNotConnected -Value "Statut;Name"
    }
     
    #===============================================================================
    #Sinon je recherche dans l'AD 
     
    else {
    $arrayComputersName = Get-ComputersFromAD
    Write-host -nonewline "Recherche effectué dans Active Directory " `n
    New-Item -ItemType File -Path $strFilePathNotConnected
    Add-Content -Path $strFilePathNotConnected -Value "Statut;Name"
    }
    #===============================================================================
     
     
    foreach ($Computer in $arrayComputersName)
     {     
     
    ############# machine en cours de vérification et test de connexion
    	 Write-host -nonewline "Vérification Machine $Computer" `n	
     
        if ( Test-Connection $Computer -count 1 -quiet )                 
    		{
            Get-WmiObject Win32_UserAccount -ComputerName $Computer
    	    $MembresAdmin =""
            $Connexion = [ADSI]"WinNT://$Computer/Administrateurs,group"			
            $MembresAdmin = $Connexion.psbase.invoke('Members') | %{$_.GetType().InvokeMember('Name','GetProperty', $null, $_, $null)}| Where-Object {$_ -notlike "*admin*" -and $_ -notlike ""}           
     
                if ( !$MembresAdmin )
                    {
                       Write-host -nonewline "Machine $Computer testé mais sans compte admin local" `n				   
                    }
     
                else
                    {
                       Write-host -nonewline "Machine $Computer connecté avec compte administrateur local"`n
                       "Nom de la machine ; Nom du compte
                       $Computer ; $MembresAdmin
                       ------------"  |  Out-File -filepath $strFilePathResut -encoding -Encoding UTF8 -append    
                    }$v++
            }
     
         else 
            {
              Write-host -nonewline "$Computer, Machine  non connectées" `n
              "Non teste;$Computer" | Out-File -Force -filepath $strFilePathNotConnected -Encoding UTF8  -append         
            }$n++
     }
     
    Write-host "il y a $n machines déconnectées"  
    Write-host "il y a $v machines connectées"  
    $w=$n+$v
    Write-Host "Il y a $w machines"
    $n=0;$v=0;$w=0
    Write-host "Vérification terminé"
    Stop-Transcript

    pour régler le problème du fichier qui grossi j'ai fait ca
    une fois les données du fichier csv charger je le supprimé et je le recrée
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if (Test-Path "C:\temp\NotestAdminLocal.csv"){
    $arrayComputersName = Get-ComputersFromFile
    Write-host -nonewline "Recherche effectué dans le fichier NotestAdminLocal.csv " `n
    Remove-Item "C:\temp\NotestAdminLocal.csv"
    New-Item -ItemType File -Path $strFilePathNotConnected
    Add-Content -Path $strFilePathNotConnected -Value "Statut;Name"
    }

    mais après dans mon dossier csv il retourne ca en données
    Nom : Capture.PNG
Affichages : 339
Taille : 22,8 Ko

  6. #6
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Je dirais comme ceci afin de respecter ta logique (j'aurai fait un peu différemment).
    Je n'ai pas pu testé car je n'ai pas l’environnent qui me le permet.
    Tu peux tester en commençant sans aucun fichier csv afin qu'il soit créée dans le bon format.

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    $n = $v = $w = 0
    $arrayComputersName = @()
    $log = "c:\temp\logAdminLocal$(get-date -f dd-MM-yyyy-HH-mm-ss).rtf"
    $strFilePathResut = $PSCommand.Basename + ".csv" # Je ne sais pas ce que doit donner cette ligne de commande
    $strFilePathNotConnected = "C:\temp\NotestAdminLocal.csv"
     
    #-------------------- fichiers --------------------------------------
    Function Get-ComputersFromFile {
        return @(Import-CSV -LiteralPath $strFilePathNotConnected -Encoding UTF8 -Delimiter ";" | Select-Object -ExpandProperty Name)
    }
     
    #-------------------- Domaine ---------------------------------------
    Function Get-ComputersFromAD {
        $adFilter = "(objectClass=Computer)"
        $adSearch = New-Object System.DirectoryServices.DirectorySearcher
        $adSearch.PageSize = 15000
        $adSearch.Filter = $adFilter
        $adSearch.SearchRoot = "LDAP://OU=Racine,DC=XXX,DC=local"
        $adall = $adSearch.FindAll()
        $adItemT = $Adall.Properties
        return @($adItemT.name)
    }
     
    Start-Transcript -Path $log
    Write-host  "Vérification en cour ..."
     
    #===============================================================================
    #Si j'ai un fichier NotestAdminLocal.csv, je charge les valeurs
    if (Test-Path "C:\temp\NotestAdminLocal.csv" -PathType Leaf) {
        $arrayComputersName = Get-ComputersFromFile
        Write-Host "Recherche effectué dans le fichier NotestAdminLocal.csv"
        Remove-Item "C:\temp\NotestAdminLocal.csv" -Force
    }
    #===============================================================================
    #Sinon je recherche dans l'AD
    else {
        $arrayComputersName = Get-ComputersFromAD
        Write-Host "Recherche effectué dans Active Directory"
    }
    #===============================================================================
     
    foreach ($Computer in $arrayComputersName)
    {
     
        ############# machine en cours de vérification et test de connexion
        Write-Host "Vérification Machine $Computer"
     
        if (Test-Connection $Computer -count 1 -quiet)
        {
            #Get-WmiObject Win32_UserAccount -ComputerName $Computer
            #$MembresAdmin = ""
            $Connexion = [ADSI]"WinNT://$Computer/Administrateurs,group"			
            $MembresAdmin = $Connexion.psbase.invoke('Members') | ForEach-Object {$_.GetType().InvokeMember('Name','GetProperty', $null, $_, $null)} | Where-Object {$_ -notlike "*admin*" -and $_ -notlike ""}
     
            if (!$MembresAdmin)
            {
                Write-Host "Machine $Computer testé mais sans compte admin local"
            }
            else
            {
                Write-Host "Machine $Computer connecté avec compte administrateur local"
     
                $MembresAdmin = $MembresAdmin -join ","
                $obj = [PSCustomObject]@{
                    "Nom de la machine" = $Computer
                    "Nom du compte"     = $MembresAdmin
                }
                $obj | Export-Csv -LiteralPath $strFilePathResut -Encoding UTF8 -Delimiter ";" -Append -Force
            }
            $v++
        }
        else
        {
            Write-Host "Machine $Computer non connectées"
            $obj = [PSCustomObject]@{
                Statut = "Non teste"
                Name   = $Computer
            }
            $obj | Export-Csv -LiteralPath $strFilePathNotConnected -Encoding UTF8 -Delimiter ";" -Append -Force
            $n++
        }
     
    }
     
    Write-host "il y a $n machines déconnectées"
    Write-host "il y a $v machines connectées"
    $w = $n + $v
    Write-Host "Il y a $w machines"
    Write-host "Vérification terminé"
    Stop-Transcript

    PS1 : La gestion d'erreurs n'est pas encore implémentée.
    PS2 : Regarde bien chaque ligne, il y a parfois des petites différences.
    PS3 : J'ai tenté de refaire l'indentation qui n'était pas homogène
    PS4 : Voir ligne 4
    PS5 : La ligne 50 semble superflue

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Soucis avec les fonctions de traitement de fichiers
    Par dartakham dans le forum Scilab
    Réponses: 5
    Dernier message: 24/04/2016, 16h15
  2. [WD-2013] Taille du fichier qui double/triple avec fonction "grouper"
    Par Maair dans le forum Word
    Réponses: 0
    Dernier message: 16/03/2016, 13h27
  3. Traitement de fichiers Unix sous Windows avec AWK
    Par michel baily dans le forum Shell et commandes POSIX
    Réponses: 1
    Dernier message: 06/10/2011, 10h45
  4. TRaitement de fichier avec PERL
    Par Dr_GonZO dans le forum Langage
    Réponses: 4
    Dernier message: 22/07/2005, 12h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo