WindowsServer 2025 総合ガイド 第03回

記事内に広告が含まれています。

WindowsServer 2025 総合ガイド 第03回
ファイルシステムとディスク管理の基礎

第2回では、PowerShell 7.4をインストールし、コマンドレットの基本操作やパイプラインの概念を学びました。第3回となる今回は、PowerShellを使ったファイル・フォルダ操作、ディスクとボリュームの管理、そしてローカルユーザーとグループの管理を学びます。これらはサーバー管理における最も基本的なスキルです。

3.1 この記事で学ぶこと

  • PowerShellでファイル・フォルダ操作ができる
  • ディスクとボリュームの状態を確認・管理できる
  • ローカルユーザーとグループの管理ができる

3.2 前提条件

  • 第2回完了(PowerShell 7.4の基本操作が可能)
  • Windows Server 2025にリモートデスクトップ接続できる状態
  • PowerShell 7.4を管理者として起動できる状態

3.3 ファイルシステム操作

Windowsサーバーを管理する上で、ファイルやフォルダの操作は最も基本的なスキルです。GUIでエクスプローラーを使う方法もありますが、PowerShellを使うことで、再現性のある操作や自動化が可能になります。

3.3.1 カレントディレクトリの確認と移動

PowerShellでは、現在作業しているディレクトリ(カレントディレクトリ)を意識することが重要です。相対パスでファイルを指定する際の基準となるためです。

カレントディレクトリの確認

Get-Locationコマンドレットで、現在のカレントディレクトリを確認できます。

[実行環境: PowerShell 7.4 (管理者)]

# カレントディレクトリを確認
Get-Location

実行結果の例:

Path
----
C:\Users\Administrator

カレントディレクトリの移動

Set-Locationコマンドレットで、カレントディレクトリを移動できます。

[実行環境: PowerShell 7.4 (管理者)]

# C:\Windows に移動
Set-Location -Path C:\Windows

# 移動を確認
Get-Location

実行結果の例:

Path
----
C:\Windows

親ディレクトリに移動するには、..を使用します。

# 親ディレクトリに移動
Set-Location -Path ..

# 確認
Get-Location

実行結果の例:

Path
----
C:\

ホームディレクトリに戻るには、~を使用します。

# ホームディレクトリに移動
Set-Location -Path ~

# 確認
Get-Location

実行結果の例:

Path
----
C:\Users\Administrator

3.3.2 ファイル・フォルダの一覧表示

Get-ChildItemコマンドレットは、ディレクトリ内のファイルとフォルダを一覧表示します。Windowsのエクスプローラーでフォルダを開いたときに表示される内容と同様の情報が得られます。

基本的な一覧表示

[実行環境: PowerShell 7.4 (管理者)]

# カレントディレクトリの内容を表示
Get-ChildItem

実行結果の例:

    Directory: C:\Users\Administrator

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-r--          12/15/2024   9:30 AM                Desktop
d-r--          12/15/2024   9:30 AM                Documents
d-r--          12/15/2024   9:30 AM                Downloads
d-r--          12/15/2024   9:30 AM                Favorites
d-r--          12/15/2024   9:30 AM                Links
d-r--          12/15/2024   9:30 AM                Music
d-r--          12/15/2024   9:30 AM                Pictures
d-r--          12/15/2024   9:30 AM                Videos

出力の各列の意味は以下のとおりです。

列名 説明
Mode 属性(d=ディレクトリ、a=アーカイブ、r=読み取り専用、h=隠し、s=システム)
LastWriteTime 最終更新日時
Length ファイルサイズ(バイト)。ディレクトリは空欄
Name ファイルまたはフォルダの名前

特定のパスを指定して表示

# C:\Windows\System32 の内容を表示(最初の10件)
Get-ChildItem -Path C:\Windows\System32 | Select-Object -First 10

隠しファイルの表示

既定では隠しファイルは表示されません。-Forceパラメータを使用すると、隠しファイルやシステムファイルも表示されます。

# 隠しファイルを含めて表示
Get-ChildItem -Path C:\ -Force | Select-Object -First 15

実行結果の例:

    Directory: C:\

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d--hs          12/15/2024   9:00 AM                $Recycle.Bin
d--hs          12/15/2024   9:00 AM                Documents and Settings
d-----          1/10/2025   2:30 PM                PerfLogs
d-r---          1/10/2025   3:00 PM                Program Files
d-r---          1/10/2025   3:00 PM                Program Files (x86)
d--hs          12/15/2024   9:00 AM                ProgramData
d--hs          12/15/2024   9:00 AM                Recovery
d--hs          12/15/2024   9:00 AM                System Volume Information
d-r---          1/10/2025   2:45 PM                Users
d-----          1/15/2025  10:00 AM                Windows
-a-hs          12/15/2024   9:00 AM     8589934592 pagefile.sys
-a-hs          12/15/2024   9:00 AM      268435456 swapfile.sys

