Bonjour a tous,

J'ai plusieurs questions autour du PowerShell, je suis technicien IT.
Jusqu'à maintenant j'ai toujours réussi à utiliser PowerShell, Bat et autre langages dans le web.

Donc mon problème est sur le langage PowerShell, pour un besoin particulier, je suis obligé de "spliter" des functions en plusieurs fichiers, tous ça pour mettre en multilingue mes scripts !

Dans le concret et pour l'exemple :

Voici mon fichier exemple, le code copié se trouve sur le site : https://www.supinfo.com/articles/sin...gue-powershell


monfichier.ps1
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
 
Function PrepareFRString() 
{
    $FR.Main = "Bonjour <XXX>, vous avez choisi le Français"
    $FR.Question = "Comment t'appelles-tu ?"
    $FR.Console = "Terminé"
    $FR.End = "Au revoir"
}
 
Function PrepareENString() 
{
    $EN.Main = "Hello <XXX>, you’ve choose English"
    $EN.Question = "What’s your name ?" 
    $EN.Console = "Over"
    $EN.End = "See You"
}
 
Function PrepareITString()
{
    $IT.Main = "Buongiorno <XXX>, avete scelto Italiano" 
    $IT.Question = "Come ti chiami ?"
    $IT.Console = "Finito"
    $IT.End = "Ciao"
}
 
Function PrintText($id)
{
    # récupérer la chaîne $id en Français, en Anglais ou en Italien
    Switch($Lang){
        "FR"{$text = $FR.$id } 
        "EN"{$text = $EN.$id }
        "IT"{$text = $IT.$id }
        Default {Return ("ERROR")}}
    #Remplacer les placeholders par le texte attendu
    $regexp = [regex]'<XXX>'
    foreach ($arg in $args)
    { $text = $regexp.Replace($text, [String]$arg,1) }
    return $text}
 
Function WriteToFile($text,$space)
{
    if($space -eq "before"){Write-Output "" $text | Out-File $ReportFile -Encoding utf8 -append}
    elseif($space -eq "after"){Write-Output $text "" | Out-File $ReportFile -Encoding utf8 -append}
    elseif($space -eq "both"){Write-Output "" $text "" | Out-File $ReportFile -Encoding utf8 -append}
    else{Write-Output $text | Out-File $ReportFile -Encoding utf8 -append}
}
 
Function NameFile
{
    $computerName = [system.environment]::MachineName
    $date = Get-date -format "dd_MM_yyyy"
    $hour = Get-Date -Format "HH_mm_ss"
    $fileName = "$computerName-$Lang-$hour-$date.txt" #nom du fichier
    return $FileName
}
 
Function AskName
{
    Write-Host (PrintText Question)
    $name = Read-Host
    return $name
}
 
$FR = @{}
$EN = @{}
$IT = @{}
 
Write-Host @"
===============================
| Welcome/Bienvenue/Benvenuti |
===============================
"@ -ForegroundColor Yellow
Do{
     Write-Host "`nPlease select your Language :" -ForegroundColor Yellow
     Write-Host  "`n1. Francais`n2. English`n3. Italiano`n4. Exit`n"
     $Language = Read-Host
     switch ($Language){
           1 {$Lang = "FR"
              PrepareFRString}
           2 {$Lang = "EN"
              PrepareENString}
           3 {$Lang = "IT"
              PrepareITString}
           4 {Read-Host "See You/Au revoir/Ciao"
                Exit}}}
While ($Language -notin 1..4)
 
$Name = AskName
$reportFile = NameFile
 
WriteToFile (PrintText Main $Name) "after"
WriteToFile (PrintText End)
Write-Host (PrintText Console)

Le but est de prendre les functions de langue qu'on trouve au début du code, pour en créer des fichiers séparés :

french.ps1
Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
Function PrepareFRString() 
{
    $FR.Main = "Bonjour <XXX>, vous avez choisi le Français"
    $FR.Question = "Comment t'appelles-tu ?"
    $FR.Console = "Terminé"
    $FR.End = "Au revoir"
}

english.ps1
Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
Function PrepareENString() 
{
    $EN.Main = "Hello <XXX>, you’ve choose English"
    $EN.Question = "What’s your name ?" 
    $EN.Console = "Over"
    $EN.End = "See You"
}

et pour couronner le tout dans un dossier lang, ce qui me donne la structure comme suit :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
RootDirectory
|   monfichier.ps1
|
+---lang
|   |   french.ps1
|   |   english.ps1
et là je ne sais pas comment faire ! Dans le web pour du CSS, ou même JS, il suffit de faire un <link rel="stylesheet" type="text/css" href="mystyle.css">, pour PHP c'est plutôt un include 'myfunctions.php' mais dans PowerShell … je ne sais pas, et là j'ai vraiment besoin d'aide…

Bien-sûr j'ai essayé avec un Import-module .\lang\french.ps1 -Force mais sans succès..


Par avance merci pour votre aide !