我正在尝试将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 列。我了解它比代码中的内容要多得多,但要小心一些。
答案 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
}
}