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 :

ajouter résultat de plusieurs csv dans un seul csv


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Octobre 2016
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2016
    Messages : 65
    Par défaut ajouter résultat de plusieurs csv dans un seul csv
    Bonjour,

    J'ai actuellement ce script :
    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
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
                                    ####################################################################
                                    ##### LISTE RESSOURCES MATERIELS / KB / LOGICIELS / SERVICES / #####
                                    #####      PROCESSUS / CLE REGISTRE / USER / LASTLOGON         #####
                                    ####################################################################
     
     
    ##### Purge l'écran #####
    clear
     
    ##### Création du tableau #####
    $myObject = New-Object System.Object
     
    ##### Création des variables : #####
        #Variables pour le nom du fichier de destination :
        $dir = "E:\Exo_05-04-17"
        $date = Get-Date -format "yyyy-MM-dd"
        $name = $env:COMPUTERNAME
        $rstname = "$dir\$date.$name.txt"
        $rstcsv = "$dir\rst\$date.$name.csv"
     
        #Variables fichiers texte sources :
        $srckb = get-content "$dir\src\srckb.txt"        #Source MAJ's
        $srclogi = get-content "$dir\src\srclogi.txt"    #Source logiciels
        $srcsvc = get-content "$dir\src\srcsvc.txt"      #Source services 
        $srcproce = get-content "$dir\src\srcproce.txt"  #Source processus
        $srcreg = get-content "$dir\src\srcreg.txt"      #Source registre
     
        #Chemin d'accès users : 
        $srcusers = "C:\Users\"
     
    ##### 1er colonne du tableau #####
    $myObject | Add-Member -type NoteProperty -name "log $name" -value ""
     
    ##### Suppression des fichiers destination déjà existant #####
        #Si le fichier txt de destination existe déjà, on le supprime
        If (Test-Path $rstname) { Remove-Item -Path $rstname }
     
        #Si le fichier csv de destination existe déjà, on le supprime
        #If (Test-Path $rstcsv) { Remove-Item -Path $rstcsv }
     
    ##### Démarrage de la transcription dans le fichier de destination #####
    Start-Transcript -path $rstname -Append
     
     
    ##### /////Ressources matériels :\\\\\ #####
    write-host ""
    write-host "//Ressources matériels :\\"
    write-host ""
        #Processeur -Nombre de processeurs + Cadence processeur- :
        foreach ($proc IN gwmi -ComputerName $name -Class Win32_Processor){
            $nbproc = $proc.NumberOfLogicalProcessors
            $cadproc = [Math]::round($proc.MaxClockSpeed /1000,2)
        }
        write-host "Nombre de processeur : $nbproc "
        write-host "Cadence : $cadproc GHz"
     
     
        #RAM -RAM totale + RAM utilisé- : 
        write-host "~~~~~~~~~~~~~~~~~~~~~~~~"
     
        foreach ($ramcomputer IN gwmi -ComputerName $name -Class Win32_ComputerSystem){
            $ramtotale = [Math]::round($ramcomputer.TotalPhysicalMemory /1GB,1)
        }
        foreach ($ramoperating IN gwmi -ComputerName $name -Class Win32_OperatingSystem){
            $ramlibre = [Math]::round($ramoperating.FreePhysicalMemory /1MB,1)
        }
        $ramutil = $ramtotale - $ramlibre
        write-host "RAM totale : $ramtotale Go"
        write-host "RAM utilisé : $ramutil Go"
     
        #Disque dur -Nb DD + Espace total + Espace libre- :  #Que dd interne pas support externe
        $nbdd = gwmi -ComputerName $name -Class Win32_LogicalDisk -Filter "DriveType = 3" | Measure-object
        $nbddcount = $nbdd.count
        write-host "~~~~~~~~~~~~~~~~~~~~~~~~"
        write-host "Nombre de disques dur :"$nbddcount
     
        foreach($volume IN gwmi -ComputerName $name -Class Win32_LogicalDisk -Filter "DriveType = 3") {
            $ddtotale = [Math]::round($volume.size /1024/1024/1024,1)
            $ddlibre = [Math]::round($volume.FreeSpace /1024/1024/1024,1)
            write-host $volume.name $volume.VolumeName
            write-host "Espace disque totale : $totale Go"
            write-host "Espace disque libre : $libre Go"
            write-host ""
        } 
     
        #Déclaration du tableau :
            #Proc
            $myObject | Add-Member -type NoteProperty -name "nbproc : $nbproc" -Value ""
            $myObject | Add-Member -type NoteProperty -name "cadproc : $cadproc Ghz" -Value ""
            #RAM 
            $myObject | Add-Member -type NoteProperty -name "RAMtotale : $ramtotale Go" -Value ""
            $myObject | Add-Member -type NoteProperty -name "RAMutil : $ramutil Go" -Value ""
            #Disque Dur
            $myObject | Add-Member -type NoteProperty -name "nbDD : $nbddcount" -Value ""
            $myObject | Add-Member -type NoteProperty -name "DDTotale : $ddtotale Go" -Value ""
            $myObject | Add-Member -type NoteProperty -name "DDlibre : $ddlibre Go" -Value ""
     
     
    ##### /////Présence de :\\\\\ #####
    write-host ""
    write-host "//Présence de :\\"
        #KB -Vérifie si KB existe depuis fichier txt externe- : 
        write-host ""
        write-host "Mises à jour sur la machine $name :"
     
        foreach ($kb in $srckb) {
            if (get-hotfix -id $kb -ComputerName $name -ErrorAction 4) { 
                write-host "- $kb est installée."
                $myObject | Add-Member -type NoteProperty -name "Update $kb installee" -value "" -Force
            } else { 
                write-host "- $kb n'est pas installée."
                $myObject | Add-Member -type NoteProperty -name "Update $kb n'est pas installee" -value "" -Force
            }
        }
     
        #Logiciels -Vérifie si logiciel existe depuis fichier txt externe- : 
        write-host "~~~~~~~~~~~~~~~~~~~~~~~~"
        Write-Host "Logiciels sur la machine $name :"
     
        $apps = Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*, HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Where-Object {![string]::IsNullOrWhiteSpace($_.DisplayName) } | Select-Object -ExpandProperty DisplayName -Unique
        foreach($logi in $srclogi) {
            If ($apps -contains $logi) {
                Write-Host "Le logiciel $logi est installé sur la machine $name"
                $myObject | Add-Member -type NoteProperty -name "Logiciel $logi installee" -value "" -Force
            } else {
                Write-Host "Le logiciel $logi n'est pas installé sur la machine $name"
                $myObject | Add-Member -type NoteProperty -name "Logiciel $logi n'est pas installee" -value "" -Force
            }    
        }
     
     
        #Services -Vérifie si services existe depuis fichier txt externe- :
        write-host "~~~~~~~~~~~~~~~~~~~~~~~~" 
        Write-Host "Services sur la machine $name :"
     
        foreach($svc in $srcsvc){
        $mysvc = Get-Service -name $svc -ComputerName $name -ErrorAction 4
           if($mysvc -and $($mysvc.Status) -eq "Running") {
                write-host "- $svc est présent. Il est actuellement : En cours d'exécution"
                $myObject | Add-Member -type NoteProperty -name "Service $svc est present. Statut actuel : En cours" -value "" -Force
     
            } elseif ($mysvc -and $($mysvc.Status) -eq "Stopped") {
                write-host "- $svc est présent. Il est actuellement : Arrêté"
                $myObject | Add-Member -type NoteProperty -name "Service $svc est present. Statut actuel : Arrete" -value "" -Force
     
            } else {
                write-host "- $svc n'est pas présent."
                $myObject | Add-Member -type NoteProperty -name "Service $svc n'est pas present" -value "" -Force
            }
        }
     
        #Processus -Vérifie si processus existe depuis fichier txt externe- :
        write-host "~~~~~~~~~~~~~~~~~~~~~~~~"
        Write-Host "Processus sur la machine $name :"
     
        foreach($proce in $srcproce){
            if(Get-Process -ProcessName $proce -ComputerName $name -ErrorAction 4) {
                write-host "- $proce est présent."
                $myObject | Add-Member -type NoteProperty -name "Processus $proce est present" -value "" -Force
            } else {
                write-host "- $proce n'est pas présent."
                $myObject | Add-Member -type NoteProperty -name "Processus $proce n'est pas present" -value "" -Force
            }
        }
     
        #Clé registre -Vérifie si clé registre existe depuis fichier txt externe- :
        write-host "~~~~~~~~~~~~~~~~~~~~~~~~"
        write-host "Clé de registre sur la machine $name :"
     
        foreach ($reg in $srcreg){
        $regsplit = $reg.split(';')
        $pathsplit = $reg.split(';')[-2]
        $regsplittab = $regsplit.split(' ')[1]
        If(Get-ItemProperty -Path $pathsplit -name $regsplit  -ErrorAction 4) {
            write-host "- Clé" $regsplit.split(' ')[1] "présente dans ->" $pathsplit
            $myObject | Add-Member -type NoteProperty -name "Cle registre $regsplittab presente" -value "" -Force
            } else {
            write-host "- Clé" $regsplit.split(' ')[1] "non présente dans ->" $pathsplit
            $myObject | Add-Member -type NoteProperty -name "Cle registre $regsplittab non presente" -value "" -Force
            }
        }
     
    ##### Users déjà connectés sur poste + date last logon #####
    write-host ""
    write-host "//Users + last logon :\\"
    write-host "Utilisateurs déjà connecté sur sur la machine $name et LastLogon :"
     
    $pathusers = Get-ChildItem $srcusers | ? {$_.Name -ne "Public"} | ? {$_.Name -ne 'MSSQL$ADK.NT Service'} #Liste les dossiers présent dans "C:\Users\" en enlevant le dossier "Public" et "MSSQL$ADK.NT Service" # Le "?" correspond à la commande Where-Object
    foreach($dir in $pathusers) {
        $nt = Get-Item ($dir.FullName + "\NTUSER.DAT") -Force
        $LastWriteTimeNTUSER = $nt.LastWriteTime.ToString("dd/MM/yyyy")
        $Nameuser = $dir.Name
        Write-Host "- $Nameuser : connecté pour la dernière fois le $LastWriteTimeNTUSER"
        $myObject | Add-Member -type NoteProperty -name "Users : $Nameuser" -value "" -Force
    }
     
     
     
    ##### Export du tableau vers un fichier csv : #####
        $myObject | Export-Csv $rstcsv -Delimiter ";"   
        $myObject
     
    ##### Fin de la transcription dans le fichier de destination #####
    Stop-Transcript

    Il me permet de récupérer des informations sur l'ordinateur et les enregistre dans un fichier csv (aussi dans un fichier txt mais pas utile ici) pas très propre mais il m'a été demandé comme ça.

    Donc il faudrait avec un autre script que tous les csv qui ont été créé soit injectés dans un seul et même csv.

    En gros : Si j'ai 200 fichier csv qui ont été créé par mon script, il faudrait que le contenu des 200 fichiers soit mit dans un seul fichier csv pour faciliter la lecture et ne pas devoir les lire une par une.

    Merci

    Alexis

  2. #2
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Octobre 2016
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2016
    Messages : 65
    Par défaut
    Voici mon script actuel qui fait le boulot.

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $folder = "E:\Exo_05-04-17\rst\*.csv"
    $dirmaster = "E:\Exo_05-04-17\master.csv"
    If (Test-Path $dirmaster) { Remove-Item -Path $dirmaster }
     
    # Concaténation de tous les fichiers .csv présent dans $folder dans le fichier master.csv
    add-content $dirmaster -value (get-content $folder)


    Alexis

  3. #3
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par alexis45140 Voir le message
    Voici mon script actuel qui fait le boulot.
    Tu es sûr ?
    un fichier CSV est structuré, get-content traite un fichier ASCII sans structure, la première ligne de chaque fichier CSV se retrouvera donc n fois dans le fichier final.

  4. #4
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Octobre 2016
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2016
    Messages : 65
    Par défaut
    Mon fichier csv ne contient qu'une seule ligne (enfin deux car la deuxième est vide, ça fait plus claire dans le fichier csv) donc ça ne me dérange pas.

    Par contre tout se décale quand j'ajoute une update, logiciel ou autre dans mes fichiers sources

  5. #5
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par alexis45140 Voir le message
    Mon fichier csv ne contient qu'une seule ligne (enfin deux car la deuxième est vide, ça fait plus claire dans le fichier csv) donc ça ne me dérange pas.
    Ok.
    Citation Envoyé par alexis45140 Voir le message
    Par contre tout se décale quand j'ajoute une update, logiciel ou autre dans mes fichiers sources
    Là il faut débugger -> VSCode + VSCodePowershell

  6. #6
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Octobre 2016
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2016
    Messages : 65
    Par défaut
    Bonjour,

    Le fait de devoir faire ça comme ça c'est pour m’entraîner à utiliser les variables tableaux et la personne qui m'a donné ce travail m'a dit que je pouvais gérer l'ajout d'une colonne sans décalage avec une variable tableau mais la je suis un peu perdu.

    Dans tous les cas, si je trouve une solution à mon problème, je posterai mon code ici.

    Merci

    Alexis

Discussions similaires

  1. Réponses: 11
    Dernier message: 24/07/2015, 19h17
  2. Ajouter plusieurs input dans une seule div
    Par xKryckx dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/05/2015, 18h47
  3. Réponses: 7
    Dernier message: 15/01/2014, 18h45
  4. [MySQL] résultat de plusieurs tables dans une seule page
    Par other1234 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/01/2013, 09h49
  5. Réponses: 6
    Dernier message: 18/09/2007, 17h10

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