【Windows】共有フォルダの「アクセス権」を一括でcsvファイルに書き出し管理する手順

【Windows】共有フォルダの「アクセス権」を一括でcsvファイルに書き出し管理する手順
🛡️ 超解決

会社の共有フォルダのアクセス権設定は、セキュリティ上非常に重要です。しかし、手作業での確認や管理には多大な労力がかかり、ミスも発生しやすくなります。

PowerShellを活用すれば、共有フォルダのアクセス権情報を一括でCSVファイルに書き出し、効率的に管理できます。

この記事では、Windows 11を基準に、共有フォルダのアクセス権をCSVに出力し、管理する具体的な手順を詳しく解説します。

【要点】共有フォルダのアクセス権を効率的に管理する

  • PowerShellコマンドレットの活用: 共有フォルダ内のファイルやフォルダのアクセス権情報を効率的に取得できます。
  • CSVファイルへの出力: 取得したアクセス権データを一覧形式で確認し、変更履歴の管理や監査に役立てられます。
  • 定期的な監査の自動化: スクリプトとして保存することで、アクセス権の変更を継続的に監視する仕組みを構築できます。

ADVERTISEMENT

共有フォルダのアクセス権管理の重要性とPowerShellの活用

共有フォルダのアクセス権は、情報漏洩や不正なデータ改ざんを防ぐための重要なセキュリティ対策です。適切なアクセス権が設定されていないと、機密情報が意図せず外部に流出したり、業務に支障をきたしたりする危険があります。

共有フォルダのアクセス権とは

共有フォルダのアクセス権は、どのユーザーやグループが、共有フォルダ内のファイルやサブフォルダに対してどのような操作(読み取り、書き込み、変更など)を許可されているかを定義する設定です。Windowsでは主に「NTFSアクセス許可」と「共有アクセス許可」の二種類があり、これらが組み合わさって最終的なアクセス権が決定されます。

NTFSアクセス許可はファイルシステムレベルでの権限設定で、共有アクセス許可はネットワーク経由でのアクセスを制御するものです。これらを適切に設定し、定期的に確認することが、セキュリティを維持する上で不可欠です。

PowerShellでできること

PowerShellは、Windowsのシステム管理を自動化するための強力なシェル環境です。PowerShellのコマンドレット(PowerShellの命令)を使うことで、共有フォルダのアクセス権情報を手動で一つずつ確認する手間を省き、一括で取得してCSVファイルに出力できます。

これにより、膨大な数のファイルやフォルダのアクセス権も短時間で確認できるようになり、監査作業の効率化や、設定ミスの早期発見に繋がります。手動での確認と比較して、時間と労力を大幅に削減できる点が大きなメリットです。

共有フォルダのアクセス権をCSVファイルに書き出す手順

ここでは、PowerShellを使って共有フォルダのアクセス権情報をCSVファイルに書き出す具体的な手順を解説します。この手順はWindows 11を基準にしています。

  1. PowerShellを管理者として実行する
    スタートメニューを開き、検索バーに「PowerShell」と入力します。検索結果に表示される「Windows PowerShell」または「ターミナル」を右クリックし、「管理者として実行」を選択します。ユーザーアカウント制御のダイアログが表示された場合は、「はい」をクリックして許可します。
  2. 共有フォルダのパスを確認する
    アクセス権情報を取得したい共有フォルダの正確なパスを把握します。ネットワーク上の共有フォルダであれば「\\サーバー名\共有名」のようなUNCパス(Universal Naming Convention形式のパス)を、ローカルディスク上のフォルダであれば「C:\共有フォルダ」のようなローカルパスを確認します。
  3. アクセス権書き出しスクリプトを作成し実行する
    PowerShellのウィンドウで、以下のスクリプトを入力またはコピーして実行します。このスクリプトは、指定されたフォルダとそのサブフォルダ内のすべてのファイルおよびフォルダのアクセス権情報を取得し、CSVファイルに出力します。

    $FolderPath = "C:\SharedFolder" # ここに共有フォルダのパスを指定
    $OutputPath = "C:\Temp\AccessPermissions.csv" # 出力するCSVファイルのパスとファイル名を指定
    
    Get-ChildItem -Path $FolderPath -Recurse | ForEach-Object {
        $Path = $_.FullName
        $ACL = Get-Acl -Path $Path
        $ACL.Access | Select-Object @{
            Name = "Path";
            Expression = {$Path}
        },FileSystemRights,AccessControlType,IdentityReference,IsInherited,InheritanceFlags,PropagationFlags
    } | Export-Csv -Path $OutputPath -NoTypeInformation -Encoding UTF8
    
    Write-Host "アクセス権情報を $OutputPath に出力しました。"
    • $FolderPathの変更: "C:\SharedFolder"の部分を、手順2で確認した共有フォルダのパスに置き換えてください。ネットワークパスを使用する場合は、例: "\\ServerName\ShareName" と記述します。
    • $OutputPathの変更: "C:\Temp\AccessPermissions.csv"の部分を、CSVファイルを出力したい任意のパスとファイル名に変更してください。
    • コマンドレットの解説:
      • Get-ChildItem -Path $FolderPath -Recurse: 指定されたフォルダ内のすべての項目(ファイルとフォルダ)を再帰的に取得します。
      • ForEach-Object: 取得した各項目に対して、後続の処理を実行します。
      • Get-Acl -Path $Path: 各項目($Path)のアクセス制御リスト(ACL、アクセス権限情報)を取得します。
      • $ACL.Access | Select-Object ...: 取得したACLの中から、Path、FileSystemRights(ファイルシステム権限)、AccessControlType(アクセス制御の種類)、IdentityReference(ユーザーやグループ名)、IsInherited(継承されているか)、InheritanceFlags(継承フラグ)、PropagationFlags(伝播フラグ)などの必要なプロパティを選択します。@{}で始まる部分は、Pathプロパティをカスタムで追加しています。
      • Export-Csv -Path $OutputPath -NoTypeInformation -Encoding UTF8: 選択した情報を指定したパスにCSVファイルとして出力します。-NoTypeInformationは、CSVファイルの先頭にオブジェクトの種類に関する情報を出力しないようにするオプションです。-Encoding UTF8は、文字化けを防ぐためにエンコーディング(文字コード)をUTF-8に指定します。

    スクリプトをコピーしてPowerShellウィンドウに貼り付け、Enterキーを押して実行します。

  4. 出力されたCSVファイルを確認する
    スクリプトの実行が完了すると、指定した$OutputPathにCSVファイルが作成されます。エクスプローラーでそのパスを開き、作成されたCSVファイルをExcelなどの表計算ソフトウェアで開いて内容を確認してください。各ファイルやフォルダのパス、それに対するアクセス権を持つユーザーやグループ、具体的な権限の種類などが一覧で表示されます。

