PowerShell删除与用户名数组不匹配的文件

时间:2018-03-26 14:22:17

标签: arrays powershell

我有一个简单的数据库查询,它返回当前用户的数组 例如 ABB016
ACQ002
AGU003
AHM007

我想删除特定文件夹中所有文件,这些文件的名称在文件结尾(BaseName)的左侧,但在此数组中找不到。

以下代码是我目前的代码,但目前它将删除此目录中的所有文件

# Find files that do not have the same basename as current users' name and delete
Get-ChildItem -path $DirectoryWithFiles -rec *.* | Where-Object {
      $SQLQeryResultsSet -NotContains $_.BaseName } | 
   Remove-Item -WhatIf

如果:执行操作"删除文件"目标" ABB016.pdf"。

如果:执行操作"删除文件"目标" ACQ002.pdf"。

如果:执行操作"删除文件"目标" AGU003.pdf"。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

正如您的评论所示,$SQLQeryResultsSet不是字符串数组,而是DataTable

您可以从每个数据行的第一列中提取单个字符串值,如下所示:

$ExcludedUsers = $SQLQeryResultsSet |ForEach-Object { '{0}' -f $_.Item(0) }

然后在$SQLQeryResultsSet过滤器scriptblock中使用此新变量代替Where-Object