将csv文件与文件夹文件进行比较

时间:2018-07-02 19:23:09

标签: powershell csv compare

我正在尝试将csv文件与以下信息进行比较:

User1,ID1
User2,ID2
User3,ID3

到包含许多文件夹的文件夹文件,这些文件夹的名称与csv文件的第一列相同。

到目前为止,我已经有了这段代码,但是无法正常工作。

$input = Import-Csv 'C:\Users\csv\list.csv' -Header "Users","ID"

$folder = Get-ChildItem H:\Test | Sort-Object name

$compare = Compare-Object -ReferenceObject $input.Users -DifferenceObject $folder -IncludeEqual

if(($input.Users).SideIndicator -eq "=="){
    echo "true"
}else{
    echo "false"
}

最终,我的目标是将csv的 header 列与文件夹进行比较,看看它是否具有相同的名称,如果是的话,请向匹配的文件夹添加新的权限,并使用ID中的ID CSV的第二个 header 列。我了解它比代码中的内容要多得多,但要小心一些。

2 个答案:

答案 0 :(得分:0)

因此,当您执行Get-ChildItem时,结果是对象数组。这些是dotnet对象,其所有属性,方法等都可以使用。

$folders = Get-ChildItem C:\Windows -Directory
foreach($line in $csv) { 
    $folder = $folders | Where-Object {$_.Name -eq $line.Name}
    if($folder -ne $null){
        #ACL magic goes here, there are a number of articles on this
    }
}

答案 1 :(得分:0)

为什么要比较?您将不得不迭代结果。我将迭代csv并使用用户名进行Test-Path。

$BaseDir = 'H:\Test'
$input = Import-Csv 'C:\Users\csv\list.csv' -Header "User","ID"

ForEach-Object ($Item in $input){
    $UserPath = Join-Path $BaseDir $Item.User
    If (Test-Path $UserPath -PathType Container){
        "User {0}  ID {1} Folder {2} exists" -f $Item.User,$UserPath,$Item.ID
    } else {
        # possibly create the folder
    }
}