我需要帮助了解PowerShell安全性和文件访问问题

时间:2013-01-23 15:53:08

标签: powershell file-access

我正在使用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是否可能拥有与运行它的用户不同的权限?有没有人见过这种行为,你是怎么解决这个问题的?我确信有一个我不知道的简单解决方案。

3 个答案:

答案 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而不是文件夹项。