d--hsのようにhが含まれている項目が隠し属性を持つファイルやフォルダです。

再帰的な検索

-Recurseパラメータを使用すると、サブフォルダ内も含めて検索できます。

# C:\Users\Administrator\Documents 配下のすべてのファイルを再帰的に表示
Get-ChildItem -Path C:\Users\Administrator\Documents -Recurse

特定の拡張子のファイルのみを検索する場合は、-Filterパラメータを使用します。

# C:\Windows 配下の .log ファイルを再帰的に検索(最初の5件)
Get-ChildItem -Path C:\Windows -Filter "*.log" -Recurse -ErrorAction SilentlyContinue | 
    Select-Object -First 5

補足:-ErrorAction SilentlyContinueは、アクセス権がないフォルダでエラーが発生しても処理を継続するためのパラメータです。

ファイルのみ、ディレクトリのみの表示

# ファイルのみを表示
Get-ChildItem -Path C:\Windows -File | Select-Object -First 5

# ディレクトリのみを表示
Get-ChildItem -Path C:\Windows -Directory | Select-Object -First 5

3.3.3 ファイル・フォルダの作成

New-Itemコマンドレットを使って、ファイルやフォルダを作成できます。

フォルダの作成

[実行環境: PowerShell 7.4 (管理者)]

# 作業用フォルダを作成
New-Item -Path C:\Work -ItemType Directory

実行結果の例:

    Directory: C:\

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----          1/20/2025  10:00 AM                Work

-ItemType Directoryを指定することで、ディレクトリ(フォルダ)を作成します。

入れ子になったフォルダの作成

-Forceパラメータを使用すると、親フォルダが存在しない場合でも、中間のフォルダを自動的に作成します。

# 複数階層のフォルダを一度に作成
New-Item -Path C:\Work\Projects\2025\January -ItemType Directory -Force

実行結果の例:

    Directory: C:\Work\Projects\2025

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----          1/20/2025  10:05 AM                January

ファイルの作成

# 空のテキストファイルを作成
New-Item -Path C:\Work\test.txt -ItemType File

実行結果の例:

    Directory: C:\Work

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----          1/20/2025  10:10 AM              0 test.txt

内容を含むファイルの作成

-Valueパラメータを使用すると、初期内容を含むファイルを作成できます。

# 内容を含むファイルを作成
New-Item -Path C:\Work\hello.txt -ItemType File -Value "Hello, Windows Server 2025!"

実行結果の例:

    Directory: C:\Work

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----          1/20/2025  10:15 AM             27 hello.txt

3.3.4 コピー・移動・削除

ファイルやフォルダのコピー、移動、削除は、サーバー管理で頻繁に行う操作です。

ファイルのコピー

[実行環境: PowerShell 7.4 (管理者)]

# ファイルをコピー
Copy-Item -Path C:\Work\hello.txt -Destination C:\Work\hello_backup.txt

# コピーされたことを確認
Get-ChildItem -Path C:\Work

実行結果の例:

    Directory: C:\Work

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----          1/20/2025  10:05 AM                Projects
-a----          1/20/2025  10:15 AM             27 hello.txt
-a----          1/20/2025  10:20 AM             27 hello_backup.txt
-a----          1/20/2025  10:10 AM              0 test.txt

フォルダのコピー(再帰的)

フォルダを中身ごとコピーするには、-Recurseパラメータを使用します。

# フォルダを再帰的にコピー
Copy-Item -Path C:\Work\Projects -Destination C:\Work\Projects_Backup -Recurse

# 確認
Get-ChildItem -Path C:\Work

ファイルの移動

# ファイルを移動
Move-Item -Path C:\Work\test.txt -Destination C:\Work\Projects\test.txt

# 確認
Get-ChildItem -Path C:\Work\Projects

ファイルのリネーム

Move-Itemは、同じフォルダ内で使用するとリネーム(名前変更)になります。専用のRename-Itemコマンドレットもあります。

# ファイルをリネーム
Rename-Item -Path C:\Work\hello_backup.txt -NewName hello_copy.txt

# 確認
Get-ChildItem -Path C:\Work

ファイルの削除

