Overblog Tous les blogs Top blogs Technologie & Science Tous les blogs Technologie & Science
Editer l'article Suivre ce blog Administration + Créer mon blog
MENU

RepFiles

Publié le par damcuvelier

# Retrouve les fichiers json,xml,csv,xls dans $FldrPath qui contiennent en Headers les paramètres $scriptParameters autres que $FldrPath
# Dès qu'un fichier correspondant est trouvé il s'arrête
# usage: RepFiles -FldrPath <json,xml,csv,xls files path> -Heads $scriptParameters

#Get xml File Headers:
function getxmlheaders($FileXml){
[xml]$GCXML = Get-Content $FileXml
[string]$1stNodeName = $GCXML.DocumentElement.Name
$ImpXML = $GCXML.SelectNodes("//*")
[string]$2ndNodeName = ($ImpXML.Name -join ',').replace("$1stNodeName,",'').split(',')[0]
$XmlHeaders = ($GCXML.SelectNodes("//$1stNodeName/$2ndNodeName/*") | Select-Object -Property Name -Unique).Name -join ';'
return $XmlHeaders
}

#Get xls* File Headers:
function getxlsheader($FileXls){
Install-Module -Name ImportExcel -force | out-null
$XlHeaders = ((Import-Excel $FileXls) | Get-Member -MemberType NoteProperty).Name -join ';'
return $XlHeaders
}

#Get json File Headers:
function getjsonheader($FileJson){
$jsonData = Get-Content -Path $FileJson -Raw | ConvertFrom-Json
$firstPropertyName = $jsonData[0].PSObject.Properties.Name
$JsonHeaders = $jsonData.$firstPropertyName[0].PSObject.Properties.Name -join ';'
return $JsonHeaders
}

#Get csv File Headers:
function getcsvheader($FileCsv){
$CsvHeaders = (Import-Csv -Path $File)[0].PSObject.Properties.Name -join ';'
return $CsvHeaders
}

#get an other srcfile:
function Re2GetsrcFile($File,$TypeF){
$FileRes = 0

$FileName = $File.split('\')[-1]

$Files = (Get-ChildItem -Path $RepsFldrPath -Filter "*.$TypeF*" | where-object{$_.Name -notmatch $FileName}).FullName
foreach($File in $Files){
    if($TypeF -eq "xml"){$FileHeaders = getxmlheaders($File)}
        foreach($Header in $ScriptHeaders.split(';')){if($FileHeaders -notmatch $Header){$FileRes += 1}}
        if($FileRes -eq 0){$resultfile = $File}else{$i = $i + 1; $resultfile = ReGetsrcFile $File $TypeF}
}
if($i -eq $Filescount){return "No $TypeF with script headers"}else{return $resultfile}
}

#get an other srcfile:
function ReGetsrcFile($File,$TypeF){
$FileRes = 0


$FileName = $File.split('\')[-1]

$Files = (Get-ChildItem -Path $RepsFldrPath -Filter "*.$TypeF*" | where-object{$_.Name -notmatch $FileName}).FullName
foreach($File in $Files){
    if($TypeF -eq "xml"){$FileHeaders = getxmlheaders($File)}
        foreach($Header in $ScriptHeaders.split(';')){if($FileHeaders -notmatch $Header){$FileRes += 1}}
        if($FileRes -eq 0){$resultfile = $File}else{$i = $i + 1; $resultfile = Re2GetsrcFile $File $TypeF}
}

if($i -eq $Filescount){return "No $TypeF with script headers"}else{return $resultfile}
}

#get srcfile w/ headers:
function GetsrcFile($TypeF){
$FileRes = 0

$Files = (Get-ChildItem -Path $RepsFldrPath -Filter "*.$TypeF*").FullName
$Global:Filescount = $Files.count
foreach($File in $Files){
    if($TypeF -eq "csv"){$FileHeaders = getcsvheader($File)}
    if($TypeF -eq "json"){$FileHeaders = getjsonheader($File)}
    if($TypeF -eq "xls"){$FileHeaders = getxlsheader($File)}
    if($TypeF -eq "xml"){$FileHeaders = getxmlheaders($File)}
    
        foreach($Header in $ScriptHeaders.split(';')){if($FileHeaders -notmatch $Header){$FileRes += 1}}
        if($FileRes -eq 0){$resultfile = $File}else{$resultfile = ReGetsrcFile $File $TypeF}
}
    
return $resultfile
}

function RepFiles{
Param($FldrPath,$Heads)

$Global:erroractionpreference = 'silentlycontinue'
$Global:RepsFldrPath = $FldrPath
$Global:ScriptHeaders = $Heads.replace('FldrPath','').replace(';;',';').trimend(';')
$i = 0


#Preference Sources files search order:
$prefs = 'json,xml,csv,xls'

foreach($pref in $prefs.split(',')){
    if(!$SrcResFile){$SrcResFile = GetsrcFile($pref)}
}


return $SrcResFile

}

 

Commenter cet article