102

How can I remove the ReadOnly attribute on a file, using a PowerShell (version 1.0) script?

Kiquenet
  • 14,494
  • 35
  • 148
  • 243
Tangiest
  • 43,737
  • 24
  • 82
  • 113

7 Answers7

149

You can use Set-ItemProperty:

Set-ItemProperty file.txt -name IsReadOnly -value $false

or shorter:

sp file.txt IsReadOnly $false
Joey
  • 344,408
  • 85
  • 689
  • 683
  • 3
    Set-Property is the only built-in way you can cleanly do it on the pipeline, and using wildcards: { sp *.txt IsReadOnly $false } OR { ls . -recurse -include *.cs | sp -name IsReadOnly -value $false } – Jaykul May 27 '09 at 14:45
  • Using PowerShell v2 I'm seeing hard-to-use CmdLet bindngs for sp. PSCX Set-Writable and Set-ReadOnly don't have those problems. I'll blog the problems I'm seeing and link to it later. I recommend Keith's answer for PowerShell v2 (modern PowerShell). – yzorg Apr 21 '11 at 22:39
  • 3
    @yzorg: So what exactly are you telling me here? As for Keith's answer, he's using PSCX. Not everyone has those installed and that's not really a case of PowerShell v1 vs. v2. – Joey Apr 22 '11 at 09:28
17
$file = Get-Item "C:\Temp\Test.txt"

if ($file.attributes -band [system.IO.FileAttributes]::ReadOnly)  
{  
  $file.attributes = $file.attributes -bxor [system.IO.FileAttributes]::ReadOnly    
}  

The above code snippet is taken from this article

UPDATE Using Keith Hill's implementation from the comments (I have tested this, and it does work), this becomes:

$file = Get-Item "C:\Temp\Test.txt"

if ($file.IsReadOnly -eq $true)  
{  
  $file.IsReadOnly = $false   
}  
Community
  • 1
  • 1
Tangiest
  • 43,737
  • 24
  • 82
  • 113
16

Even though it's not Native PowerShell, one can still use the simple Attrib command for this:

attrib -R file.txt
Scott Saad
  • 17,962
  • 11
  • 63
  • 84
12

or you can simply use:

get-childitem *.cs -Recurse -File | % { $_.IsReadOnly=$false }

Above will work for all .cs files in sub-tree of current folder. If you need other types included then simply adjust "*.cs" to your needs.

henrycarteruk
  • 12,708
  • 2
  • 36
  • 40
Mariusz Gorzoch
  • 479
  • 6
  • 8
7

If you happen to be using the PowerShell Community Extensions:

PS> Set-Writable test.txt
PS> dir . -r *.cs | Set-Writable
# Using alias swr
PS> dir . -r *.cs | swr

You can do the opposite like so:

PS> dir . -r *.cs | Set-ReadOnly
# Using alias sro
PS> dir . -r *.cs | sro
Keith Hill
  • 194,368
  • 42
  • 353
  • 369
2
Shell("net share sharefolder=c:\sharefolder/GRANT:Everyone,FULL")
Shell("net share sharefolder= c:\sharefolder/G:Everyone:F /SPEC B")
Shell("Icacls C:\sharefolder/grant Everyone:F /inheritance:e /T")
Shell("attrib -r +s C:\\sharefolder\*.* /s /d", AppWinStyle.Hide)

thanks for anybody who are helping to solved some problem...and helping this code

this code is working for me.. to share a folder to every one with read and write permission you can use this in .net

falsetru
  • 357,413
  • 63
  • 732
  • 636
redz
  • 21
  • 1
1

None of the solutions above change the READONLY status of folders and files but this PowerShell script does based on the following powershell commands.

Query the READONLY status of a folder (via the DirectoryInfo object)

$roStatus = $dirInfo.Attributes -match 'ReadOnly'

Change the READONLY status of a folder (via the DirectoryInfo object)

$dirInfo.Attributes += 'ReadOnly'
$dirInfo.Attributes -= 'ReadOnly'

Query the READONLY status of a file (using the file name)

$roStatus = Get-ItemPropertyValue -Path $strFileName -Name IsReadOnly

Change the READONLY status of a file (using the file name)

Set-ItemProperty -Path $strFileName -Name IsReadOnly -Value $false
skinnedknuckles
  • 371
  • 3
  • 12