簡體   English   中英

將差異導出到CSV並與來自單獨CSV PowerShell的列合並

[英]Export Differences to CSV and Combine with Columns from a Separate CSV PowerShell

基本上,我有一個CSV文件,該文件列出了目錄的內容以分析是否缺少任何文件。

CSV文件

目錄內容

我的腳本可以執行此操作,但是我正在嘗試將丟失文件的結果導出到新的CSV文件中。

當前腳本:

#get working directory
$documents = 'C:\Users\Me\Documents\ScriptTest'
#path to files located in the directory
$myFolder = Get-ChildItem 'C:\Users\Me\Documents\Test\1' -Recurse -Include *.txt | 
    Select-Object -ExpandProperty BaseName | 
        Where-Object{$_ -notmatch "\\FolderName\\"}
#get items located in CSV file list column
$myCSV = Import-CSV -Path 'C:\Users\Me\Documents\Test.csv' | 
    Select-Object -ExpandProperty 'File Path'

$CSVexport = '\Users\Me\Documents\Test.csv'

$results=@()
$desiredColumns = @{
        ID = $CSVexport | Select-Object ID 
        'File Path' = $CSVexport | Select-Object 'File Path'
        }

#split the CSV item names
$splits=@()
foreach($file in $myCSV){
  $split = $file.split("\\")[2]
  $split2 = $split.split(".")[0]
  $splits+=$split2
}

#compare the CSV items to the folder items
$compare = Compare-Object -ReferenceObject $splits -DifferenceObject $myFolder -includeequal

Write-Output "`n_____Results____`n"
#Write the results and export to a CSV file
$compare | ForEach-Object {
    if($_.SideIndicator -eq "<="){
        write-host "`n$($_.InputObject) is missing from the Test folder.`n"
        $results = New-Object PSObject -Property $desiredColumns
        $results.'File Path' = $_.InputObject
        $results | Export-Csv -Path C:\Users\Me\Documents\Results.csv –NoTypeInformation
    }
}

我得到的是:

結果

它只會得到丟失的文件之一,而對於“ ID”列則什么也沒有。 我希望能夠獲得比較結果並將其導出到具有第一個CSV文件中相關列的新CSV文件中。 例如:

我在尋找什么

關於我可能做錯的事情,我可以得到一些幫助嗎?


編輯(針對LotPings的回答)

新代碼:

$documents = 'C:\Users\Me\Documents'

$NewCsv = Import-CSV -Path 'C:\Users\Me\Documents\Test.csv' |
    Select-Object ID,'File Path' |  
      ForEach-Object {
        if (!(Test-Path (Join-Path $documents $_.'File Path'))){
          [PSCustomObject]@{
             ID = $_.ID
             Missing = $_.'File Path'
          }
       }
    }
    $NewCsv

輸出:

Name                           Value                                                                           
----                           -----                                                                           
ID                             4                                                                               
Missing                        Test\1\File4.txt                                                                
ID                             6                                                                               
Missing                        Test\1\File6.txt   

極其復雜。

如果您要迭代csv,請檢查每個文件的存在並即時生成一個新的csv,它可以很簡單:

## Q:\Test\2018\05\24\SO_50517360.ps1
$BasePath = "C:\Users\Me\Documents"

$NewCsv = Import-CSV -Path '.\Test.csv'|Select-Object ID,'File Path' |  
  ForEach-Object {
    if (!(Test-Path (Join-Path $BasePath $_.'File Path'))){
      [PSCustomObject]@{
         ID = $_.ID
         Missing = $_.'File Path'
      }
   }
}
$NewCsv

樣本輸出(可以通過以下方式將其放入新文件中
$NewCsv|Export-Csv .\\Missing.csv -NoTypeInformation

> .\SO_50517360.ps1

ID Missing
-- -------
4  Test\1\File4.txt
6  Test\1\File6.txt

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM