在Powershell中,将图像文件夹与CSV文件进行比较。

问题描述 投票:0回答:1

好的,我们正在建立一个卡片访问系统,该系统可以查看活动目录用户的缩略图照片属性。我正在创建一个审计系统,该系统可以导出用户并将其与JPG图像进行比较。如果图像存在,但没有相关的用户,它就会将图像移动到一个存档中进行审查。我们的目标是将老员工的照片移到一个文件夹中,以备日后招聘时使用。如果图片与CSV中的名字相匹配,我就无法将其移动到另一个文件夹中。以下是整个代码。

<#Write Users to a CSV File #>
$adUsers = get-aduser -filter * -properties displayname | select displayname | export-csv -path PATHWAY.CSV -notypeinformation -encoding unicode
$keepImages = @()
$removeImages = @()

[System.Collections.ArrayList]$arrA = (Get-Childitem -Filter * -path PATHWAY).Basename
[System.Collections.ArrayList]$arrB = Get-Content PATHWAY.CSV

foreach ($itemA in $arrA) {
if ($arrB -ne $itemA) {
$arrB.Remove($itemA)
$removeImages += $itemA }}

$removeImages |out-file -FilePath PATH.csv

<# PUT THE FILES INTO AN ARCHIVE #>

--不能让它移动到这里,注意我是Powershell的新手,它和python完全不一样... ...

powershell active-directory
1个回答
0
投票

你可以试试这个。我已经添加了内联注释,希望能解释它是如何工作的。

$ImagesFolder  = 'D:\UserImages'
$OldUserImages = 'D:\UserImages\OldUsers'

# test if the path to move old images exists and if not create it
if (!(Test-Path -Path $OldUserImages -PathType Container)) {
    $null = New-Item -Path $OldUserImages -ItemType Directory
}

# get a list of ADUser display names
$adUsers = Get-ADUser -Filter * -Properties DisplayName | Select-Object -ExpandProperty DisplayName

# get an array of FileInfo objects of the user images currently in the $ImagesFolder. 
# filter out only those that do not have a basename that correlates to any of the users DisplayName
# and move these to the $OldUserImages folder.

# Tip: if for instance all are of type JPG, add -Filter '*.jpg' to the Get-ChildItem cmdlet.
Get-ChildItem -Path $ImagesFolder -File | 
    Where-Object { $adUsers -notcontains $_.BaseName } | 
    Move-Item -Destination $OldUserImages -Force

如果你想跟踪你移动过的图片 你可以扩展上面的功能,比如:

$moved = Get-ChildItem -Path $ImagesFolder -File | 
    Where-Object { $adUsers -notcontains $_.BaseName } | 
    ForEach-Object {
        $file = $_.FullName
        $_ | Move-Item -Destination $OldUserImages -Force
        [PsCustomObject]@{
            'File'    = $file
            'MovedTo' = $OldUserImages
        }
    }

# show result on screen
$moved | Format-Table -AutoSize

# write to CSV file
$out = '{0:yyyy-MM-dd}_MovedImages.csv' -f (Get-Date)
$moved | Export-Csv -Path (Join-Path -Path $ImagesFolder -ChildPath $out) -NoTypeInformation
© www.soinside.com 2019 - 2024. All rights reserved.