Author Posts

April 5, 2017 at 9:43 pm

Hi, I am reading a book on PowerShell. I am confused on a particular code on attributes.
The attribute to the file has both "Archive" and "ReadOnly". What am confused about is that where in this code that it deleted the attribute of "ReadOnly" and how did it do it?

# Get File Attributes
$file = get-item –path "c:\Program Files\MyCustomSoftware\Graphics\FirstGraphic.png"
$attributes = $file.attributes
# Convert attributes to string
$attributes = $attributes.tostring()
# Split individual attributes into array
$attributes = $attributes.split(",")
# Read through the individual attributes
Foreach ($attribute in $attributes) {
# If read Only, skip
if ($attribute –like "*ReadOnly*") {
write-host "Skipping Attribute: $attribute"
# Else add attribute to attribute list
else {
$newattribute += "$attribute,"
Write-Host "Attribute Added: $attribute"
# Remove the trailing comma
$newattribute = $newattribute.trimend(",")
# Write over existing attributes with new attributes
$file.attributes = $newattribute
Write-host "New File attributes are: " $file.attributes

April 5, 2017 at 11:49 pm

It does not delete it, just not added to the list... The final output comes from $newattribute
Any attribute that is -like "*readonly*" is never added to $newattribute
Only items that are ELSE (anything not *readonly*) are added in line 16 $newattribute += "$newattribute,"

To help understand: run one line at a time in PowerShell ISE while manually checking variables/arrays below by just typing in their names and pressing enter. Don't forget to reset/blank $newattribute = $null after run the script before running again. Y