1

Hello I am fairly new to Powershell and are trying to construct a series of functions that are governed by a parent function at the top level. This is the function that I am creating:

Function TraceIntegrityCheck{
    param($MasterTracefile, $FolderWhereATFare)

The $MasterTraceFile and $FolderWhereATFare will be file paths. I will pass these in. Below is my script for all of the inner functions that will use the $MasterTraceFile and $FolderWhereATFare paths.

#-------------------------------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'

My problem lies in trying to string along the original $MasterTraceFile and $FolderWhereATFare files so that I can pass them into the function and have the child functions all use them.

So what I really want to do is just be able to pass in these two parameter file paths so that the child functions can use them. I guess essentially create a constructor that will allow me to use the passing in parameters.

I know this may appear as confusing so please let me know what you think. I am just trying to connect the files through the children functions.

1 Answer 1

3

It seems like you want to do something like:

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

    inner 2

}

outer 1

The above does print:

1
2

That is, the $a from outer function is available in inner function

Sign up to request clarification or add additional context in comments.

1 Comment

Yes thank you manojlds! This is what I was trying to do and I figured out that when I pass in a parameter I have to pass in with double quotes for a file path instead of a sigle quote like this: TraceIntegrityCheck "C:\Users\nicalder\Desktop\Project1\MasterCard_Trace\MasterCard_Trace.txt" "C:\Users\nicalder\Desktop\Project1\atf\atf*.txt" Insead of this: traceIntegrityCheck -file1 'C:\Users\nicalder\Desktop\Project1\MasterCard_Trace\MasterCard_Trace.txt' -file2 'C:\Users\nicalder\Desktop\Project1\atf\atf*.txt' Thanks so much for your help on this one! You rock!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.