【PowerShell】指定フォルダ内の読み取り専用を取得する

指定フォルダ(現在のフォルダ)内のフォルダ、ファイルから、読み取り専用を判定し取得したい。

目次

説明

まずは、Get-ChildItemコマンドレットでフォルダ内の情報を取得してみる。

Get-ChildItem -Path . -Recurce

パスを指定。
 相対パス:現在のフォルダー ピリオド( . )
      現在のフォルダの親フォルダ 二重ピリオド( .. )

すべての子コンテナ内の項目も取得する。
 Recurceパラメータ

実行結果。

    ディレクトリ: C:\Users\0905s\MY_WORK\PowerShell\SAMPLE01


Mode                 LastWriteTime         Length Name                                                          
----                 -------------         ------ ----                                                          
d-----        2024/07/13     17:23                FOLDER_01                                                     
d-----        2024/07/13     17:22                FOLDER_02                                                     


    ディレクトリ: C:\Users\0905s\MY_WORK\PowerShell\SAMPLE01\FOLDER_01


Mode                 LastWriteTime         Length Name                                                          
----                 -------------         ------ ----                                                          
-a----        2024/07/13     17:21              0 FILE_01.txt                                                   
-a----        2024/07/13     17:23              0 FILE_02.txt                                                   


    ディレクトリ: C:\Users\0905s\MY_WORK\PowerShell\SAMPLE01\FOLDER_02


Mode                 LastWriteTime         Length Name                                                          
----                 -------------         ------ ----                                                          
d-----        2024/07/13     17:22                FOLDER_03                                                     
-a----        2024/07/13     17:21              0 FILE_02.txt                                                   


    ディレクトリ: C:\Users\0905s\MY_WORK\PowerShell\SAMPLE01\FOLDER_02\FOLDER_03


Mode                 LastWriteTime         Length Name                                                          
----                 -------------         ------ ----                                                          
-ar---        2024/07/13     17:22              0 FILE_02.txt                                                   
-a----        2024/07/13     17:22              0 FILE_03.txt    

Modeについて。

スクロールできます
Mode意味
dディレクトリ(フォルダ)
aアーカイブ(ファイル)
r読み取り専用
h隠しファイル
sシステムファイル

読み取り専用( r )だけを取得。

Get-ChildItem -Path . -Recurse | %{ If( $_.IsReadOnly) { $_.Name }

実行結果。

FILE_02.txt

フルパスで取得する場合。

Get-ChildItem -Path . -Recurse | %{ If( $_.IsReadOnly) { $_.FullName }

実行結果。

C:\Users\0905s\MY_WORK\PowerShell\SAMPLE01\FOLDER_02\FOLDER_03\FILE_02.txt

| (パイプライン):
 結果を次の処理に渡すための機能。PowerShellのパイプラインはデータがオブジェクト型で渡されるのが特徴。
% :
 ForEach-Objectコマンドレットのエイリアス。
$_. (ドルアンダースコアどっと):
 パイプラインを通じて取得したオブジェクトを参照するためのシェル変数。

パイプラインを通じて取得したオブジェクト型のデータを1件ずつ読み取り専用を判定し、Trueならファイル名を取得している。

PowerShellの2種類のForeach

  • ForEach-ObjectコマンドレットのエイリアスとしてのForEach
    • ForEach-Objectのエイリアスには、%、foreachという名前がある。
  • ForEachステートメント
    • 配列に格納されている値やオブジェクトを一つずつ処理するときに使用。

使用の判断はとりあえずパイプラインを使用するかどうか。(内部での処理がことなる)
 ※ステートメントのほうは、パイプでオブジェクトの受け取りができないため。

普通のプログラム風にForEachステートメントで実装。

# フォルダ移動
Set-Location C:\Users\0905s\MY_WORK\PowerShell\SAMPLE01
# 変数に格納
$results = Get-ChildItem -Path . -Recurse 

# ForEachで取り出す
ForEach( $obj in $results)
{
    if( $obj.IsReadOnly)
    {
        $obj.Name
    }
}

実行結果。

FILE_02.txt

変数の型を見てみる。

# フォルダ移動
Set-Location C:\Users\0905s\MY_WORK\PowerShell\SAMPLE01
# 変数に格納
$results = Get-ChildItem -Path . -Recurse 

# ForEachで取り出す
ForEach( $obj in $results)
{
    if( $obj.IsReadOnly)
    {
        $obj.Name
    }
}

# Write-Host $results.GetType()
Write-Host $results.GetType().FullName
# Write-Host $obj.getType()
Write-Host $obj.getType().FullName

実行結果。

FILE_02.txt
System.Object[]
System.IO.FileInfo

PowerShellのSystem.Object[]は、規定でテーブルとして書式設定されたカスタムオブジェクトのコレクション。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次