1

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.

Répondre

3

Il semble que vous voulez faire quelque chose comme:

function outer($a) { 
    function inner($b){ 
     write-host -fore red $a 
     write-host -fore red $b 
    } 

    inner 2 

} 

outer 1 

Le fait ci-dessus print:

1 
2 

C'est, la $a de outer fonction est disponible en inner fonction

+0

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! –

Questions connexes