📁 ファイルとディレクトリ操作
カレントディレクトリの変更 (cd)
作業するディレクトリを移動します。
# ドライブ直下に移動 (cmd/ps)
cd C:\
# 特定のフォルダに移動 (cmd/ps)
cd C:\Users\YourUser\Documents
# 親ディレクトリに移動 (cmd/ps)
cd ..
# カレントドライブを変更 (cmd)
D:
# カレントドライブを変更 (ps)
Set-Location D:
# または
cd D:
ディレクトリの内容表示 (dir, ls)
ファイルやフォルダの一覧を表示します。
# カレントディレクトリの内容を表示 (cmd)
dir
# 詳細情報を表示 (cmd)
dir /w # ワイド形式
dir /p # ページごと表示
dir /a # 隠しファイル・システムファイル含む全ファイル表示
dir /o:n # 名前順でソート
dir /s # サブディレクトリも表示
# カレントディレクトリの内容を表示 (ps)
Get-ChildItem
# またはエイリアス
ls
dir
gci
# 隠しファイル・システムファイル含む全ファイル表示 (ps)
Get-ChildItem -Force
# サブディレクトリも表示 (ps)
Get-ChildItem -Recurse
# 特定の種類のファイルのみ表示 (例: .txt) (ps)
Get-ChildItem -Filter *.txt
Get-ChildItem -Include *.txt,*.log -Recurse
Get-ChildItem -Path C:\Path\To -Exclude *.dll
ディレクトリの作成 (mkdir, md)
新しいフォルダを作成します。
# カレントディレクトリに新しいフォルダを作成 (cmd/ps)
mkdir NewFolder
md AnotherFolder
# フルパス指定で作成 (cmd/ps)
mkdir C:\Path\To\NewDirectory
# 複数のフォルダを一度に作成 (ps)
New-Item -ItemType Directory -Path C:\Path\Folder1, C:\Path\Folder2
# 途中のフォルダもまとめて作成 (ps) -Force は不要、自動で作られる
New-Item -ItemType Directory -Path C:\Path\To\Deep\NewFolder
ディレクトリの削除 (rmdir, rd, rm)
フォルダを削除します。中身が空でないと削除できない場合があります。
# 空のフォルダを削除 (cmd/ps)
rmdir FolderToDelete
rd FolderToDelete
# 中身ごとフォルダを削除 (cmd) /S:サブディレクトリも /Q:確認なし
rmdir /S /Q FolderToDelete
# 中身ごとフォルダを削除 (ps) -Recurse:サブディレクトリも -Force:強制削除(読み取り専用なども)
Remove-Item -Recurse -Force FolderToDelete
# またはエイリアス
rm -Recurse -Force FolderToDelete
del -Recurse -Force FolderToDelete
rd -Recurse -Force FolderToDelete # PowerShell 5.0 以降
ファイルの作成 (copy con, type nul >, echo . >, New-Item)
空のファイルを作成したり、簡単な内容でファイルを作成します。
# 空ファイル作成 (cmd)
type nul > emptyfile.txt
echo. > anotherempty.txt # 改行のみのファイル
copy con newfile.txt # コンソールから入力、Ctrl+Z Enterで終了
# 空ファイル作成 (ps)
New-Item -ItemType File emptyfile.txt
# または
"" | Out-File -Encoding utf8 empty_utf8.txt
# 内容を指定してファイル作成 (ps)
"Hello, World!" | Out-File -Encoding utf8 greeting.txt
Set-Content -Path .\myfile.log -Value "Log entry"
ファイルのコピー (copy, Copy-Item)
ファイルを別の場所や名前で複製します。
# ファイルを同じディレクトリに別名でコピー (cmd)
copy source.txt destination.txt
# ファイルを別のディレクトリにコピー (cmd)
copy C:\source\file.txt D:\destination\
# 上書き確認なしでコピー (cmd)
copy /Y source.txt destination\
# ファイルをコピー (ps)
Copy-Item -Path C:\source\file.txt -Destination D:\destination\
Copy-Item -Path .\source.txt -Destination .\destination.txt
# 複数のファイルをコピー (ps)
Copy-Item -Path C:\source\*.log -Destination D:\logs\
# 再帰的にディレクトリごとコピー (ps)
Copy-Item -Path C:\SourceFolder -Destination D:\Backup\ -Recurse
ファイルの移動 (move, Move-Item)
ファイルを別の場所に移動します。名前の変更にも使えます。
# ファイルを別のディレクトリに移動 (cmd)
move C:\source\file.txt D:\destination\
# ファイル名を変更 (cmd) - 同じフォルダ内で移動
move oldname.txt newname.txt
# ファイルを移動 (ps)
Move-Item -Path C:\source\file.txt -Destination D:\destination\
# ファイル名を変更 (ps)
Move-Item -Path .\oldname.txt -Destination .\newname.txt
# 存在する場合に上書き (ps)
Move-Item -Path .\source.txt -Destination .\target.txt -Force
ファイルの名前変更 (ren, rename, Rename-Item)
ファイルやフォルダの名前を変更します。
# ファイル名を変更 (cmd)
ren oldname.txt newname.txt
rename C:\path\to\oldfolder newfolder
# ファイル名を変更 (ps)
Rename-Item -Path .\oldname.txt -NewName newname.txt
Rename-Item -Path C:\path\to\oldfolder -NewName newfolder
# 複数のファイル名を一括変更 (例: .log を .txt に) (ps)
Get-ChildItem *.log | Rename-Item -NewName { $_.Name -replace '\.log','.txt' }
ファイルの削除 (del, erase, Remove-Item, rm, del)
ファイルを削除します。
# ファイルを削除 (cmd)
del filename.txt
erase anotherfile.txt
# 確認なしで削除 (cmd)
del /Q filename.txt
# 特定の拡張子のファイルをすべて削除 (cmd)
del *.tmp
# ファイルを削除 (ps)
Remove-Item .\filename.txt
# またはエイリアス
rm .\filename.txt
del .\filename.txt
# 読み取り専用ファイルも強制削除 (ps)
Remove-Item .\readonlyfile.txt -Force
# 特定の拡張子のファイルをすべて削除 (ps)
Remove-Item *.tmp
ファイルの内容表示 (type, Get-Content, cat)
テキストファイルの中身をコンソールに表示します。
# ファイルの内容を表示 (cmd)
type filename.txt
# ファイルの内容を表示 (ps)
Get-Content .\filename.txt
# またはエイリアス
cat .\filename.txt
type .\filename.txt # PowerShell でも type は Get-Content のエイリアス
# 末尾の数行を表示 (ps)
Get-Content .\logfile.log -Tail 10
# 先頭の数行を表示 (ps)
Get-Content .\config.ini -Head 5
# ファイルの内容を監視 (変更があれば追記表示) (ps)
Get-Content .\logfile.log -Wait
ファイルの検索 (dir /s, where, Get-ChildItem -Recurse)
指定した条件でファイルを検索します。
# カレントディレクトリ以下で特定のファイル名を検索 (cmd)
dir /s mydocument.docx
# 実行パスが通っている場所からプログラムを検索 (cmd)
where notepad.exe
# カレントディレクトリ以下で特定のファイル名を検索 (ps)
Get-ChildItem -Recurse -Filter mydocument.docx
# 特定の拡張子のファイルを検索 (ps)
Get-ChildItem -Recurse -Include *.log
# 特定のフォルダを除外して検索 (ps)
Get-ChildItem -Path C:\Users -Recurse -Exclude *AppData* -Filter *.config
属性の変更 (attrib, Get-ItemProperty/Set-ItemProperty)
ファイルの属性(読み取り専用、隠しファイルなど)を表示・変更します。
# ファイル属性を表示 (cmd)
attrib filename.txt
# 読み取り専用属性を付加 (cmd)
attrib +r filename.txt
# 読み取り専用属性を解除 (cmd)
attrib -r filename.txt
# 隠しファイル属性を付加 (cmd)
attrib +h filename.txt
# 隠しファイル属性を解除 (cmd)
attrib -h filename.txt
# ファイル属性を取得 (ps)
(Get-ItemProperty -Path .\filename.txt).Attributes
# 読み取り専用属性を付加 (ps)
Set-ItemProperty -Path .\filename.txt -Name IsReadOnly -Value $true
# 読み取り専用属性を解除 (ps)
Set-ItemProperty -Path .\filename.txt -Name IsReadOnly -Value $false
# 属性を直接操作 (ps) - より高度な操作
$file = Get-Item .\filename.txt
$file.Attributes = $file.Attributes -bor [System.IO.FileAttributes]::Hidden # 隠し属性追加
$file.Attributes = $file.Attributes -band (-bnot ([System.IO.FileAttributes]::ReadOnly)) # 読み取り専用解除
⚙️ システム情報と管理
システム情報の表示 (systeminfo)
OSのバージョン、インストール日時、CPU、メモリなどの詳細情報を表示します。
# システム情報を表示 (cmd/ps)
systeminfo
# 特定の情報だけを抽出 (例: OS名) (cmd)
systeminfo | findstr /B /C:"OS Name"
# 特定の情報だけを抽出 (例: OS名) (ps)
systeminfo | Select-String -Pattern 'OS Name'
# または PowerShell オブジェクトとして取得 (より確実)
Get-ComputerInfo | Select-Object WindowsProductName, OsArchitecture, CsTotalPhysicalMemory
IP設定の表示・変更 (ipconfig, Get-NetIPConfiguration)
ネットワークインターフェースのIPアドレス、サブネットマスク、デフォルトゲートウェイなどを表示・管理します。
# IP設定の概要を表示 (cmd)
ipconfig
# IP設定の詳細を表示 (cmd)
ipconfig /all
# DNSキャッシュをクリア (cmd)
ipconfig /flushdns
# DHCPリースを解放 (cmd)
ipconfig /release
# DHCPリースを再取得 (cmd)
ipconfig /renew
# IP設定の詳細を表示 (ps)
Get-NetIPConfiguration
# 特定のインターフェースの詳細を表示 (ps)
Get-NetIPConfiguration -InterfaceAlias "Ethernet"
# DNSキャッシュをクリア (ps)
Clear-DnsClientCache
注意: IPアドレスの手動設定変更は通常 `netsh` (cmd) や PowerShell の `NetTCPIP` モジュール (`New-NetIPAddress`, `Set-NetIPAddress` など) を使用しますが、複雑なためここでは割愛します。
ネットワーク接続の確認 (ping, tracert, Test-NetConnection)
特定のホストへのネットワーク接続を確認したり、経路を追跡します。
# 特定のホストにICMP Echo要求を送信 (cmd/ps)
ping google.com
ping 8.8.8.8
# 送信回数を指定 (cmd)
ping -n 10 google.com
# 送信回数を指定 (ps)
ping google.com -Count 10 # PowerShell 7+ or specific modules
Test-NetConnection google.com -Count 10 # Standard PS
# 経路情報を表示 (cmd)
tracert google.com
# 経路情報を表示 (ps)
tracert google.com # tracert は Test-NetConnection のエイリアスの場合がある
Test-NetConnection google.com -TraceRoute
# 特定ポートへの接続テスト (ps)
Test-NetConnection google.com -Port 443
実行中のプロセスの表示・終了 (tasklist, taskkill, Get-Process, Stop-Process)
現在実行されているプロセス(タスク)の一覧を表示したり、特定のプロセスを強制終了します。
# プロセス一覧を表示 (cmd)
tasklist
# 特定のプロセス名でフィルタリング (cmd)
tasklist | findstr "notepad.exe"
# プロセスID (PID) を指定して終了 (cmd)
taskkill /PID 1234 /F # /Fは強制終了
# イメージ名 (プロセス名) を指定して終了 (cmd)
taskkill /IM notepad.exe /F
# プロセス一覧を表示 (ps)
Get-Process
# またはエイリアス
ps
gps
# 特定のプロセス名でフィルタリング (ps)
Get-Process -Name notepad
# プロセスID (PID) を指定して終了 (ps)
Stop-Process -Id 1234 -Force
# プロセス名を指定して終了 (ps)
Stop-Process -Name notepad -Force
# またはパイプで
Get-Process -Name notepad | Stop-Process -Force
サービスの管理 (sc, Get-Service, Start-Service, Stop-Service)
Windowsサービスの状態表示、開始、停止などを行います。
# サービスの状態を照会 (cmd)
sc query Spooler # Spoolerサービスの状態表示
# すべてのサービスの状態を照会 (cmd)
sc query state= all
# サービスを開始 (cmd)
sc start Spooler
# サービスを停止 (cmd)
sc stop Spooler
# サービスの一覧を取得 (ps)
Get-Service
# 特定のサービスを取得 (ps)
Get-Service -Name Spooler
Get-Service -DisplayName "Print Spooler"
# サービスを開始 (ps)
Start-Service -Name Spooler
# サービスを停止 (ps)
Stop-Service -Name Spooler
# サービスを再起動 (ps)
Restart-Service -Name Spooler
# サービスのスタートアップの種類を変更 (ps)
Set-Service -Name Spooler -StartupType Automatic # または Manual, Disabled
コンピュータ名の表示 (hostname, $env:COMPUTERNAME)
ローカルコンピュータの名前を表示します。
# コンピュータ名を表示 (cmd)
hostname
# コンピュータ名を表示 (ps)
hostname
# または環境変数から
$env:COMPUTERNAME
# または WMI/CIM から (より詳細)
Get-CimInstance -ClassName Win32_ComputerSystem | Select-Object -ExpandProperty Name
ユーザーアカウントの管理 (net user)
ローカルユーザーアカウントの表示、追加、削除、パスワード変更などを行います。
# ローカルユーザーアカウント一覧を表示 (cmd)
net user
# 特定のユーザーの詳細情報を表示 (cmd)
net user Guest
# 新しいユーザーを追加 (cmd)
net user NewUser Password123 /add
# ユーザーを削除 (cmd)
net user ExistingUser /delete
# ユーザーのパスワードを変更 (cmd)
net user TargetUser NewPassword456
# ユーザーをグループに追加 (例: Administrators) (cmd)
net localgroup Administrators TargetUser /add
# ユーザーをグループから削除 (cmd)
net localgroup Administrators TargetUser /delete
# PowerShell でのユーザー管理 (より推奨される方法)
# ローカルユーザー取得 (ps)
Get-LocalUser
# 特定ユーザー取得 (ps)
Get-LocalUser -Name Guest
# 新規ユーザー作成 (ps)
New-LocalUser -Name "NewUserPS" -Password (Read-Host -AsSecureString "Enter password") -FullName "New User from PS" -Description "Test account"
# ユーザー削除 (ps)
Remove-LocalUser -Name "UserToDelete"
# パスワード設定 (ps)
$user = Get-LocalUser -Name "TargetUserPS"
$password = Read-Host -AsSecureString "Enter new password"
$user.SetPassword($password)
# グループへの追加 (ps)
Add-LocalGroupMember -Group "Administrators" -Member "TargetUserPS"
# グループからの削除 (ps)
Remove-LocalGroupMember -Group "Administrators" -Member "TargetUserPS"
注意: ユーザー管理操作は管理者権限が必要です。
環境変数の表示・設定 (set, $env:, setx)
環境変数を表示したり、一時的または永続的に設定します。
# すべての環境変数を表示 (cmd)
set
# 特定の環境変数を表示 (cmd)
set PATH
set PROCESSOR_ARCHITECTURE
# 現在のセッションで環境変数を設定 (cmd)
set MY_VARIABLE=MyValue
# すべての環境変数を表示 (ps)
Get-ChildItem Env:
# または
dir env:
# 特定の環境変数を表示 (ps)
$env:PATH
$env:PROCESSOR_ARCHITECTURE
# 現在のセッションで環境変数を設定 (ps)
$env:MY_VARIABLE = "MyValue"
# 永続的な環境変数を作成/変更 (ユーザー環境変数) (cmd/ps)
setx MY_PERSISTENT_VAR "This value persists"
# 永続的な環境変数を作成/変更 (システム環境変数 - 管理者権限要) (cmd/ps)
setx /M SYSTEM_WIDE_VAR "Available to all users"
setx
で設定した変数は、新しいコマンドプロンプトやPowerShellセッションを開かないと反映されません。
ディスク管理 (diskpart, chkdsk, format)
ディスクのパーティション操作、エラーチェック、フォーマットなどを行います。
# ディスクチェック (例: Cドライブ) (cmd/ps - 管理者権限要)
chkdsk C:
chkdsk C: /f # エラーを修正
chkdsk C: /r # 不良セクタを見つけて読み取り可能な情報を回復 (/fも含む)
# 対話的なディスクパーティション操作ツール起動 (cmd/ps - 管理者権限要)
diskpart
# diskpart 内でのコマンド例:
# list disk (ディスク一覧)
# select disk 1 (ディスク1を選択)
# list partition (パーティション一覧)
# select partition 2 (パーティション2を選択)
# format fs=ntfs quick (NTFSでクイックフォーマット)
# assign letter=E (ドライブ文字Eを割り当て)
# exit (diskpart終了)
# ドライブのフォーマット (例: DドライブをNTFSでクイックフォーマット) (cmd/ps - 管理者権限要)
format D: /FS:NTFS /Q /Y # /Yは確認なし
# PowerShell でのディスク情報取得 (ps)
Get-Disk
Get-Partition -DiskNumber 0
Get-Volume
警告: diskpart
や format
はデータ損失の危険があるため、使用には十分注意してください。
シャットダウン・再起動 (shutdown)
コンピュータをシャットダウンまたは再起動します。
# 即時シャットダウン (cmd/ps)
shutdown /s /t 0
# 即時再起動 (cmd/ps)
shutdown /r /t 0
# 60秒後にシャットダウンし、理由を表示 (cmd/ps)
shutdown /s /t 60 /c "Scheduled maintenance"
# シャットダウンを中止 (cmd/ps)
shutdown /a
# リモートコンピュータを再起動 (cmd/ps - 適切な権限と設定が必要)
shutdown /r /m \\RemoteComputerName /t 0
# PowerShell での再起動 (ps)
Restart-Computer
# PowerShell でのシャットダウン (ps)
Stop-Computer
# リモートコンピュータを再起動 (ps)
Restart-Computer -ComputerName RemoteComputer1, RemoteComputer2 -Force
⌨️ テキスト処理とパイプライン
文字列の検索 (findstr, Select-String)
ファイル内やコマンド出力から特定の文字列が含まれる行を検索します。
# ファイル内で文字列 "error" を検索 (大文字小文字区別なし) (cmd)
findstr /i "error" logfile.txt
# 複数ファイルから検索 (cmd)
findstr "pattern" *.log
# 正規表現を使用して検索 (cmd)
findstr /r "^[0-9]" data.txt # 数字で始まる行
# コマンド出力から検索 (cmd)
ipconfig /all | findstr "DNS Servers"
# ファイル内で文字列 "error" を検索 (大文字小文字区別なし) (ps)
Select-String -Path logfile.txt -Pattern "error" -CaseSensitive:$false # デフォルトは区別しない
# 複数ファイルから検索 (ps)
Select-String -Path *.log -Pattern "pattern"
# 正規表現を使用して検索 (ps)
Select-String -Path data.txt -Pattern '^[0-9]' # デフォルトで正規表現が使える
# コマンド出力から検索 (ps)
ipconfig /all | Select-String -Pattern "DNS Servers"
# または PowerShell コマンドレットの出力から
Get-NetIPConfiguration | Select-String "DNS"
出力のリダイレクト (>, >>)
コマンドの標準出力をファイルに書き込みます。
# コマンドの出力をファイルに上書き保存 (cmd/ps)
dir > filelist.txt
Get-Process > processlist.txt
# コマンドの出力をファイルに追記保存 (cmd/ps)
dir >> filelist.txt
Get-Date >> log.txt
# 標準エラー出力をリダイレクト (cmd) 2>&1 は標準エラーを標準出力にマージ
command_that_might_fail > output.txt 2> errors.txt
command_that_might_fail > all_output.txt 2>&1
# 標準エラー出力をリダイレクト (ps)
Get-ChildItem -Path NonExistentPath *> output_and_errors.log # 全てのストリーム(*)をリダイレクト
Get-ChildItem -Path NonExistentPath 2> errors_only.log # エラーストリーム(2)のみ
パイプ (|)
あるコマンドの出力を、別のコマンドの入力として渡します。
# プロセス一覧から "svchost" を含むものだけ表示 (cmd)
tasklist | findstr "svchost"
# サービス一覧から実行中のものだけ表示し、名前でソート (ps)
Get-Service | Where-Object {$_.Status -eq 'Running'} | Sort-Object -Property Name
# ディレクトリ内のテキストファイルの内容を検索して結果をファイルに出力 (ps)
Get-ChildItem -Filter *.txt | Select-String -Pattern "keyword" | Out-File results.txt
コマンドの連結 (&, &&, ||)
複数のコマンドを一行で連続実行したり、条件に応じて実行します。
# コマンド1を実行し、その後コマンド2を実行 (cmd)
command1 & command2
# コマンド1が成功したらコマンド2を実行 (cmd)
command1 && command2
# コマンド1が失敗したらコマンド2を実行 (cmd)
command1 || command2
# PowerShell ではセミコロン(;)で連結 (常に順次実行)
Command-1; Command-2
# PowerShell での条件付き実行 (if文などを使うのが一般的)
if (Test-Path .\myfile.txt) { Remove-Item .\myfile.txt } else { Write-Host "File not found." }
# または try/catch
try { Risky-Command } catch { Handle-Error }
クリップボード操作 (clip, Get-Clipboard, Set-Clipboard)
コマンドの出力をクリップボードにコピーしたり、クリップボードの内容を貼り付けたりします。
# ディレクトリ一覧をクリップボードにコピー (cmd)
dir | clip
# IP設定をクリップボードにコピー (cmd)
ipconfig /all | clip
# ファイルの内容をクリップボードにコピー (cmd)
clip < filename.txt
# ディレクトリ一覧をクリップボードにコピー (ps)
Get-ChildItem | Out-Clipboard # PowerShell v3+ (または Set-Clipboard)
Get-ChildItem | Set-Clipboard # PowerShell v5+
# クリップボードの内容を取得 (ps)
Get-Clipboard
# クリップボードにテキストを設定 (ps)
Set-Clipboard -Value "This text goes to clipboard"
"Another way to set clipboard" | Set-Clipboard
🌐 ネットワーク関連
ネットワークドライブの割り当て (net use)
共有フォルダをドライブ文字に割り当てて、アクセスしやすくします。
# 利用可能な共有リソースを表示 (cmd/ps)
net view \\ServerName
# ネットワークドライブZ: に共有フォルダを割り当てる (cmd/ps)
net use Z: \\ServerName\ShareName
# 認証情報が必要な場合 (cmd/ps)
net use Z: \\ServerName\ShareName /user:Domain\UserName Password
# 永続的に割り当てる (次回ログオン時も有効) (cmd/ps)
net use Z: \\ServerName\ShareName /persistent:yes
# ネットワークドライブの割り当てを解除 (cmd/ps)
net use Z: /delete
# すべての割り当てを解除 (cmd/ps)
net use * /delete
# PowerShell でのネットワークドライブ割り当て (ps)
New-PSDrive -Name "Z" -PSProvider "FileSystem" -Root "\\ServerName\ShareName" -Persist
# PowerShell でのネットワークドライブ削除 (ps)
Remove-PSDrive -Name "Z"
共有フォルダの管理 (net share, Get-SmbShare, New-SmbShare)
ローカルコンピュータ上のフォルダを共有したり、共有設定を確認・変更します。
# ローカルの共有フォルダ一覧を表示 (cmd)
net share
# 新しい共有を作成 (cmd - 共有名ShareNameでC:\Dataを共有)
net share ShareName=C:\Data /grant:Everyone,READ # Everyoneに読み取り権限
# 共有を削除 (cmd)
net share ShareName /delete
# ローカルの共有フォルダ一覧を表示 (ps)
Get-SmbShare
# 新しい共有を作成 (ps - 管理者権限要)
New-SmbShare -Name "PSShare" -Path "C:\DataToShare" -FullAccess "Domain\AdminUser" -ReadAccess "Everyone"
# 共有のアクセス許可を変更 (ps)
Set-SmbShare -Name "PSShare" -FullAccess "Domain\AnotherAdmin"
# 共有を削除 (ps)
Remove-SmbShare -Name "PSShare"
注意: 共有フォルダの作成・削除には通常管理者権限が必要です。
ネットワーク統計の表示 (netstat)
現在のネットワーク接続、リッスンポート、イーサネット統計などを表示します。
# すべてのアクティブなTCP接続とリッスンポートを表示 (アドレスとポートは数値表示) (cmd/ps)
netstat -an
# 実行ファイル名 (プロセス) を表示 (cmd/ps - 管理者権限が必要な場合あり)
netstat -ano # PIDも表示
netstat -anb # 実行ファイル名表示 (遅いことがある)
# 特定のポート (例: 443) を使用している接続を検索 (cmd)
netstat -ano | findstr ":443"
# 特定のポート (例: 443) を使用している接続を検索 (ps)
netstat -ano | Select-String ":443"
# または PowerShell で (より構造化データ)
Get-NetTCPConnection -LocalPort 443
# イーサネット統計を表示 (cmd/ps)
netstat -e
# ルーティングテーブルを表示 (cmd/ps)
netstat -r
# または
route print
# または PowerShell で (ps)
Get-NetRoute
DNSキャッシュのクリア (ipconfig /flushdns, Clear-DnsClientCache)
ローカルのDNSリゾルバキャッシュをクリアします。DNS設定変更後などに有効です。
# DNSキャッシュをクリア (cmd - 管理者権限要)
ipconfig /flushdns
# DNSキャッシュをクリア (ps - 管理者権限要)
Clear-DnsClientCache
リモートデスクトップ接続 (mstsc)
リモートデスクトップ接続クライアントを起動します。
# リモートデスクトップ接続クライアントを起動 (cmd/ps)
mstsc
# 特定のコンピュータに接続ダイアログを表示 (cmd/ps)
mstsc /v:TargetComputerName
# フルスクリーンで接続 (cmd/ps)
mstsc /f /v:TargetComputerName
# 特定の解像度で接続 (cmd/ps)
mstsc /w:1280 /h:1024 /v:TargetComputerName
# 保存済みの .rdp ファイルを使用して接続 (cmd/ps)
mstsc C:\Path\To\ConnectionFile.rdp
📜 バッチファイル・スクリプト (基本)
コマンドプロンプト (`.bat`, `.cmd`) や PowerShell (`.ps1`) で利用する基本的なスクリプティング要素です。
機能 | コマンドプロンプト (cmd) | PowerShell (ps) | 説明 |
---|---|---|---|
コメント ✍️ | rem コメント :: コメント (非公式だが一般的) |
# コメント <# ブロックコメント #> |
スクリプト内に説明や注釈を記述します。実行時には無視されます。 |
変数定義 📦 | set VariableName=Value |
$VariableName = Value |
値を格納するための変数を定義します。PowerShellでは型を指定することも可能です (例: `[string]$name = “abc”` )。 |
変数参照 | %VariableName% |
$VariableName ${VariableName} (明確化) |
定義した変数の値を参照します。 |
環境変数 🌍 | %PATH% %USERNAME% |
$env:PATH $env:USERNAME |
システムやユーザー定義の環境変数を参照します。 |
条件分岐 (if) 🤔 | if "%Var%"=="Value" ( command ) if exist filename ( command ) if errorlevel 1 ( command ) |
if ($Var -eq "Value") { command } if (Test-Path filename) { command } if ($LASTEXITCODE -ne 0) { command } if (...) { ... } elseif (...) { ... } else { ... } switch ($value) { condition1 { ... } condition2 { ... } default { ... } } |
条件に応じて異なるコマンドを実行します。PowerShellはより多くの比較演算子 (-eq, -ne, -gt, -lt, -like, -match など) や構文を提供します。 |
ループ (for) 🔄 | for %%i in (item1 item2) do command %%i for /L %%i in (start,step,end) do command %%i for /F "tokens=..." %%i in ('command') do ... |
foreach ($item in $collection) { command $item } $collection | ForEach-Object { command $_ } for ($i=0; $i -lt 10; $i++) { command $i } while ($condition) { command } do { command } while ($condition) |
一連のアイテムや条件に基づいてコマンドを繰り返し実行します。PowerShellの `foreach` やパイプラインとの連携 (`ForEach-Object`) が強力です。 |
関数/サブルーチン ⚙️ | goto Label :Label call :SubroutineName arg1 exit /b |
function FunctionName { param($param1) ... return $value } FunctionName -param1 value |
処理をまとめたブロックを作成し、再利用可能にします。PowerShellの関数は引数、戻り値、スコープなどを明確に扱えます。 |
引数処理 📥 | %1 , %2 , …%* (全引数) shift |
$args[0] , $args[1] , …$args (全引数配列)param($Param1, [string]$Param2) (名前付きパラメータ) |
スクリプト実行時に渡された引数を受け取ります。PowerShellの `param()` ブロックが推奨されます。 |
エラー処理 ⚠️ | if errorlevel 1 command command || echo Error occurred |
try { command } catch { $_; Write-Error "Error" } finally { cleanup } $ErrorActionPreference = "Stop" |
コマンド実行時のエラーを検知し、対処します。PowerShellの `try/catch/finally` が構造化されたエラーハンドリングを提供します。 |
コマンドエコー制御 🗣️ | @echo off (コマンド自体を表示しない)echo message (メッセージ表示) |
(デフォルトでコマンドは表示されない)Write-Host "message" (コンソール出力)Write-Output "object/string" (パイプライン出力) |
スクリプト実行中にコマンド自身を表示するかどうか、またメッセージをどう表示するかを制御します。 |
✨ PowerShell 特有の機能
PowerShell はオブジェクト指向のシェルであり、cmd にはない強力な機能が多くあります。
コマンドレットの検索とヘルプ (Get-Command, Get-Help)
利用可能なコマンド (コマンドレット) を探したり、コマンドの使い方を調べたりします。
# 名前に "Service" を含むコマンドを検索
Get-Command *Service*
# 特定のコマンドレットの詳細ヘルプを表示
Get-Help Get-Service
# ヘルプを別ウィンドウで表示
Get-Help Get-Service -ShowWindow
# ヘルプの例を表示
Get-Help Get-Service -Examples
# パラメータの詳細を表示
Get-Help Get-Service -Parameter Name
# ヘルプコンテンツを更新 (管理者権限が必要な場合あり)
Update-Help
オブジェクト操作
PowerShell のコマンドはテキストではなくオブジェクトを返します。これにより、柔軟なデータ操作が可能です。
コマンドレット | エイリアス例 | 説明 | 使用例 |
---|---|---|---|
Select-Object |
select |
オブジェクトから特定のプロパティを選択したり、最初のN個/最後のN個のオブジェクトを選択します。 |
|
Where-Object |
where , ? |
指定した条件に一致するオブジェクトをフィルタリングします。 |
|
Sort-Object |
sort |
指定したプロパティに基づいてオブジェクトを並べ替えます。 |
|
Format-Table |
ft |
オブジェクトを表形式で表示します。表示するプロパティや幅を調整できます。 |
|
Format-List |
fl |
オブジェクトのプロパティをリスト形式で表示します。多くのプロパティを持つオブジェクトに適しています。 |
|
Measure-Object |
measure |
オブジェクトの数やプロパティの合計、平均、最大、最小などを計算します。 |
|
Group-Object |
group |
指定したプロパティの値に基づいてオブジェクトをグループ化します。 |
|
ConvertTo-Csv / Export-Csv |
オブジェクトをCSV形式の文字列に変換したり、CSVファイルとしてエクスポートします。 |
|
|
ConvertTo-Json / ConvertFrom-Json |
オブジェクトをJSON形式の文字列に変換したり、JSON文字列からオブジェクトに戻します。 |
|
モジュールの管理 (Get-Module, Import-Module, Install-Module)
PowerShellの機能を拡張するモジュールを管理します。
# 現在のセッションにロードされているモジュールを表示
Get-Module
# 利用可能なモジュール (ロードされていないものも含む) を表示
Get-Module -ListAvailable
# モジュールをインポート (例: ActiveDirectory モジュール)
Import-Module ActiveDirectory
# PowerShell Gallery からモジュールをインストール (管理者権限が必要)
# NuGet プロバイダーのインストールが必要な場合あり
Install-Module -Name PSWindowsUpdate
# インストール済みモジュールを更新
Update-Module -Name PSWindowsUpdate
リモート実行 (Invoke-Command, Enter-PSSession)
他のコンピュータ上でコマンドを実行したり、対話的なリモートセッションを開始します (WinRMの設定が必要)。
# リモートコンピュータでコマンドを実行
Invoke-Command -ComputerName Server01, Server02 -ScriptBlock { Get-Process -Name explorer }
# リモートコンピュータへの対話型セッションを開始
Enter-PSSession -ComputerName Server01
# セッション内ではプロンプトが [Server01]: PS C:\> のようになる
# セッションを終了するには exit を実行
# 複数のリモートコンピュータに対する永続的なセッションを作成
$session = New-PSSession -ComputerName Server01, Server02
Invoke-Command -Session $session -ScriptBlock { $env:COMPUTERNAME }
Remove-PSSession -Session $session
エイリアス (Get-Alias, Set-Alias)
コマンドレットの短い別名を定義・表示します。
# 定義されているエイリアス一覧を表示
Get-Alias
# 特定のコマンドレットのエイリアスを表示 (例: Get-ChildItem)
Get-Alias -Definition Get-ChildItem
# 特定のエイリアスが何のコマンドレットを指すか表示 (例: ls)
Get-Alias -Name ls
# 新しいエイリアスを作成 (現在のセッションのみ)
Set-Alias -Name goc -Value Get-Content
# これで goc log.txt が Get-Content log.txt と同じ意味になる
# プロファイルに Set-Alias を記述すれば永続化できる
# プロファイルパスは $PROFILE 変数で確認可能
notepad $PROFILE
コメント