コマンドプロンプトのattribと同等とことをPowerShellでは、Set-ItemPropertyコマンドレットを使うことで実現できます。
以下にSet-ItemPropertyを使った使用例を記します。
$PSVersionTable
Name Value
---- -----
PSVersion 5.1.17763.592
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.17763.592
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1 (Get-WmiObject Win32_OperatingSystem).Caption Microsoft Windows 10 Home
動作確認用にfooといる空ファイルとディレクトリを作成しました。
PS O:\wk> New-Item -ItemType File foo
ディレクトリ: O:\wk
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2019/07/08 21:17 0 foo
New-Item -ItemType Directory bar
ディレクトリ: O:\wk
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2019/07/08 21:32 bar
ちなみに attrib コマンドのファイルの出力はAとなっています。
O:\wk>attrib foo
A O:\wk\foo
O:\wk>attrib bar
O:\wk\bar
Modeをみると、aがあるのでアーカイブ属性がついていますね。
詳細設定ボタンをクリックするとファイルをアーカイブ可能にするにチェックがついています。
Set-ItemPropertyの設定できる属性は下表の通りです。
| 属性オプション | 意味 |
| Archive | アーカイブ属性 |
| Readonly | 読み取り専用属性 |
| Hidden | 隠しファイル属性 |
| Normal | 属性を外す |
| System | システムファイル属性 |
Set-ItemProperty -Path ファイル名rディレクトリ -Name Attributes -Value 属性オプション属性は複数同時に付与することができます。
上記で作成したfooファイルおよびbarディレクトリの属性を変更してみます。
Set-ItemProperty -Path .\foo -Name Attributes -Value "ReadOnly" Set-ItemProperty -Path .\bar -Name Attributes -Value "ReadOnly"
Get-ChildItem . ディレクトリ: O:\wk Mode LastWriteTime Length Name ---- ------------- ------ ---- d-r--- 2019/07/08 21:32 bar --r--- 2019/07/08 21:17 0 foo
Set-ItemProperty -Path .\foo -Name Attributes -Value "Normal" Set-ItemProperty -Path .\bar -Name Attributes -Value "Normal"
Get-ChildItem .
ディレクトリ: O:\wk
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2019/07/08 21:32 bar
------ 2019/07/08 21:17 0 foo
Set-ItemProperty -Path .\foo -Name Attributes -Value "ReadOnly,Hidden"
Get-ChildItem -Force .\foo
ディレクトリ: O:\wk
Mode LastWriteTime Length Name
---- ------------- ------ ----
--rh-- 2019/07/08 21:17 0 foo rとhがついていますね。
ちなみにGet-ChildItemで隠しファイルを表示する場合は、上記の通り -Forceを付けます。
Set-ItemProperty -Path .\foo -Name Attributes -Value "Normal"
Get-ChildItem -Force .\foo
ディレクトリ: O:\wk
Mode LastWriteTime Length Name
---- ------------- ------ ----
------ 2019/07/08 21:17 0 foo Set-ItemProperty -Path ファイルorディレクトリ -Name IsReadOnly -Value $True
Set-ItemProperty -Path ファイルorディレクトリ -Name IsReadOnly -Value $False
Set-ItemProperty -Path .\foo -Name IsReadOnly $true Get-ChildItem .\foo ディレクトリ: O:\wk Mode LastWriteTime Length Name ---- ------------- ------ ---- --r--- 2019/07/08 21:17 0 foo
Set-ItemProperty -Path .\foo -Name IsReadOnly $false Get-ChildItem .\foo ディレクトリ: O:\wk Mode LastWriteTime Length Name ---- ------------- ------ ---- ------ 2019/07/08 21:17 0 foo
以上、PowerShellでファイルやディレクトリのファイル属性を付与したり外したりする操作例でした。