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)では、システムディスク以外に追加ディスクがない場合があります。
新しいディスクの初期化(概念)
新しいディスクを使用可能にするには、以下の手順が必要です。
- ディスクの初期化:パーティションスタイル(GPTまたはMBR)を設定
- パーティションの作成:ディスク上に領域を確保
- ボリュームのフォーマット:ファイルシステムを設定してデータを保存可能に
コマンドの例(参考情報として記載):
# ※以下は参考情報です。既存のシステムディスクでは実行しないでください。
# 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\SYSTEMとBUILTIN\Administratorsは、フルコントロール権限を持っている
- BUILTIN\Usersは、読み取りと実行の権限を持っている
- すべてのアクセス権は親フォルダ(C:\)から継承されている(IsInherited = True)
3.8 まとめ
第3回では、以下の内容を学びました。
- ファイルシステム操作
Get-LocationとSet-Locationでカレントディレクトリを確認・移動Get-ChildItemでファイル・フォルダの一覧を表示。-Forceで隠しファイル、-Recurseで再帰的検索New-Itemでファイル・フォルダを作成Copy-Item、Move-Item、Remove-Itemでコピー・移動・削除。-Confirmで安全な操作Get-Content、Set-Content、Add-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スクリプトを作成するための基礎を学びます。これまで学んだコマンドレットを組み合わせて、自動化スクリプトを作成する力を身につけましょう。
