我有一个从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
声明?
答案 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)) {