Solución:
Si usa PowerShell v3, puede usar el Unblock-File
cmdlet.
La parte de “bloqueo” es simplemente un flujo de datos alternativo del archivo, llamado “Zone.Identifier”. Puede mostrarlo en CMD utilizando la redirección de entrada (aunque no hay otra forma de acceder a una secuencia en CMD):
H:Downloads> more < test.exe:Zone.Identifier
[ZoneTransfer]
ZoneId=3
Puedes encontrarlos usando dir /r
en Windows Vista y posterior:
2009-10-24 12:18 54.538.056 test.exe
24 test.exe:Zone.Identifier:$DATA
También en CMD puede deshacerse de eso fácilmente sobrescribiéndolo (usando la redirección de salida, esta vez):
echo.>myDownloadedFile.exe:Zone.Identifier
que no es bastante lo mismo que eliminar el ADS por completo, pero funciona en ese Explorer ya no se queja.
No parece haber soporte nativo para manejar ADS desde PowerShell (como se menciona en el blog de The PowerShell Guy aquí. Ese artículo también tiene información sobre cómo obtener esa funcionalidad en PowerShell). Sin embargo, podría simplemente llamar a cmd:
cmd /c "echo.>test.exe:Zone.Identifier"
Eso también funciona desde PowerShell.
Otra opción sería la de Mark Russinovich streams
utilidad que le permite inspeccionar los ADS de un archivo y también eliminarlos. Entonces
streams -d myDownloadedFile.exe
también funciona.
El módulo PoshCode incluye funciones Set-DownloadFlag y Remove-DownloadFlag que funcionan como se anuncia. 🙂 Acabo de sacar esa pieza en su propia contribución de script http://poshcode.org/1430 … también funcionará en PowerShell 1, si usa la función New-Type en lugar de Add-Type ( http://poshcode.org/720)
Oneliner para eliminar la información de la zona (inspirada en la respuesta aceptada) para todos los niños (con las citas correctas).
get-childitem -rec | % { cmd /c "echo.>""$($_.FullName)"":Zone.Identifier" }
No es una respuesta estricta a la pregunta, solo quiero asegurarme de que la próxima vez que se me ocurra este problema ya haya una solución :).
PD. Funciona en PS 2.0