警告:Remove-Itemで削除したファイルはごみ箱に入らず、完全に削除されます。重要なファイルを誤って削除しないよう、十分に注意してください。

# ファイルを削除
Remove-Item -Path C:\Work\hello_copy.txt

# 確認
Get-ChildItem -Path C:\Work

確認プロンプトの使用

削除操作では、-Confirmパラメータを使用して確認プロンプトを表示させることをおすすめします。

# 確認プロンプト付きで削除
Remove-Item -Path C:\Work\Projects_Backup -Recurse -Confirm

実行すると、以下のような確認メッセージが表示されます。

Confirm
Are you sure you want to perform this action?
Performing the operation "Remove Directory" on target "C:\Work\Projects_Backup".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"):

Yを入力してEnterキーを押すと削除が実行されます。

WhatIfによる事前確認

-WhatIfパラメータを使用すると、実際には実行せずに、何が起こるかを確認できます。

# 実行せずに結果を確認
Remove-Item -Path C:\Work\Projects -Recurse -WhatIf

実行結果の例:

What if: Performing the operation "Remove Directory" on target "C:\Work\Projects".

3.3.5 ファイル内容の読み書き

PowerShellでは、テキストファイルの内容を簡単に読み書きできます。設定ファイルの確認やログファイルの分析に役立ちます。

ファイル内容の読み取り

[実行環境: PowerShell 7.4 (管理者)]

# ファイル内容を読み取り
Get-Content -Path C:\Work\hello.txt

実行結果の例:

Hello, Windows Server 2025!

行数を指定して読み取り

# 最初の5行を読み取り
Get-Content -Path C:\Windows\System32\drivers\etc\hosts -TotalCount 5

# 最後の10行を読み取り
Get-Content -Path C:\Windows\System32\drivers\etc\hosts -Tail 10

ファイル内容の書き込み(上書き)

Set-Contentは、既存の内容を上書きします。

# ファイルに内容を書き込み(上書き)
Set-Content -Path C:\Work\hello.txt -Value "This is a new content."

# 確認
Get-Content -Path C:\Work\hello.txt

実行結果の例:

This is a new content.

ファイル内容の追記

Add-Contentは、既存の内容の末尾に追記します。

# ファイルに内容を追記
Add-Content -Path C:\Work\hello.txt -Value "This line is appended."

# 確認
Get-Content -Path C:\Work\hello.txt

実行結果の例:

This is a new content.
This line is appended.

複数行の書き込み

# 複数行を書き込み
$lines = @(
    "Line 1: Server Configuration",
    "Line 2: Date: $(Get-Date -Format 'yyyy-MM-dd')",
    "Line 3: End of configuration"
)
Set-Content -Path C:\Work\config.txt -Value $lines

# 確認
Get-Content -Path C:\Work\config.txt

実行結果の例:

Line 1: Server Configuration
Line 2: Date: 2025-01-20
Line 3: End of configuration

3.3.6 パスの指定方法

ファイルやフォルダを指定する際のパスの書き方を理解しておきましょう。

絶対パスと相対パス

種類 説明
絶対パス ドライブレターから始まる完全なパス C:\Windows\System32\drivers\etc\hosts
相対パス カレントディレクトリを基準としたパス .\Documents\file.txt または ..\ParentFolder

サーバー管理のスクリプトでは、明確さと再現性のために絶対パスを使用することをおすすめします。

特殊フォルダのパス取得

Windowsには、ユーザーごとに異なる場所に存在する「特殊フォルダ」があります。これらのパスは環境変数や.NETのメソッドで取得できます。

[実行環境: PowerShell 7.4 (管理者)]

# 環境変数でよく使うパスを取得
$env:USERPROFILE      # ユーザープロファイル(例:C:\Users\Administrator)
$env:TEMP             # 一時フォルダ
$env:SystemRoot       # Windowsフォルダ(例:C:\Windows)
$env:ProgramFiles     # Program Files フォルダ

実行結果の例:

C:\Users\Administrator
C:\Users\Administrator\AppData\Local\Temp
C:\Windows
C:\Program Files

.NETのEnvironmentクラスを使用すると、より多くの特殊フォルダのパスを取得できます。

# デスクトップフォルダのパスを取得
[Environment]::GetFolderPath('Desktop')

# ドキュメントフォルダのパスを取得
[Environment]::GetFolderPath('MyDocuments')

# 共通のプログラムデータフォルダ
[Environment]::GetFolderPath('CommonApplicationData')

3.4 ディスク管理の基礎

