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")}