Sto usando Powershell 1.0 per rimuovere un elemento da una matrice. Ecco il mio script:Come rimuovere un elemento da un array in PowerShell?
param (
[string]$backupDir = $(throw "Please supply the directory to housekeep"),
[int]$maxAge = 30,
[switch]$NoRecurse,
[switch]$KeepDirectories
)
$days = $maxAge * -1
# do not delete directories with these values in the path
$exclusionList = Get-Content HousekeepBackupsExclusions.txt
if ($NoRecurse)
{
$filesToDelete = Get-ChildItem $backupDir | where-object {$_.PsIsContainer -ne $true -and $_.LastWriteTime -lt $(Get-Date).AddDays($days)}
}
else
{
$filesToDelete = Get-ChildItem $backupDir -Recurse | where-object {$_.PsIsContainer -ne $true -and $_.LastWriteTime -lt $(Get-Date).AddDays($days)}
}
foreach ($file in $filesToDelete)
{
# remove the file from the deleted list if it's an exclusion
foreach ($exclusion in $exclusionList)
{
"Testing to see if $exclusion is in " + $file.FullName
if ($file.FullName.Contains($exclusion)) {$filesToDelete.Remove($file); "FOUND ONE!"}
}
}
mi rendo conto che Get-ChildItem in PowerShell restituisce un tipo System.Array. Ho quindi ottengo questo errore quando si tenta di utilizzare il metodo Remove:
Method invocation failed because [System.Object[]] doesn't contain a method named 'Remove'.
Quello che mi piacerebbe fare è convertire $ filesToDelete a un ArrayList e quindi rimuovere gli elementi utilizzando ArrayList.Remove. È una buona idea o dovrei manipolare direttamente $ filesToDelete come System.Array in qualche modo?
Grazie
(un typo 'PSIsContainere') Sì, preferirei anche" Dove-Oggetto ". Comunque nella domanda ci sono due cicli - l'interno passa attraverso '$ exclusionList' quindi la condizione dovrebbe probabilmente essere qualcosa come' -not $ ($ f = $ _. Fullname; $ exclusionList |? {$ F.Contains ($ _)}) – stej
Grazie Richard, posso usare una serie di stringhe per $ esclusione. Se osservi attentamente il codice, vedrai che dovrei chiamare get-childitem per ogni esclusione. Questo non funzionerebbe bene se ho molte esclusioni. –
@stej: Correggerà il parametro – Richard