По сути, у меня есть файл 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