サーバー管理では、ディスクの状態を把握し、必要に応じて構成を変更することが重要です。この節では、PowerShellを使ったディスク管理の基本を学びます。

3.4.1 ディスクとボリュームの概念

ディスク管理を理解するために、まず基本的な概念を整理しましょう。

物理ディスクとパーティション

用語 説明
物理ディスク サーバーに接続されたストレージデバイス(HDD、SSD、仮想ディスクなど)
パーティション 物理ディスクを論理的に分割した領域
パーティションスタイル ディスクの管理方式。MBR(Master Boot Record)またはGPT(GUID Partition Table)

ボリュームとドライブレター

用語 説明
ボリューム ファイルシステムでフォーマットされた、データを保存できる領域
ドライブレター ボリュームに割り当てられた識別文字(C:、D: など)
ファイルシステム データの保存方式。Windowsでは主にNTFSまたはReFSを使用

一般的な構成では、1つの物理ディスクに1つまたは複数のパーティションがあり、各パーティションにボリュームが作成されています。

3.4.2 ディスク情報の確認

PowerShellのStorageモジュールを使用して、ディスク情報を確認できます。

物理ディスクの一覧表示

[実行環境: PowerShell 7.4 (管理者)]

# 物理ディスクの一覧を表示
Get-Disk

実行結果の例:

Number Friendly Name                Serial Number     HealthStatus OperationalStatus Total Size Partition Style
------ -------------                -------------     ------------ ----------------- ---------- ---------------
0      Msft Virtual Disk            600224803e...     Healthy      Online             100 GB         GPT

各列の意味は以下のとおりです。

列名 説明
Number ディスク番号(0から始まる)
Friendly Name ディスクの表示名
HealthStatus ディスクの健全性(Healthy=正常)
OperationalStatus 動作状態(Online=使用可能)
Total Size ディスクの総容量
Partition Style パーティションスタイル(GPTまたはMBR)

パーティションの一覧表示

# すべてのパーティションを表示
Get-Partition

実行結果の例:

   DiskPath: \\?\scsi#disk&ven_msft&prod_virtual_disk#...

PartitionNumber  DriveLetter Offset           Size Type
---------------  ----------- ------           ---- ----
1                           1048576        16 MB Reserved
2                C           17825792     99.98 GB Basic

特定のディスクのパーティションのみを表示するには、-DiskNumberパラメータを使用します。

# ディスク0のパーティションを表示
Get-Partition -DiskNumber 0

ボリュームの一覧表示

# すべてのボリュームを表示
Get-Volume

実行結果の例:

DriveLetter FriendlyName FileSystemType DriveType HealthStatus OperationalStatus SizeRemaining      Size
----------- ------------ -------------- --------- ------------ ----------------- -------------      ----
C                        NTFS           Fixed     Healthy      OK                    72.15 GB   99.98 GB

各列の意味は以下のとおりです。

列名 説明
DriveLetter ドライブレター
FriendlyName ボリュームラベル
FileSystemType ファイルシステム(NTFS、ReFS等)
DriveType ドライブの種類(Fixed=固定ディスク)
HealthStatus 健全性
SizeRemaining 空き容量
Size 総容量

3.4.3 ディスク容量の確認

サーバー運用では、ディスクの空き容量を定期的に確認することが重要です。容量不足はサービス停止の原因になります。

Get-PSDriveによるドライブ情報

[実行環境: PowerShell 7.4 (管理者)]

# ファイルシステムドライブの情報を表示
Get-PSDrive -PSProvider FileSystem

実行結果の例:

Name           Used (GB)     Free (GB) Provider      Root
----           ---------     --------- --------      ----
C                  27.83         72.15 FileSystem    C:\

空き容量のチェック(カスタム表示)

より見やすい形式で空き容量を確認するスクリプトを作成できます。

# ボリュームの空き容量を分かりやすく表示
Get-Volume | 
    Where-Object { $_.DriveLetter -ne $null } |
    Select-Object DriveLetter, 
                  FileSystemType,
                  @{Name="TotalSizeGB"; Expression={[math]::Round($_.Size / 1GB, 2)}},
                  @{Name="FreeSpaceGB"; Expression={[math]::Round($_.SizeRemaining / 1GB, 2)}},
                  @{Name="UsedPercent"; Expression={[math]::Round((($_.Size - $_.SizeRemaining) / $_.Size) * 100, 1)}}

実行結果の例:

DriveLetter FileSystemType TotalSizeGB FreeSpaceGB UsedPercent
----------- -------------- ----------- ----------- -----------
C           NTFS                 99.98       72.15        27.9

