1 pièce(s) jointe(s)
Problème appel de fonction
Bonjour,
J'ai un problème sur mon script PowerShell que je ne comprend pas,
j'ai une page "cas2.ps1" qui est un peut le programme principal qui gère un cas d'exception n°2, dans cette page en haut j'ai écris :
Code:
1 2
|
Import-Module .\formatNomPrenom.ps1 |
"formatNomPrenom.ps1" est une page de fonction dont une qui est :
Code:
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
|
function formatNom([string]$val){
# Formatage du nom ou du prénom au format AD
# Ajout au fichier paramètres
# Importation des modules
Import-Module .\creationLog.ps1
# Création de l'objet Excel
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
$excel.DisplayAlerts = $false
# Ouverture du fichier paramètres
Write-Host "Ouverture du fichier parametres" -ForegroundColor Blue
try{
$workbook = $excel.Workbooks.Open("C:\Users\ltanne\Desktop\preprod\parametres\feuille.xlsx")
$worksheet = $workbook.Worksheets.item("Parametres")
$worksheet.Activate()
$ouvertParam = $true
$chaine = "Ouverture du fichier paramètres : OK"
majLog $chaine
}catch{
$ouvertPram = $false
Write-Host "Le fichier ne s'ouvre pas, veuillez vérifier le nom : " -ForegroundColor Red
Write-Host "qu'il se trouve bien dans le bon dossier 'parametres'," -ForegroundColor Red
Write-Host "qu'il n'a pas été déplacer ou supprimer" -ForegroundColor Red
$chaine = "Impossible d'ouvrir le fichier parametres : fichier formatNomPrenom.ps1"
majLog $chaine
}
# Nombre total de ligne dans le fichier
$ligneTotal = $worksheet.UsedRange.Rows.count
# Modification de la chaine
$colonne = 39
$ligne = 2
# Écrit la chaine dans le fichier paramètre
Write-Host "MAJ PARAMETTRE EN COUR..."
for($ligne = 2; $ligne -le $ligneTotal; $ligne++){
if($worksheet.Cells.Item($ligne, $colonne).Value() -eq " "){
Write-Host $worksheet.Cells.Item($ligne, $colonne).Value()
$worksheet.Cells.Item($ligne, $colonne) = $nom
$newLigne = $ligne
}
}
# Recherche par carractère, ceux à remplacé
Write-Host "RECHERCHE EN COUR..."
$longueur = $nom.Length
$colonne = 45
for($nb = 0; $nb -le $longueur; $nb++){
if($chaine[$nb] -eq "'"){
$nom = $nom -replace $nom[$nb], " "
}
# Parcour des carractères spéciaux
for($ligne = 2; $ligne -le $ligneTotal; $ligne++){
if($worksheet.Cells.Item($ligne, $colonne).Value() -eq $nom[$nb]){
$nom = $nom -replace $nom[$nb], $worksheet.Cells.Item($ligne, ($colonne + 1)).Value()
break
}
}
}
$nom = $nom.ToUpper()
Write-Host "Fermeture du fichier paramètre" -ForegroundColor Red
$workbook.Save()
$workbook.Close()
$excel.Quit()
return $nom
} |
J'exécute cette fonction avec le code suivant dans le fichier "cas2.ps1" :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
# Attributon du nom
$nom = $Salarie.nomRh
# Ligne et colonne de départ dans le fichier paramètres
Write-Host "Formatage du nom" -ForegroundColor Red
$ligne = 2
$colonne = 39
$trouve = $false
for($ligne = 2; $ligne -le $ligneTotal; $ligne++){
if($worksheet.Cells.Item($ligne, $colonne).Value() -eq $nom){
$newNom = $worksheet.Cells.Item($ligne, $colonne).Value()
$trouve = $true
}
}
if($trouve.Equals($false)){
# Ajout d'un nouveau nom et formatage du nom manuelement
$newNom = formatNom $nom
}
$NewSalarie.nom = $newNom |
Quand la fonction est exécuté une première fois ca fonctionne sans problème mais quand elle est exécuté une deuxième fois elle affiche l'erreur suivante :
Pièce jointe 388209
Avez-vous une idée ? :lol:
Merci d'avance