How can I remove the ReadOnly attribute on a file, using a PowerShell (version 1.0) script?
7 Answers
You can use Set-ItemProperty
:
Set-ItemProperty file.txt -name IsReadOnly -value $false
or shorter:
sp file.txt IsReadOnly $false

- 344,408
- 85
- 689
- 683
-
3Set-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
$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
}
Even though it's not Native PowerShell, one can still use the simple Attrib command for this:
attrib -R file.txt

- 17,962
- 11
- 63
- 84
-
Thanks! This worked for me: dir . -r *.cs | % { $_.fullname } | % { attrib -r $_ } – Cameron Taggart Dec 07 '12 at 23:22
-
1Could have skipped a step: dir . -r *.cs | % { attrib -r $_.FullName } – Nathan Hartley Nov 08 '13 at 20:15
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.

- 12,708
- 2
- 36
- 40

- 479
- 6
- 8
-
4Adjust the command (add -File) to only work with files. Directories do not have the property. – Bobby Cannon Jan 21 '15 at 17:44
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

- 194,368
- 42
- 353
- 369
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
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

- 371
- 3
- 12