運用のポイント:一般的に、ボリュームの使用率が80%を超えたら増設を検討し、90%を超えたら緊急対応が必要です。定期的な監視を設定しましょう。

3.4.4 ボリュームの基本操作(概念説明)

ここでは、ディスク操作の概念と注意点を説明します。実際の操作はデータ損失のリスクがあるため、本番環境では十分な計画と検証を行ってください。

重要な警告:パーティションの作成・削除・フォーマットは、操作を誤るとデータが完全に失われます。実行前に必ずバックアップを取り、対象ディスクを確認してください。本シリーズの学習環境(VPS)では、システムディスク以外に追加ディスクがない場合があります。

新しいディスクの初期化(概念)

新しいディスクを使用可能にするには、以下の手順が必要です。

  1. ディスクの初期化:パーティションスタイル(GPTまたはMBR)を設定
  2. パーティションの作成:ディスク上に領域を確保
  3. ボリュームのフォーマット:ファイルシステムを設定してデータを保存可能に

コマンドの例(参考情報として記載):

# ※以下は参考情報です。既存のシステムディスクでは実行しないでください。

# 1. RAW(未初期化)ディスクをGPTで初期化
# Initialize-Disk -Number <ディスク番号> -PartitionStyle GPT

# 2. パーティションを作成してドライブレターを割り当て
# New-Partition -DiskNumber <ディスク番号> -UseMaximumSize -AssignDriveLetter

# 3. NTFSでフォーマット
# Format-Volume -DriveLetter <ドライブレター> -FileSystem NTFS -Confirm:$false

パーティションの拡張(概念)

ディスクに未割り当て領域がある場合、既存のパーティションを拡張できます。

# パーティションのサポートサイズを確認
Get-PartitionSupportedSize -DriveLetter C

# ※拡張コマンド(参考)
# Resize-Partition -DriveLetter C -Size <新しいサイズ>

3.5 ローカルユーザー管理

Windows Serverでは、ユーザーアカウントを使ってサーバーへのアクセスを制御します。Active Directoryドメインに参加していない環境(スタンドアロン環境)では、ローカルユーザーアカウントで管理を行います。

3.5.1 ユーザーアカウントの概念

Windows Serverには、最初から存在する「組み込みアカウント」があります。

アカウント名 説明 既定の状態
Administrator システム管理者アカウント。すべての権限を持つ 有効
Guest 一時的なアクセス用の制限付きアカウント 無効
DefaultAccount システムが使用する管理アカウント 無効
WDAGUtilityAccount Windows Defender Application Guard用 無効

セキュリティのポイント:Administratorアカウントは、攻撃者に狙われやすいアカウントです。運用環境では、別の管理者アカウントを作成し、Administratorアカウントは無効化または名前変更することが推奨されます。

3.5.2 ユーザーの確認

Get-LocalUserコマンドレットで、ローカルユーザーの一覧を表示できます。

PowerShell 7.x での注意点:Microsoft.PowerShell.LocalAccountsモジュールは、PowerShell 7.xでは互換性レイヤーを通じて動作します。エラーが発生した場合は、Import-Module Microsoft.PowerShell.LocalAccounts -UseWindowsPowerShellを実行してからコマンドを使用してください。

[実行環境: PowerShell 7.4 (管理者)]

# ローカルユーザーの一覧を表示
Get-LocalUser

実行結果の例:

Name               Enabled Description
----               ------- -----------
Administrator      True    Built-in account for administering the computer/domain
DefaultAccount     False   A user account managed by the system.
Guest              False   Built-in account for guest access to the computer/domain
WDAGUtilityAccount False   A user account managed and used by the system for Windows Defender Application Guard scenarios.

特定のユーザーの詳細情報を確認するには、-Nameパラメータを使用します。

# Administratorアカウントの詳細を表示
Get-LocalUser -Name Administrator | Select-Object *

実行結果の例:

AccountExpires         :
Description            : Built-in account for administering the computer/domain
Enabled                : True
FullName               :
PasswordChangeableDate : 12/15/2024 9:00:00 AM
PasswordExpires        :
UserMayChangePassword  : True
PasswordRequired       : True
PasswordLastSet        : 12/15/2024 9:00:00 AM
LastLogon              : 1/20/2025 10:00:00 AM
Name                   : Administrator
SID                    : S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-500
PrincipalSource        : Local
ObjectClass            : User

3.5.3 ユーザーの作成

New-LocalUserコマンドレットで、新しいローカルユーザーを作成できます。

