none
Problemas para eliminar directorios\problems to remove directories and files RRS feed

  • Pregunta

  • In the script that I see when I want to delete the directories and files that meet the time conditions I get the following message:

    En el script que se ve cuando quiero eliminar los directorios y ficheros que cumplen las condiciones de tiempo me da el mensaje siguiente:

    "Remove-Item : Cannot retrieve the dynamic parameters for the cmdlet. The specified wildcard character pattern is not valid: 160437.002.[004-012]
    At C:\Windows\System32\MantenimientoNAS.ps1:43 char:36
    + ... e >> $log ; Remove-Item -Path $D.FullName -Recurse:$false -Force -Con ...
    +                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidArgument: (:) [Remove-Item], ParameterBindingException
        + FullyQualifiedErrorId : GetDynamicParametersException,Microsoft.PowerShell.Commands.RemoveItemCommand"

    no sé como resolver esto, me puede alguien echar una mano\I do not know how to solve this, can someone lend me a hand

    Este es el código que uso:

    ############################################################

    $ahora=Get-Date
    #$parametros=@(7,"E:\NAS\Intercambio\","E:\NAS\7"),(90,"E:\NAS\Video\","E:\NAS\90Video"),(181,"E:\NAS\pruebas\","E:\NAS\")
    $parametros=@(7,"E:\NAS\pruebasTMP\","E:\NAS\7"),(0,"E:\NAS\pruebasVIDEO\","E:\NAS\90Video"),(181,"E:\NAS\CrashDesigner","E:\NAS\BitDefender\180Crashdesinger")
    $ruta="E:\NAS\cv.csv"
    $ruta2="E:\NAS\cv2.csv"
    $log="E:\NAS\"
    #Recorro Array
    foreach ($parametro in $parametros)
        {
        #Calculamos la fecha a la partir de la cual borrara ficheros
        $Fantiguedad=$ahora.AddDays(-$parametro[0])
        #Creamos fichero de log
        $flog= $ahora.ToString("yyyyMMdd")
        $log=$parametro[2]+"_"+$flog+".txt"
        $logV=$parametro[2]+"_Vacios_"+$flog+".txt"
        #Control del contenido de las variables
        Write-Host "Dias: " $parametro[0]
        Write-Host "Antiguedad: " $Fantiguedad
        Write-Host "Ruta: " $parametro[1]
        Write-Host "Log: $log"
        Write-Host "LogV: $logV"

        #Busco todos los directorios desde una antiguedad
        $Ds=Get-ChildItem -Path $parametro[1] -Recurse |Where {$_.PSisContainer -like $false} |Where {$_.LastAccessTime -le $Fantiguedad} | select fullname
        foreach ($D in $Ds)
            {
             if ($D -like "*resource*")
                {Write-host "NO eliminar:$D" -ForegroundColor Red}  
             else
                {$D.FullName >> $log ; Write-host "SI eliminar:$D" -ForegroundColor Green; Remove-Item $D.FullName -Recurse:$false -Force -Confirm:$false } #Con la opción confirm eliminas los ocultos también y con confir:$false no muestra msg en pantalla
            }
           
       #Se eliminar las carpetas vacias
       $CV=Get-ChildItem -Path $parametro[1] -Recurse |Where-Object {$_.PSIsContainer -eq $true}
       $CV| Where-Object {($_.GetFiles().Count -eq 0) -and ($_.GetDirectories().Count -eq 0)} |Select-Object Fullname | Export-Csv -LiteralPath $ruta -Force -NoTypeInformation -Encoding UTF8
       Get-Content -Path $ruta | foreach{$_ -replace '"',""} | Out-File $ruta2 -Force -Encoding utf8
      
       #Con esto guardo el log de los ficheros vacios
       Copy-Item $ruta2 $logV
       Do
        {
      $CV=Get-ChildItem -Path $parametro[1] -Recurse |Where-Object {$_.PSIsContainer -eq $true}
      $CV| Where-Object {($_.GetFiles().Count -eq 0) -and ($_.GetDirectories().Count -eq 0)} |Select-Object Fullname | Export-Csv -LiteralPath $ruta -Force -NoTypeInformation -Encoding UTF8
      Get-Content -Path $ruta | foreach{$_ -replace '"',""} | Out-File $ruta2 -Force -Encoding utf8
      $contador=(Get-Content -Path $ruta2 | Measure-Object).Count
      $BCsVs=Get-Content -Path $ruta2
      Write-Host "Contador: $contador"
        foreach ($BCV in $BCsVs)
            {
            Write-Host "Vacias eliminar: $BCV" -ForegroundColor Yellow
            Remove-Item $BCV -Force -Recurse:$false -Confirm:$false
            }
             Write-Host "Contador: $contador" -ForegroundColor Green
        }
           While ($contador -gt 0)
         
      }
    ########################################################################

    Carlos.


    • Editado cdelprado lunes, 5 de febrero de 2018 8:33 eliminar informacion personal
    miércoles, 31 de enero de 2018 9:54

Respuestas

Todas las respuestas

  • For Remove-Item the default value for -Confirm is false, so you don't need to assign $false. Also, you don't need to set -Recurse to $false. Try to get those out of the script:

     {$D.FullName >> $log ; Write-host "SI eliminar:$D" -ForegroundColor Green; Remove-Item $D.FullName -Force }

    https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/remove-item?view=powershell-5.1

    miércoles, 31 de enero de 2018 10:54
  • ok, pero lo he cambiado, en su momento lo puse porque me pedía confirmación en cada fichero que y con el confirmar me lo resolvió...

    En todo caso el problema que me canta tiene que ver con entronarse "[" y "]", eso se le atraganta..

    "Remove-Item : Cannot retrieve the dynamic parameters for the cmdlet. The specified wildcard character pattern is not valid: 160437.002.[004-012]
    At C:\Windows\System32\MantenimientoNAS_test02.ps1:43 char:36
    + ...          {$D.FullName >> $log ; Remove-Item -Path $D.FullName } #Con  ..."


    Carlos.

    miércoles, 31 de enero de 2018 11:15
  • intenta usar el parámetro -LiteralPath:

    Remove-Item -LiteralPath $D.FullName

    • Marcado como respuesta cdelprado lunes, 5 de febrero de 2018 8:29
    miércoles, 31 de enero de 2018 13:00
  • Hola Pablo,

    Muchas gracias con esto ha ido de lujo.

    Gracias otra vez.


    Carlos.

    lunes, 5 de febrero de 2018 8:30
  • de nada, un placer
    lunes, 5 de febrero de 2018 8:44