I'm sure this has been asked a million times, but I can't figure out why I can't run this simple command in powershell:

PS> new-item -path c:\users\me\desktop\testfolder -name (get-date).txt -value (get-date).toString() -itemtype file

I am forever getting the following error:

New-Item : Access to the path 'C:\Users\Me\desktop\testfolder' is denied.

... PermissionDenied: ... UnauthorizedAccessException
... FullyQualifiedErrorId: NewItemUnauthorizedAccessError,Microsoft.PowerShell...

Anyway,

I've tried ALL of the following, to no avail:

  • Running powershell as Administrator (i.e, "Run as Administrator")
  • Set-ExecutionPolicy RemoteSigned
  • "takeown" on the folder
  • setting the security settings on the folder to: "everyone > full control"
  • -FORCE

Where the heck should I go hunting for an answer next? I'm an administrator on my local machine. This is extremely frustrating not to have rights to do something as simple as creating a stupid text file...

Pulling hair-out...


Solution 1:

The the DateTime string format returned by Get-Date contains characters that can't be used for file names. Try something like this:

new-item -path .\desktop\testfolder -name "$(get-date -format 'yyyyMMdd_HHmm').txt" `
        -value (get-date).toString() -itemtype file

Just change the format string to meet your needs.

Solution 2:

The issue is that -name (get-date).txt is not the same as (get-date) + ".txt". The former will try to read a property named "txt" on the returned System.DateTime object, and the latter will append the string ".txt" to a string representation of the date. In the former, .txt as a property returns $null because it does not exist. This, in turn, means you're trying to effectively run new-item -path .\desktop\folder which returns access denied because folder already exists.