パスワードの設定(SecureString)

セキュリティ上、パスワードはプレーンテキストではなくSecureStringとして扱う必要があります。

[実行環境: PowerShell 7.4 (管理者)]

# 対話的にパスワードを入力(入力内容は表示されない)
$Password = Read-Host -AsSecureString -Prompt "Enter password for new user"

または、スクリプト内でパスワードを設定する場合(テスト用途のみ):

# 文字列からSecureStringに変換(スクリプト用。本番環境では推奨されません)
$Password = ConvertTo-SecureString -String "P@ssw0rd123!" -AsPlainText -Force

セキュリティ警告:スクリプト内にパスワードをプレーンテキストで記述することは、セキュリティリスクとなります。本番環境では、Read-Host -AsSecureStringや資格情報マネージャーを使用してください。

ユーザーの作成

# 新しいユーザーを作成
$Password = Read-Host -AsSecureString -Prompt "Enter password"

New-LocalUser -Name "TestUser01" `
              -Password $Password `
              -FullName "Test User 01" `
              -Description "Learning purpose account"

実行結果の例:

Name       Enabled Description
----       ------- -----------
TestUser01 True    Learning purpose account

作成されたユーザーを確認します。

# 作成したユーザーを確認
Get-LocalUser -Name TestUser01

パスワードオプション付きでユーザーを作成

# パスワードの有効期限なし、ユーザーによる変更不可で作成
$Password = Read-Host -AsSecureString -Prompt "Enter password"

New-LocalUser -Name "ServiceAccount01" `
              -Password $Password `
              -FullName "Service Account" `
              -Description "Account for automated services" `
              -PasswordNeverExpires `
              -UserMayNotChangePassword

3.5.4 ユーザーの変更・削除

ユーザー情報の変更

Set-LocalUserコマンドレットで、既存ユーザーの情報を変更できます。

[実行環境: PowerShell 7.4 (管理者)]

# ユーザーの説明を変更
Set-LocalUser -Name "TestUser01" -Description "Updated description for test user"

# 確認
Get-LocalUser -Name "TestUser01" | Select-Object Name, Description

パスワードの変更

# ユーザーのパスワードを変更
$NewPassword = Read-Host -AsSecureString -Prompt "Enter new password"
Set-LocalUser -Name "TestUser01" -Password $NewPassword

ユーザーの無効化と有効化

ユーザーを削除せずに、一時的にログインできないようにするには、アカウントを無効化します。

# ユーザーを無効化
Disable-LocalUser -Name "TestUser01"

# 確認
Get-LocalUser -Name "TestUser01" | Select-Object Name, Enabled

実行結果の例:

Name       Enabled
----       -------
TestUser01 False

有効化するにはEnable-LocalUserを使用します。

# ユーザーを有効化
Enable-LocalUser -Name "TestUser01"

# 確認
Get-LocalUser -Name "TestUser01" | Select-Object Name, Enabled

ユーザーの削除

警告:ユーザーを削除すると、そのユーザーのプロファイル(ドキュメント、設定など)にアクセスできなくなる可能性があります。削除前に確認してください。

# ユーザーを削除(確認プロンプト付き)
Remove-LocalUser -Name "TestUser01" -Confirm

# 削除されたことを確認
Get-LocalUser

3.6 ローカルグループ管理

グループは、複数のユーザーをまとめて管理するための仕組みです。グループに権限を付与し、そのグループにユーザーを追加することで、効率的なアクセス管理が可能になります。

3.6.1 グループの概念と役割

Windows Serverでは、「ユーザーをグループに追加し、グループに権限を付与する」という方式でアクセス管理を行います。これにより、個々のユーザーに直接権限を付与するよりも管理が容易になります。

例えば、「Administratorsグループに属するユーザーは管理者権限を持つ」「Remote Desktop Usersグループに属するユーザーはリモートデスクトップ接続できる」といった形です。

3.6.2 組み込みグループの確認

Windows Serverには、最初から存在する組み込みグループがあります。代表的なものを紹介します。

グループ名 説明
Administrators システムのフルコントロール権限を持つ管理者グループ
Users 一般ユーザー。基本的な操作が可能
Remote Desktop Users リモートデスクトップ接続が許可されるグループ
Backup Operators ファイルのバックアップと復元が可能
Power Users Usersより多くの権限を持つ(互換性のために存在)

[実行環境: PowerShell 7.4 (管理者)]

# ローカルグループの一覧を表示
Get-LocalGroup

実行結果の例:

