Powershell - 根据数组值删除文件夹中的子文件夹

时间:2016-04-07 18:36:45

标签: powershell powershell-v4.0

我有一个从PowerShell可执行文件中的PHP脚本返回的数组值列表。这些值对应于Windows Server上的活动项目。我的C:/驱动器中有一个项目文件夹,其中包含已由该服务器处理的每个项目的子文件夹。结构看起来像这样:

/project-files
    /1
    /2
    /3
    /4

上述信号表示服务器到目前为止已处理了四个项目。

我运行一个Scheduled Task Powershell脚本,每天清除project-files文件夹。当我运行脚本时,我只想删除与当前未在服务器上运行的项目相对应的子文件夹。

我有以下Powershell:

$active_projects = php c:/path/to/php/script/active_projects.php
if($active_projects -ne "No active projects"){
    # Convert the returned value from JSON to an Powershell array
    $active_projects = $active_projects | ConvertFrom-Json
    # Delete sub folders from projects folder
    Get-ChildItem -Path "c:\project-files\ -Recurse -Force |
    Select -ExpandProperty FullName |
    Where {$_ -notlike 'C:\project-files\every value in $active_projects*'}
    Remove-Item -Force
}

如果子文件夹编号对应project-files数组中的项目编号,我想排除$active_projects文件夹中的子文件夹被删除。

我如何在此处撰写Where声明?

1 个答案:

答案 0 :(得分:2)

您应该使用-notcontains运算符来查看每个项目是否都列为活动项目。在下文中,我假设PHP脚本中的JSON字符串返回字符串列表。

$active_projects = php c:/path/to/php/script/active_projects.php

if ($active_projects -ne "No active projects") {

  # Convert the returned value from JSON to a PowerShell array
  $active_projects = $active_projects | ConvertFrom-Json

  # Go through each project folder
  foreach ($project in Get-ChildItem C:\project-files) {

    # Test if the current project isn't in the list of active projects
    if ($active_projects -notcontains $project) {

      # Remove the project since it wasn't listed as an active project
      Remove-Item -Recurse -Force $project
    }  
  }
}

但是,如果您的JSON数组是整数列表,那么测试行应该是:

    if ($active_projects -notcontains ([int] $project.Name)) {