Как получать и изменять свойства файлов в Powershell


09 июля 2019


Получаем и изменяем в Powershell атрибуты файла

Атрибуты файла Powershell можно получить несколькими способами, все зависит от ситуации. В powershell все что мы получаем является объектами, а у объектов есть "участники"(member), которые делятся на свойства и методы. Под атрибутами обычно и подразумевают свойства, а под методами действия типа запись или удаление.

Для получения свойств файла powershell мы можем выполнить следующую команду:

Get-ItemProperty -Path C:\Folder1\file1.txt | SELECT *

Таким образом у нас выводятся все свойства:

Получение свойств powershell SELECT

Мы можем и методы и свойства в powershell использую другой командлет:

Get-ItemProperty -Path C:\Folder1\file1.txt | Get-Member

Powershell атрибуты файла

Для получение свойства объекта мне легче всего объявить переменную и вызвать так:

$doc = Get-ItemProperty -Path C:\Folder1\file1.txt
$doc.GetType()

Свойства файла Powershell

 

Изменение атрибутов файла Powershell

Например я хочу изменить свойство файла в powershell и поставить "только чтение". Для этого мне нужно получить всех участников объекта и присвоить значение:

$file = Get-ItemProperty -Path C:\Folder1\file1.txt
$file | Get-Member

Read only powershell

Для изменения я должен вызвать свойство и присвоить $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

Методы позволяют делать какие-то изменения с объектами.

Powershell методы файла

Например так мы можем добавить строку в конец документа:

$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()}

 

...

Теги: #powershell


Популярные тэги
О блоге
Этот блог представляет собой конспекты выученного материала, преобретенного опыта и лучшие практики в системном администрировании и программировании.