Bonjour Je suis assez nouveau à Powershell et essayons de construire une série de fonctions qui sont régies par une fonction parente au niveau supérieur. Ce est la fonction que je suis en train de créer:Powershell-Passing dans les paramètres dans une chaîne de fonction
Function TraceIntegrityCheck{
param($MasterTracefile, $FolderWhereATFare)
Le $MasterTraceFile
et $FolderWhereATFare
seront les chemins de fichiers. Je les transmettrai. Voici mon script pour toutes les fonctions internes qui utiliseront les chemins $MasterTraceFile
et $FolderWhereATFare
.
#-------------------------------MasterTraceConfiguration--------------------------
#*********************************************************************************
Function TraceIntegrityCheck{
param($MasterTracefile, $FolderWhereATFare)
[string](cat $MasterTracefile) | Foreach-Object {$_ -replace "\(in\)", ""} | Set- Content 'C:\tempFile.txt'
$src = [IO.File]::ReadAllText('C:\tempFile.txt')
$pattern ='(?<Key>(APDU\s*:\s*80\s*E[68]))\s*(?<Num>(\b[0-9A-F]{2}\s+)+)'
[Regex]::Matches($src, $pattern) | % { [Regex]::Replace($_.Groups ['Key'].Value, 'APDU\s:\s*', '') + ' ' + [Regex]::Replace($_.Groups ['Num'].Value, '\s+', ' ') }|set-content 'C:\tempFile.txt'
$file1 = 'C:\tempFile.txt'
$file2 = 'C:\tempFileMod.txt'
$startValue = '^80 E6'
$innerValue = '^80 E8'
$regex4 = "(?m)\A(?=$startValue)|\r\n(?=$startValue)"
$regex5 = "(?m)$innerValue"
$content = [IO.File]::ReadAllText($file1).TrimEnd()
$content -split $regex4 | Select-Object -Skip 1 |
ForEach-Object -Begin {$i = 1} -Process {
if ($_ -match $regex5) {
$replacement = '{0:00}' -f $i++
$file2 = $file2 -replace '\b(?=\.\w+$)', $replacement
Set-Content -Path $file2 -Value $_ #-Verbose
}
}
#-------------------------------ATF Configuration---------------------------------
#*********************************************************************************
Function allOnOneLine{
(([regex]::replace((get-content $FolderWhereATFare),"\s+"," "))).replace ("9000","`r`n9000`r`n") > $FolderWhereATFare
}
#Call the Function
allOnOneLine
Function StripATF{
$original_file = '$FolderWhereATFare'
$destination_file = 'C:\modatfLinedup.txt'
(Get-Content $original_file) | Foreach-Object {
$_ -replace '9000', ''
} | Set-Content $destination_file
}
#Call the StripATF
StripATF
#And the white space stripper
Function Wspace{
$file1 = 'C:\modatfLinedup.txt'
(gc $file1) | ? {$_.trim() -ne "" } | set-content $file1
}
#Call the Wspace
Wspace
Function spaceStrip{
$r=[regex]' ';
$original_file2 = 'C:\modatfLinedup.txt'
$destination_file2 ='C:\modatfLinedup.txt'
(Get-Content $original_file2) | Foreach-Object {
$_ -replace '^ ', ''
}| Set-Content $destination_file2
}
#Call the Function
spaceStrip
Function folderDistribute{
$file3 = 'C:\modatfLinedup.txt'
$file4 = 'C:\modATFLinedup.txt'
$startValue = '^80 E6'
$innerValue = '^80 E8'
$regex4 = "(?m)\A(?=$startValue)|\r\n(?=$startValue)"
$regex5 = "(?m)$innerValue"
$content = [IO.File]::ReadAllText($file3).TrimEnd()
$content -split $regex4 | Select-Object -Skip 1 |
ForEach-Object -Begin {$i = 1} -Process {
if ($_ -match $regex5) {
$replacement = '{0:00}' -f $i++
$file4 = $file4 -replace '\b(?=\.\w+$)', $replacement
Set-Content -Path $file4 -Value $_ #-Verbose
}
}
#Call the Function
folderDistribute
}
}
C:\Users\nicalder\Desktop\Project1\atf\atf\modatfs\modatf.txt
TraceIntegrityCheck -file1 'C:\Users\user\Desktop\Project1\Master_Trace.txt' - file2 'C:\Users\user\Desktop\Project1\modatf.txt'
Mon problème est d'essayer de chaîne le long de la MasterTraceFile $ original et FolderWhereATFare $ fichiers afin que je puisse les passer dans la fonction et les fonctions de l'enfant tous les utiliser.
Donc, ce que je veux vraiment faire est simplement de pouvoir passer ces deux chemins de fichiers de paramètres afin que les fonctions enfants puissent les utiliser. Je suppose essentiellement créer un constructeur qui me permettra d'utiliser les paramètres de passage. Je sais que cela peut sembler déroutant alors s'il vous plaît laissez-moi savoir ce que vous pensez. J'essaye juste de relier les dossiers par l'intermédiaire des fonctions d'enfants.
Oui merci manojlds! C'est ce que j'essayais de faire et j'ai compris que quand je passe un paramètre je dois passer avec des guillemets pour un chemin de fichier au lieu d'une citation sigle comme ceci: TraceIntegrityCheck "C: \ Users \ nicalder \ Bureau \ Projet1 \ MasterCard_Trace \ MasterCard_Trace.txt "" C: \ Utilisateurs \ nicalder \ Bureau \ Projet1 \ atf \ atf * .txt " Insead: traceIntegrityCheck -file1 'C: \ Users \ nicalder \ Desktop \ Project1 \ MasterCard_Trace \ MasterCard_Trace.txt '-file2' C: \ Utilisateurs \ nicalder \ Desktop \ Project1 \ atf \ atf * .txt 'Merci beaucoup pour votre aide sur celui-ci! Tu gères! –