2009-10-24 44 views

Respuesta

44

Si está utilizando PowerShell v3, puede usar el cmdlet Unblock-File.


El "bloqueo" es simplemente parte de una secuencia de datos alternativa del fichero, llamado "Zone.Identifier". Puede mostrarlo en CMD mediante la redirección de entrada (no hay otra forma de llegar a un arroyo en CMD, sin embargo):

H:\Downloads> more < test.exe:Zone.Identifier 
[ZoneTransfer] 
ZoneId=3 

Puede encontrarlos usando dir /r en Windows Vista y más tarde:

2009-10-24 12:18  54.538.056 test.exe 
           24 test.exe:Zone.Identifier:$DATA 

también en CMD puede fácilmente deshacerse de esa sobrescribiéndolo (usando redirección de la salida, esta vez):

echo.>myDownloadedFile.exe:Zone.Identifier 

que no es bastante lo mismo que eliminar los ADS por completo, pero funciona en ese Explorer ya no se queja.

Parece que no hay soporte nativo para manejar ADS desde dentro de PowerShell (como se menciona en el blog de The PowerShell Guy here. Ese artículo también contiene información sobre cómo obtener esa funcionalidad en PowerShell). Sin embargo, simplemente puede llamar a cmd:

cmd /c "echo.>test.exe:Zone.Identifier" 

Eso también funciona con PowerShell.

Otra opción sería la utilidad streams de Mark Russinovich que le permite inspeccionar los ADS de un archivo y también eliminarlos. Así que

streams -d myDownloadedFile.exe 

funciona también.

+3

. Siento el dolor de @ Geert porque esta publicación no hizo explícito que es tan simple como '\\ live.sysinternals.com \ tools \ streams -d myDownloadedFile.exe '(inspirado en [http://www.hanselman.com/blog/RemovingSecurityFromDownloadedPowerShellScriptsWithAlternativeDataStreams.aspx](sistema de Hanselmans) –

+3

FYI - Powershell 3 lo agrega finalmente mediante el cmdlet Unblock-File - http://technet.microsoft.com/ es-us/library/hh849924.aspx –

+1

Úselo para limpiar una estructura de carpetas completamente borrada -para/F% a in ('dir/r/b/s') do @ echo.>% a: Zone.Identifier: $ DATA –

-2

¿Quieres decir esto:

set-executionpolicy remotesigned 

Esto le permitirá ejecutar secuencias de comandos locales sin que sean firmados, y las remotas si están firmadas. Más información disponible here.

+1

No del todo Kent. Buscando hacer el guión equivalente a hacer clic derecho en el archivo en el explorador y elegir desbloquear. Hizo +1, ya que puedo ver a gente llegando aquí que necesita exactamente eso –

9

El módulo PoshCode incluye funciones Set-DownloadFlag y Remove-DownloadFlag que funcionan como se anuncian. :) 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)

1

escribí una pequeña función que utiliza la API de Win32 para eliminar la secuencia de datos alternativa Zone.Identifier NTFS, que es lo que Windows utiliza para determinar si un archivo es ser bloqueado

.NET no tiene acceso a flujos de datos alternativos por lo que la función utiliza una técnica llamada invocación de plataforma para llamar a la API Win32 nativa.El beneficio de esto sobre algunas otras soluciones para PowerShell es que admite la canalización de PowerShell para que pueda canalizar una lista de rutas de archivos o objetos System.IO.FileInfo a la función. La función tampoco tiene dependencias externas y en realidad elimina la secuencia de datos alternativa en lugar de simplemente eliminar sus contenidos.

http://andyarismendi.blogspot.com/2012/02/unblocking-files-with-powershell.html

5

Oneliner para eliminar Informarion zona (inspirado en respuesta aceptada) para todos los niños (con cita correcta).

get-childitem -rec | % { cmd /c "echo.>""$($_.FullName)"":Zone.Identifier" } 

no responder estrictamente a la pregunta, sólo quiere asegurarse de que la próxima vez que vengo con este problema no es solución ya :).

PS. Funciona en PS 2.0

+1

Nota: no funciona en PS2.0 – user1106405

+1

Server 2008 R2 $ host.version.tostring() -eq '2.0' verdadera Set-executionpolicy 'Bypass' luego ir conseguir-childitem -rec | % {cmd/c "echo.>" "$ ($ _. FullName)" ": Zone.Identifier"} hizo el trabajo –

3

nuevo para publicar en foros como este y este podría ser un tema antiguo, pero esto es lo que estás buscando.

get-item -Path "path to file(s)" -Stream "Zone.Identifier" -ErrorAction "SilentlyContinue" 

Esto debería enumerar los archivos que están bloqueados solamente.

Unblock-File -Path "Path to blocked file(s)" 

Esto los desbloqueará.

0

Voy a tener que modificar la respuesta de Mike: esto no funcionará si hay espacios en $ _ NombreCompleto (por ejemplo, como en "C: \ Archivos de programa")., Así, tiene que ser:

get-childitem -rec | % { cmd /c "echo.>""$($_.FullName)"":Zone.Identifier" } 
0

No he visto ninguna respuesta que parezca utilizar los cmdlets de powershell adecuados para hacer esto.

Aquí podemos encontrar DLL en la carpeta actual que contienen la Zone.Identifier:

Get-Item -Path .\*.dll -stream * | where {$_.Stream -eq "Zone.Identifier" } 

Aquí sólo Zap sólo los flujos no deseados, a diferencia de algunas respuestas anteriores que podrían dañar otras corrientes:

Remove-Item -Path .\*.dll -stream Zone.Identifier 
+1

Remove-Item "-streams" introducido en PS3 https://msdn.microsoft.com /powershell/reference/4.0/microsoft.powershell.core/providers/FileSystem-Provider/Remove-Item-for-FileSystem – OzBob

0

Unblock-file El cmdlet PowerShell debería resolver este problema al desbloquear el archivo, aunque si no tiene el botón de desbloqueo en la ventana de propiedades del archivo.

El cmdlet Unblock-File le permite abrir archivos que se descargaron de Internet. Desbloquea los archivos de script de Windows PowerShell que se descargaron de Internet para que pueda ejecutarlos, incluso cuando la política de ejecución de Windows PowerShell es RemoteSigned. De forma predeterminada, estos archivos están bloqueados para proteger la computadora de archivos no confiables.

Simplemente abra la ventana de PowerShell y siga la sintaxis a continuación. Para encontrar más información acerca de la sintaxis ir a here

Ejemplo:

unblock-file -path C:\Downloads\MyFileName.chm 

Unblock file with PowerShell screen shot

Advertencia: No desbloquear archivos no seguros.

+0

Hola, por favor agregue alguna explicación al código. – Chaithanya

+0

Hola @Chaithanya, tengo un enlace para desbloquear el archivo y agregué una imagen. qué tipo de explicación debo agregar más. ¿Quiere decir cómo abrir la ventana de PowerShell? – Dinch

+0

Hola Dinch, quise pedir agregar un contexto a la respuesta, como una especie de explicación de lo que hace ese código, y como tal. Consulte [aquí] (http://stackoverflow.com/help/how-to-answer) para obtener más información sobre las mejores prácticas para responder en SO. – Chaithanya

0

Si su servidor no tiene Powershell> v3 ($ PSVersionTable.PSVersion.Major -ge 3). A continuación, utilice buenos viejos DOS confiable:

for /f "tokens=*" %f in ('dir /b *.*') do echo.>"%f":Zone.Identifier 
Cuestiones relacionadas