2013-01-23 8 views
15

나는 (내 콘솔에서) 스크립트를 실행, PowerShell과 함께 일하고 있어요 :나는 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 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

어떻게 스크립트 어떤 권한을 실행? 작업 스케줄러의 작업? 콘솔에서 스크립트를 호출하면 스크립트가 작동합니까? –

+0

어떤 파일을 읽으려고하십니까? (폴더에 액세스 할 수는 있지만 폴더에 들어있는 파일에는 액세스 할 수 없습니다.) – Richard

+0

@Graimer - 스크립트가 콘솔에서 실행 중입니다. 스크립트에 어떤 사용 권한이 있는지, 내 사용자 권한과 다른 경우이를 설정하거나 설정하는 방법을 모릅니다. 콘솔에서 AS SCRIPT (예 : PS c : \ foo>. \ script.ps1)에서 작동하지 않지만 콘솔 프롬프트로 개별 회선을 입력하면 작동합니다. – dwwilson66

답변

23
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은 해당 플래그를 전달하지 않습니다 (폴더를 여는 몇 가지 특정 상황이 있지만 여기서는 적용되지 않습니다). 대신이의

+0

당신은'$ inpath' 경로입니다. 스크립트는 경로와 함께'foreach'를 사용합니다 ... foreach ($ inpath (do-function)에있는 $ doc)'. 내가 완벽하게 작동하는 이전 스크립트에서이 코드를 재활용했습니다 ... - dwwilson66 – dwwilson66

+0

@ dwwilson66 : 변수에 대해 이야기하는 것이 좋습니다 : * 오류 메시지 *를 살펴보면, 경로가'Get - 헌정 '을 열 수 없습니다. – Richard

0

: (귀하의 코멘트에 따라)

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

이 시도 : 당신은 대신 폴더 항목의 문자열 객체에 foreach을하고

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

.

3

Get-Content 파일이 아닌 폴더의 내용을 읽습니다. 을 추가하십시오. 아래의 폴더 경로 다음에을 입력하십시오.

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

당신이 그 다음 아래와 같이 -recurse 추가 아래에있는 모든 폴더 방식을 통해 이동하려면 다음

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

Get-Content에 -Recurse 매개 변수가 없습니다. – dzampino