tutorial script ejemplos comandos powershell file-access

script - Necesito ayuda para comprender la seguridad de PowerShell y los problemas de acceso a los archivos



powershell windows 10 (3)

Estoy trabajando con PowerShell, ejecutando un script (desde mi consola) que incluye esta línea:

$inpath = "C:/users/xxxxx/path/foo/bar"

y sigo recibiendo este error:

Get-Content : Access to the path ''C:/users/xxxxx/path/foo/bar'' is denied. At C:/users/xxxxx/path/foo/testscript.ps1:53 char:12 + Get-Content <<<< $txtfile | Get-WordCount -Exclude (Get-Content c:/temp/exclude.txt) | select -First 15 + CategoryInfo : PermissionDenied: (C:/users/xxxxx/path/foo/bar:String) [Get-Content], UnauthorizedAcc essException + FullyQualifiedErrorId : GetContentReaderUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetContentCommand

Los scripts y los archivos de destino se encuentran en mi disco local. Puedo acceder a los archivos en el Explorador, verlos / editarlos / guardarlos usando el Bloc de notas y no tengo ninguna restricción de permisos establecida. Cuando estoy en la línea de comandos, puedo ejecutar el cmdlet get-content correctamente en los archivos de mi ruta. Puedo cambiar los directorios PS C:> cd C:/users/xxxxx/path/foo/bar y listar con éxito lo que hay. Aún más interesante, puedo duplicar la línea de error en la secuencia de comandos y NO recibir un error en la línea de comandos.

PS C:/users/xxxxx/path/foo> $inpath = "C:/users/xxxxx/path/foo/bar" PS C:/users/xxxxx/path/foo>

Esto me hace sospechar que el error ''Permiso denegado'' es en realidad algo más, o algo tan vago que no tengo ni idea de cómo proceder con la resolución de problemas. ¿Es posible que PS tenga permisos diferentes a los del usuario con el que se está ejecutando? ¿Alguien ha visto este comportamiento antes y cómo resolviste el problema? Estoy seguro de que hay una solución simple que no sé.


Get-Content : Access to the path ''C:/users/xxxxx/path/foo/bar'' is denied. At C:/users/xxxxx/path/foo/testscript.ps1:53 char:12

Esa ruta no parece que sea un archivo sino una carpeta.

¿Está seguro de que está agregando el nombre del archivo a la carpeta y de pasarlo a Get-Content ?

Windows da acceso denegado cuando intenta abrir un directorio como si fuera un archivo sin pasar marcas extra; y .NET no pasa esas banderas (existen algunas circunstancias específicas para abrir una carpeta, pero no se aplican aquí).


En lugar de esto: (según su comentario)

foreach ($doc in $inpath) { do-function }

prueba esto:

foreach ($doc in (gci $inpath)) { do-function }

Está haciendo un foreach en un objeto de cadena en lugar de sus elementos de carpeta.


Get-Content lee el contenido del archivo, no de la carpeta. Por favor agregue después de su ruta de su carpeta como a continuación.

Get-Content "D:/Logs/*.*" | ?{($_|Select-String "test")}

Si desea revisar todas las carpetas debajo de él, agregue -recuerda como a continuación:

Get-Content "D:/Logs/*.*" -Recurse | ?{($_|Select-String "test")}