$_
の値は、のForEach-Object
ループではまだ完全にはわかりません。だから私は2つのcsvファイルの間でレコードをマージする方法がわかりません(レコードをマージする方法がわからない)。Import-Csvは文字列にレコードを割り当てます(csvファイルをメモ帳として開くと表示されます)
私は文字列として2つのCSVファイルの両方から$_
を割り当て、その後、ラインとして2つの文字列をマージすることについて考えたが、私はそれが@{column1 = value1_1; column2 = value2_1}
のような奇妙な何かにつけず、文字列の中に$_
を変換する方法を確信していますvs "value1_1","value2_1"
私はこれが最善の解決策であるかどうか、あるいはPowerShellが両方のレコード(ハッシュテーブルのように見える)をマージすることをサポートするかどうかは不明です。ライン62($MergedFileTable += $userInputRecord + $record
)で
次のコードのエラーアウト:
Function Main
{
$userInputCsvTable = Import-Csv 'C:\Scripts\Tests\TestCurrent\UserInput.csv'
$userInputCsvFile = 'C:\Scripts\Tests\TestCurrent\UserInput.csv'
$DatabaseCsvTable = Import-Csv 'C:\Scripts\Tests\TestCurrent\DatabaseReport.csv'
$DatabaseCsvFile = 'C:\Scripts\Tests\TestCurrent\DatabaseReport.csv'
$DatabaseCustomCsvFile = 'C:\Scripts\Tests\TestCurrent\DatabaseReport_Custom.csv'
$MergedFileTable = @{}
$MergedFile = 'C:\Scripts\Tests\TestCurrent\Merged.csv'
[String]$UserInputColumnIDsTitle = 'IDs'
[String]$UserInputColumnLastNameTitle = 'Last Name'
[String]$UserInputColumnFirstNameTitle = 'First'
[String]$DatabaseColumnUserLoginTitle = 'User Login'
[String]$DatabaseColumnFirstNameTitle = 'First Name'
[String]$DatabaseColumnLastNameTitle = 'Last Name'
[String]$DatabaseColumnUserStatusTitle = 'User Status'
[String]$DatabaseColumnDomain1Title = 'Domain1'
[String]$DatabaseColumnDomain2Title = 'Domain2'
[String]$DatabaseColumnDomain3Title = 'Domain3'
[String]$DatabaseColumnDomain4Title = 'Domain4'
[String]$DatabaseColumnDomain5Title = 'Domain5'
[String]$DatabaseColumnDomain6Title = 'Domain6'
Write-Host "Gathering one list of first and last names from file: $userInputCsvFile..."
[String[]]$userInputColumnsLastAndFirstNames = @()
$userInputCsvTable | ForEach-Object {
$userInputColumnsLastAndFirstNames += $_.$UserInputColumnLastNameTitle + ' ' + $_.$UserInputColumnFirstNameTitle
}
Write-Host "Complete."
Write-Host "Getting Number of Names..."
[Int]$numOfNames = $userInputColumnsLastAndFirstNames.Length
Write-Host "Complete."
Write-Host "Creating new Database table only with first and last names in list (side-by-side)..."
[Int]$DisplayCounter = 0
$DatabaseCsvTable | ForEach-Object {
$DisplayCounter++
If ($DisplayCounter % 10000 -eq 0)
{
Write-Host 'On record ' $DisplayCounter
}
If ($userInputColumnsLastAndFirstNames -contains ($_.$DatabaseColumnLastNameTitle + ' ' + $_.$DatabaseColumnFirstNameTitle))
{
$_
}
} | Export-Csv $DatabaseCustomCsvFile -NoTypeInformation -Force
Write-Host "Complete."
Write-Host "Creating merged file with duplicate records found..."
$DatabaseCustomCsvTable = Import-Csv $DatabaseCustomCsvFile
$userInputCsvTable | ForEach-Object {
$userInputRecord = $_
$firstName = $_.$UserInputColumnFirstNameTitle
$lastName = $_.$UserInputColumnLastNameTitle
$matchedTable = $DatabaseCustomCsvTable | Where-Object {($firstName -eq $_.$DatabaseColumnFirstNameTitle) -and ($lastName -eq $_.$DatabaseColumnLastNameTitle)}
If ($matchedTable)
{
ForEach ($record in $matchedTable)
{
$MergedFileTable += $userInputRecord + $record
}
}
}
Write-Host "Complete."
Write-Host "Exporting "
$MergedFileTable | Export-Csv $MergedFile -Force -NoTypeInformation
}
Main
エラー:
Method invocation failed because [System.Management.Automation.PSObject] doesn't contain a method named 'op_Addition'.
At C:\Scripts\Tests\TestCurrent\test1.ps1:62 char:5
+ $MergedFileTable += $userInputRecord + $record
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (op_Addition:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
任意のアイデアをどのようにこれを行うには?