こんにちは、私は Powershell を初めて使用し、最上位の親関数によって管理される一連の関数を構築しようとしています。これは私が作成している関数です:
Function TraceIntegrityCheck{
param($MasterTracefile, $FolderWhereATFare)
$MasterTraceFile
とは$FolderWhereATFare
ファイルパスになります。$MasterTraceFile
これらを渡します。以下は、および$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'
私の問題は、元の $MasterTraceFile および $FolderWhereATFare ファイルに沿って文字列を作成して、それらを関数に渡し、子関数がすべてそれらを使用できるようにすることにあります。
したがって、私が本当にやりたいことは、これら 2 つのパラメーター ファイル パスを渡して、子関数がそれらを使用できるようにすることです。基本的に、パラメーターの受け渡しを使用できるコンストラクターを作成すると思います。
わかりにくいと思われるかもしれませんので、ご意見をお聞かせください。子関数を介してファイルを接続しようとしています。