Name                                Description
----                                -----------
Access Control Assistance Operators Members of this group can remotely query authorization attributes...
Administrators                      Administrators have complete and unrestricted access to the compu...
Backup Operators                    Backup Operators can override security restrictions for the sole ...
Cryptographic Operators             Members are authorized to perform cryptographic operations.
Device Owners                       Members of this group can change system-wide settings.
Distributed COM Users               Members are allowed to launch, activate and use Distributed COM o...
Event Log Readers                   Members of this group can read event logs from local machine
Guests                              Guests have the same access as members of the Users group by defa...
Hyper-V Administrators              Members of this group have complete and unrestricted access to al...
...

3.6.3 グループの確認と作成

グループメンバーの確認

Get-LocalGroupMemberコマンドレットで、グループに所属するメンバーを確認できます。

# Administratorsグループのメンバーを確認
Get-LocalGroupMember -Group "Administrators"

実行結果の例:

ObjectClass Name                      PrincipalSource
----------- ----                      ---------------
User        SERVER01\Administrator    Local
# Remote Desktop Usersグループのメンバーを確認
Get-LocalGroupMember -Group "Remote Desktop Users"

新しいグループの作成

# 新しいグループを作成
New-LocalGroup -Name "AppAdmins" -Description "Application Administrators"

# 確認
Get-LocalGroup -Name "AppAdmins"

実行結果の例:

Name      Description
----      -----------
AppAdmins Application Administrators

3.6.4 メンバーの追加・削除

グループへのメンバー追加

まず、テスト用のユーザーを作成します。

[実行環境: PowerShell 7.4 (管理者)]

# テスト用ユーザーを作成
$Password = ConvertTo-SecureString -String "P@ssw0rd123!" -AsPlainText -Force
New-LocalUser -Name "AppUser01" -Password $Password -Description "Application User 01"

ユーザーをグループに追加します。

# ユーザーをグループに追加
Add-LocalGroupMember -Group "AppAdmins" -Member "AppUser01"

# 確認
Get-LocalGroupMember -Group "AppAdmins"

実行結果の例:

ObjectClass Name               PrincipalSource
----------- ----               ---------------
User        SERVER01\AppUser01 Local

複数のメンバーを一度に追加

# 複数ユーザーを一度に追加
Add-LocalGroupMember -Group "Remote Desktop Users" -Member "AppUser01", "Administrator"

グループからのメンバー削除

# グループからメンバーを削除
Remove-LocalGroupMember -Group "AppAdmins" -Member "AppUser01"

# 確認
Get-LocalGroupMember -Group "AppAdmins"

グループの削除

# グループを削除
Remove-LocalGroup -Name "AppAdmins" -Confirm

# テスト用ユーザーも削除
Remove-LocalUser -Name "AppUser01"

3.7 アクセス権の基本

NTFSファイルシステムでは、ファイルやフォルダに対して詳細なアクセス権(パーミッション)を設定できます。この節では、アクセス権の基本概念と確認方法を学びます。

補足:アクセス権の詳細な設定(変更、継承の管理など)は、本シリーズの後続の回で扱います。ここでは基本概念と確認方法に焦点を当てます。

3.7.1 NTFSアクセス許可の概念

NTFSアクセス許可には、基本的なアクセス許可と詳細なアクセス許可があります。基本的なアクセス許可は以下のとおりです。

アクセス許可 説明
フルコントロール(FullControl) すべての操作が可能。アクセス権の変更も含む
変更(Modify) 読み取り、書き込み、削除が可能
読み取りと実行(ReadAndExecute) ファイルの読み取りと実行が可能
フォルダの内容の一覧表示(ListDirectory) フォルダ内のファイル一覧を表示可能(フォルダのみ)
読み取り(Read) ファイルの読み取りのみ可能
書き込み(Write) ファイルの作成と書き込みが可能

継承の概念

NTFSアクセス許可には「継承」という重要な概念があります。親フォルダに設定されたアクセス許可は、既定で子フォルダや子ファイルに継承されます。これにより、フォルダ階層全体に一貫したアクセス制御を適用できます。

3.7.2 アクセス権の確認

Get-Aclコマンドレットを使用して、ファイルやフォルダのアクセス権を確認できます。

[実行環境: PowerShell 7.4 (管理者)]

# C:\Work フォルダのアクセス権を確認
Get-Acl -Path C:\Work

実行結果の例:

    Directory: C:\

Path Owner                  Access
---- -----                  ------
Work BUILTIN\Administrators NT AUTHORITY\SYSTEM Allow  FullControl...

