我正在使用PowerShell,运行包含以下行的脚本(来自我的控制台):
$inpath = "C:\users\xxxxx\path\foo\bar"
我一直收到这个错误:
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
脚本和目标文件都位于我的本地驱动器上。我可以在资源管理器中访问这些文件,使用NotePad查看/编辑/保存它们,并且没有设置任何权限限制。当我在命令行上时,我可以在路径中的文件上成功运行get-content
cmdlet。我可以更改目录PS C:> cd C:\users\xxxxx\path\foo\bar
并成功列出那里的内容。更有趣的是,我可以复制脚本中出错的行,并且不会在命令行上收到错误。
PS C:\users\xxxxx\path\foo> $inpath = "C:\users\xxxxx\path\foo\bar"
PS C:\users\xxxxx\path\foo>
这让我怀疑“权限被拒绝”错误实际上是别的东西,或者说含糊不清的东西,我不知道如何继续进行故障排除。 PS是否可能拥有与运行它的用户不同的权限?有没有人见过这种行为,你是怎么解决这个问题的?我确信有一个我不知道的简单解决方案。
答案 0 :(得分:29)
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
吗?
当您尝试打开目录时,Windows会拒绝访问,就好像它是一个没有传递额外标志的文件一样;并且.NET没有传递这些标志(打开文件夹有一些特定情况,但这里不适用)。
答案 1 :(得分:4)
Get-Content读取文件而非文件夹的内容。请在您的文件夹路径之后添加。,如下所示。
Get-Content "D:\Logs\*.*" | ?{($_|Select-String "test")}
如果你想通过它下面的所有文件夹,那么添加-recurse如下:
Get-Content "D:\Logs\*.*" -Recurse | ?{($_|Select-String "test")}
答案 2 :(得分:0)
而不是:(根据你的评论)
foreach ($doc in $inpath) { do-function }
试试这个:
foreach ($doc in (gci $inpath)) { do-function }
您正在对字符串对象执行foreach
而不是文件夹项。