Атрибуты файла Powershell можно получить несколькими способами, все зависит от ситуации. В powershell все что мы получаем является объектами, а у объектов есть "участники"(member), которые делятся на свойства и методы. Под атрибутами обычно и подразумевают свойства, а под методами действия типа запись или удаление.
Для получения свойств файла powershell мы можем выполнить следующую команду:
Get-ItemProperty -Path C:\Folder1\file1.txt | SELECT *
Таким образом у нас выводятся все свойства:
Мы можем и методы и свойства в powershell использую другой командлет:
Get-ItemProperty -Path C:\Folder1\file1.txt | Get-Member
Для получение свойства объекта мне легче всего объявить переменную и вызвать так:
$doc = Get-ItemProperty -Path C:\Folder1\file1.txt
$doc.GetType()
Изменение атрибутов файла Powershell
Например я хочу изменить свойство файла в powershell и поставить "только чтение". Для этого мне нужно получить всех участников объекта и присвоить значение:
$file = Get-ItemProperty -Path C:\Folder1\file1.txt
$file | Get-Member
Для изменения я должен вызвать свойство и присвоить $true или $false т.к. значения принимаются только типа bool:
$file.IsReadOnly = $true
Мы можем изменить так же время создания файла в powershell:
$date = Get-Date -Year 2077
$file.CreationTime = $date
Если мы хотим изменить атрибуты объекта, которые не видны в Property, то мы можем сделать так:
$file.Attributes = "ReadOnly","Archive"
Если мы захотим добавить какое-то атрибут, то мы должны будем перечислить их все. Иначе они уберутся:
$file.Attributes = "ReadOnly","Archive","Hidden"
Можно сделать так:
$file.Attributes += "NotContentIndexed"
Таким образом мы сложим существующие атрибуты с новым.
Что бы увидеть все значения, которые мы можем записать в атрибут можно выполнить:
[enum]::GetNames("system.io.fileattributes")
- ReadOnly
- Hidden
- System
- Directory
- Archive
- Device
- Normal
- Temporary
- SparseFile
- ReparsePoint
- Compressed
- Offline
- NotContentIndexed
- Encrypted
- IntegrityStream
- NoScrubData
Часть атрибутов мы можем изменять так:
Set-ItemProperty -Path C:\Folder1\file1.txt -Name Attributes -Value "ReadOnly"
Если нам нужно изменить атрибуты множества объектов, то можно сделать так:
Get-ChildItem -Path C:\Folder1\* -Include "*.txt" | foreach {$_.Attributes+="Hidden"}
О том как работать с Get-ChildItem было описано тут.
Работа с Powershell методами
Если мы выполним следующею команду, то получим только powershell методы:
Get-ItemProperty -Path C:\diskusage.csv | Get-Member -MemberType Method
Методы позволяют делать какие-то изменения с объектами.
Например так мы можем добавить строку в конец документа:
$doc = Get-ItemProperty -Path "2.txt"
$data = $doc.AppendText()
$data.Write([Environment]::NewLine + "Текст с новой строки")
$data.Dispose()
А так мы можем удалить файлы, у которых определенная дата:
#Объявляем какую-то дату
$date = Get-Date -Year 2019
#Получаем все файлы в каталогах. -Force помогает получать скрытые объекты
$docs = Get-ChildItem -Path C:\Folder1\ -Recurse -Force
#Каждый объект, который был создан позже 2019 удалить
$docs | where {$_.CreationTime -gt $date.Year} | foreach {$_.Delete()}
...
Подписывайтесь на наш Telegram канал
Теги: #powershell