アクセス権取得でよくある問題と対処法

PowerShellでアクセス権情報を取得する際に遭遇しやすい問題とその対処法について説明します。

アクセス拒否エラーが発生してしまう

スクリプトの実行中に「アクセスが拒否されました」というエラーが表示されることがあります。これは、PowerShellが対象の共有フォルダまたはその中のファイルやフォルダにアクセスする権限を持っていない場合に発生します。

対処法: PowerShellを管理者として実行しているかを確認してください。管理者として実行していない場合は、再度手順1からやり直してください。また、対象の共有フォルダ自体に対して、現在ログインしているユーザーアカウントに「フルコントロール」または少なくとも「読み取りと実行」の権限が付与されているかを確認してください。特にネットワークパスの共有フォルダの場合、ネットワーク共有の設定とNTFSアクセス許可の両方を確認する必要があります。

CSVファイルが文字化けしてしまう

出力されたCSVファイルをExcelなどで開いた際に、日本語のファイル名やユーザー名が正しく表示されず、文字化けしてしまうことがあります。

対処法: Export-Csvコマンドレットに-Encoding UTF8オプションを追加してください。上記のスクリプト例ではすでに含まれています。これにより、CSVファイルがUTF-8という文字コードで保存され、Excelなどのソフトウェアで正しく読み込めるようになります。Excelで開く際に文字化けする場合は、Excelのデータ取り込み機能で「データ」タブから「テキストまたはCSVから」を選択し、ファイルの元のエンコードを「65001 : Unicode (UTF-8)」として指定して取り込むと解決することが多いです。

取得したい情報が不足している、または多すぎる場合

出力されるCSVファイルの列(プロパティ)が、必要な情報だけになっていないと感じることがあります。

対処法: Select-Objectコマンドレットで取得するプロパティを調整してください。例えば、IdentityReference(ユーザー/グループ名)とFileSystemRights(具体的な権限)のみが必要な場合は、スクリプトの該当部分を以下のように変更します。

$ACL.Access | Select-Object @{
    Name = "Path";
    Expression = {$Path}
},IdentityReference,FileSystemRights

また、特定のサブフォルダ以下の情報だけが欲しい場合は、Get-ChildItemコマンドレットの-Recurseオプションを削除したり、-Pathでより具体的なサブフォルダのパスを指定したりすることで、取得範囲を調整できます。

ADVERTISEMENT

手動確認とPowerShellによる一括出力の比較

共有フォルダのアクセス権を確認する方法として、手動でGUI(グラフィカルユーザーインターフェース)から行う方法と、PowerShellを使って一括で出力する方法があります。それぞれの特徴を比較します。

項目 手動での確認(GUI) PowerShellによる一括出力
手間 フォルダやファイルごとにプロパティを開く必要がある スクリプト作成は一度きりで、その後は実行するだけ
精度 人的ミスが発生しやすい スクリプトによる自動処理のため高精度
時間 確認対象が多いほど時間がかかる 大量のデータでも短時間で処理が完了する
監査 変更履歴の追跡が難しい CSVファイルで履歴を保存し、変更点を容易に比較できる
難易度 直感的な操作でわかりやすい PowerShellの基本的な知識が必要となる

まとめ

この記事では、Windowsの共有フォルダのアクセス権をPowerShellを使ってCSVファイルに一括で書き出し、効率的に管理する手順を解説しました。

PowerShellコマンドレットを活用することで、手動での確認に比べて時間と労力を大幅に削減し、より正確なアクセス権の把握が可能になります。

出力したCSVファイルを定期的に比較することで、不正なアクセス権の変更を早期に検知し、組織のセキュリティを強化する運用にも応用できます。ぜひ、この手順を業務に取り入れ、共有フォルダのアクセス権管理を効率化してください。

ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。