# encoding: ascii # api: powershell # title: Test if file is writable # description: Function to test if a file is writable. Uses the .openwrite() method to test and returns a boolean. # version: 0.1 # type: function # author: JimbobNet # license: CC0 # function: Test-IsWritable # x-poshcode-id: 2236 # x-archived: 2015-08-22T00:53:48 # x-published: 2011-09-16T07:01:00 # # Supports -verbose parameter and inline help. # Path can be provided as a string or as an object to the file. # Pipeline input is supported. e.g. $bar | get-IsWriteable # Just updated this to give it the name it should have had to start with… # function Test-IsWritable(){ <# .Synopsis Command tests if a file is present and writable. .Description Command to test if a file is writeable. Returns true if file can be opened for write access. .Example Test-IsWritable -path $foo Test if file $foo is accesible for write access. .Example $bar | Test-IsWriteable Test if each file object in $bar is accesible for write access. .Parameter Path Psobject containing the path or object of the file to test for write access. #> [CmdletBinding()] param([Parameter(Mandatory=$true,ValueFromPipeline=$true)][psobject]$path) process{ Write-Verbose "Test if file $path is writeable" if (Test-Path -Path $path -PathType Leaf){ Write-Verbose "File is present" $target = Get-Item $path -Force Write-Verbose "File is readable" try{ Write-Verbose "Trying to openwrite" $writestream = $target.Openwrite() Write-Verbose "Openwrite succeded" $writestream.Close() | Out-Null Write-Verbose "Closing file" Remove-Variable -Name writestream Write-Verbose "File is writable" Write-Output $true } catch{ Write-Verbose "Openwrite failed" Write-Verbose "File is not writable" Write-Output $false } Write-Verbose "Tidying up" Remove-Variable -Name target } else{ Write-Verbose "File $path does not exist or is a directory" Write-Output $false } } }