22

私は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

スクリプトとターゲットファイルはすべて私のローカルドライブにあります。エクスプローラーでファイルにアクセスし、メモ帳を使用してファイルを表示/編集/保存できますが、アクセス許可の制限は設定されていません。コマンドラインを使用しているときget-contentは、パス内のファイルに対してコマンドレットを正常に実行できます。ディレクトリを変更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>

これにより、「Permission Denied」エラーは実際には別のものであるか、トラブルシューティングを続行する方法がわからないほど漠然としたものであると思われます。PSが、それを実行しているユーザーとは異なる権限を持つことは可能ですか?誰かが以前にこの動作を見たことがありますか、そしてどのように問題を解決しましたか?私にはわからない簡単な解決策があると確信しています。

4

3 に答える 3

45
Get-Content:パス'C:\ users \ xxxxx \ path \ foo\bar'へのアクセスが拒否されました。
C:\ users \ xxxxx \ path \ foo \ testscript.ps1:53 char:12で

そのパスは、ファイルではなくフォルダのように見えます。

ファイル名をフォルダに追加して、それをに渡しますGet-Contentか?

Windowsは、追加のフラグを渡さずにファイルであるかのようにディレクトリを開こうとすると、アクセスが拒否されます。.NETはこれらのフラグを渡しません(フォルダーを開くための特定の状況がいくつかありますが、ここでは適用されません)。

于 2013-01-23T16:22:51.937 に答える
4

Get-Contentは、フォルダではなくファイルの内容を読み取ります。追加してください以下のようにフォルダパスの後に。

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

その下にあるすべてのフォルダを調べたい場合は、次のように-recurseを追加します。

Get-Content "D:\Logs\*.*" -Recurse | ?{($_|Select-String "test")}
于 2015-01-06T20:38:24.147 に答える
0

これの代わりに:(あなたのコメントによると)

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

これを試して:

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

foreachフォルダアイテムの代わりに文字列オブジェクトに対して実行しています。

于 2013-01-23T20:27:26.607 に答える