'Permission errors in PowerShell
I am new to PowerShell. When trying to write a simple script that deletes the contents of a folder and then fills it with files copied from a different folder, I always get a PermissionDenied error.
Details:
+ remove-item <<<< D:\path\* -recurse
+ CategoryInfo : PermissionDenied: (save.gif:FileInfo) [Remove-Item], IOException
+ FullyQualifiedErrorId : RemoveFileSystemItemUnAuthorizedAccess,Microsoft.PowerShell.Commands.RemoveItemCommand
Where is the problem? I am able to manipulate both folders through Explorer. The error occurs both when running from a script file and from shell (using Windows PowerShell ISE). The ISE process runs under my account. I'm running Windows 7 Professional and am a local administrator.
Edit: After Richard's suggestion, I tried the verbose mode (which seemed to have no effect).
PS Z:\> $error[0] | fl * -force
PSMessageDetails :
Exception : System.IO.IOException: Not Enough permission to perform operation.
TargetObject : D:\path\file.txt
CategoryInfo : PermissionDenied: (D:\path\file.txt:FileInfo) [Remove-Item], IOException
FullyQualifiedErrorId : RemoveFileSystemItemUnAuthorizedAccess,Microsoft.PowerShell.Commands.RemoveItemCommand
ErrorDetails : Cannot remove item D:\path\file.txt: Not Enough permission to perform operation.
InvocationInfo : System.Management.Automation.InvocationInfo
PipelineIterationInfo : {0, 1}
I don't see anything of much use there (but thanks for the tips anyway).
Edit 2: Okay, here's the script source:
remove-item D:\path_A\* -recurse
copy-item D:\path_B\* D:\path_A\
That's it. The remove-item seems to throw at every file.
Solution 1:[1]
Have you try :
remove-item D:\path_A\* -recurse -force
Solution 2:[2]
In addition to reasons mentioned in the above posts, i've observed that "Access Denied" error is thrown when the file is being accessed by a separate process (In my case, i had to stop the server before Rename-Item could be run successfully).
Solution 3:[3]
After this error (and assuming at that point in it the most recent error):
$error[0] | fl * -force
will expand the details of the error and exception. That should give you more information.
Another thing to do is to switch on verbose logging
$VerbosePreference = "Continue"
to get more details about specifically what operation is being performed when the error occurs.
Finally PowerShell ISE includes a debugger which allows you to step through your script.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | JPBlanc |
| Solution 2 | aazeem |
| Solution 3 | Richard |