より詳細な情報を確認するには、Accessプロパティを展開します。

# アクセス制御エントリ(ACE)の詳細を表示
(Get-Acl -Path C:\Work).Access

実行結果の例:

FileSystemRights  : FullControl
AccessControlType : Allow
IdentityReference : NT AUTHORITY\SYSTEM
IsInherited       : True
InheritanceFlags  : ContainerInherit, ObjectInherit
PropagationFlags  : None

FileSystemRights  : FullControl
AccessControlType : Allow
IdentityReference : BUILTIN\Administrators
IsInherited       : True
InheritanceFlags  : ContainerInherit, ObjectInherit
PropagationFlags  : None

FileSystemRights  : ReadAndExecute, Synchronize
AccessControlType : Allow
IdentityReference : BUILTIN\Users
IsInherited       : True
InheritanceFlags  : ContainerInherit, ObjectInherit
PropagationFlags  : None

各プロパティの意味は以下のとおりです。

プロパティ 説明
FileSystemRights 付与されているアクセス権
AccessControlType Allow(許可)またはDeny(拒否)
IdentityReference アクセス権が付与されているユーザーまたはグループ
IsInherited 親フォルダから継承されたアクセス権かどうか
InheritanceFlags 子オブジェクトへの継承方法

3.7.3 アクセス権の読み方(基本)

アクセス権を分かりやすく一覧表示するスクリプトを作成できます。

[実行環境: PowerShell 7.4 (管理者)]

# アクセス権を分かりやすく表示
(Get-Acl -Path C:\Work).Access | 
    Select-Object IdentityReference, 
                  FileSystemRights, 
                  AccessControlType, 
                  IsInherited |
    Format-Table -AutoSize

実行結果の例:

IdentityReference     FileSystemRights                  AccessControlType IsInherited
-----------------     ----------------                  ----------------- -----------
NT AUTHORITY\SYSTEM   FullControl                       Allow             True
BUILTIN\Administrators FullControl                      Allow             True
BUILTIN\Users         ReadAndExecute, Synchronize       Allow             True

この出力から、以下のことがわかります。

  • NT AUTHORITY\SYSTEMBUILTIN\Administratorsは、フルコントロール権限を持っている
  • BUILTIN\Usersは、読み取りと実行の権限を持っている
  • すべてのアクセス権は親フォルダ(C:\)から継承されている(IsInherited = True)

3.8 まとめ

第3回では、以下の内容を学びました。

  • ファイルシステム操作
    • Get-LocationSet-Locationでカレントディレクトリを確認・移動
    • Get-ChildItemでファイル・フォルダの一覧を表示。-Forceで隠しファイル、-Recurseで再帰的検索
    • New-Itemでファイル・フォルダを作成
    • Copy-ItemMove-ItemRemove-Itemでコピー・移動・削除。-Confirmで安全な操作
    • Get-ContentSet-ContentAdd-Contentでファイル内容の読み書き
  • ディスク管理
    • Get-Diskで物理ディスク、Get-Partitionでパーティション、Get-Volumeでボリュームを確認
    • Get-PSDriveでドライブの使用状況を確認
    • ディスク操作はデータ損失リスクがあるため、十分な注意が必要
  • ローカルユーザー管理
    • Get-LocalUserでユーザー一覧を確認
    • New-LocalUserでユーザーを作成。パスワードはSecureStringで扱う
    • Set-LocalUserで変更、Disable-LocalUser/Enable-LocalUserで無効化/有効化
    • Remove-LocalUserで削除
  • ローカルグループ管理
    • Get-LocalGroupでグループ一覧、Get-LocalGroupMemberでメンバー確認
    • New-LocalGroupでグループ作成
    • Add-LocalGroupMember/Remove-LocalGroupMemberでメンバーの追加/削除
  • アクセス権の基本
    • NTFSアクセス許可の種類(フルコントロール、変更、読み取りなど)
    • Get-Aclでアクセス権を確認
    • 継承の概念を理解

これらのスキルは、サーバー管理の基礎となるものです。日常的なファイル操作、ディスク監視、ユーザー管理に活用してください。

3.9 次回予告

第4回では「PowerShellスクリプティング基礎 ― 自動化への第一歩」と題して、変数とデータ型、条件分岐、ループ処理、関数の定義など、PowerShellスクリプトを作成するための基礎を学びます。これまで学んだコマンドレットを組み合わせて、自動化スクリプトを作成する力を身につけましょう。

3.10 参考リンク

Windows Server