0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

本記事では、PowerShellのコマンドとお作法を
備忘録としてまとめます。

コマンドプロンプト(cmd)との違いや
よく使うコマンドレットを中心に整理しています。


1. PowerShellの基本的な特徴

コマンドプロンプトとの違い

項目 コマンドプロンプト PowerShell
出力 テキスト オブジェクト
コマンド コマンド コマンドレット(Verb-Noun形式)
スクリプト .bat .ps1
パイプライン テキストを渡す オブジェクトを渡す
文字コード Shift-JIS UTF-8(設定による)

PowerShellの最大の特徴はオブジェクトのパイプラインです。
コマンドの出力がテキストではなくオブジェクトなので、
プロパティを直接参照したりフィルタリングしたりできます。


2. コマンドレットの命名規則

PowerShellのコマンドは**Verb-Noun(動詞-名詞)**形式です。

Get-Process      # プロセスを取得する
Set-Location     # 場所(ディレクトリ)を設定する
New-Item         # 新しいアイテムを作成する
Remove-Item      # アイテムを削除する

よく使うVerbの一覧

Verb 意味
Get 取得する Get-Process
Set 設定する Set-Location
New 新規作成する New-Item
Remove 削除する Remove-Item
Copy コピーする Copy-Item
Move 移動する Move-Item
Start 開始する Start-Process
Stop 停止する Stop-Process
Write 書き込む Write-Host
Out 出力する Out-File

3. エイリアス(短縮コマンド)

よく使うコマンドレットには短縮形(エイリアス)があります。

エイリアス フルコマンド 内容
ls / dir / gci Get-ChildItem ファイル・フォルダ一覧
cd / sl Set-Location ディレクトリ移動
pwd / gl Get-Location 現在のディレクトリを表示
cp / copy Copy-Item コピー
mv / move Move-Item 移動
rm / del Remove-Item 削除
cat / type Get-Content ファイルの内容を表示
echo / write Write-Output テキストを出力
cls Clear-Host 画面をクリア
man / help Get-Help ヘルプを表示

エイリアスはスクリプトファイルでは使わない方が推奨されています。
スクリプトの可読性・移植性のために
フルコマンドレット名を使うのがお作法です。


4. ファイル・フォルダ操作

# 現在のディレクトリを表示
Get-Location

# ディレクトリを移動
Set-Location C:\projects

# 一つ上のディレクトリに移動
Set-Location ..

# ファイル・フォルダの一覧を表示
Get-ChildItem

# 隠しファイルも含めて表示
Get-ChildItem -Force

# 特定の拡張子のみ表示
Get-ChildItem -Filter *.py

# サブフォルダも含めて再帰的に表示
Get-ChildItem -Recurse

# フォルダを作成
New-Item -ItemType Directory -Name "myfolder"

# ファイルを作成
New-Item -ItemType File -Name "myfile.txt"

# ファイルをコピー
Copy-Item "source.txt" "destination.txt"

# ファイルを移動
Move-Item "source.txt" "C:\backup\source.txt"

# ファイルを削除
Remove-Item "myfile.txt"

# フォルダを中身ごと削除
Remove-Item "myfolder" -Recurse -Force

Remove-Item -Recurse -Forceは元に戻せません。
削除対象のパスを必ず確認してから実行してください。


5. ファイルの内容操作

# ファイルの内容を表示
Get-Content "myfile.txt"

# 末尾10行を表示
Get-Content "myfile.txt" -Tail 10

# リアルタイムで末尾を監視(Linuxのtail -fに相当)
Get-Content "myfile.txt" -Wait

# ファイルに書き込む(上書き)
"Hello, World!" | Out-File "myfile.txt"

# ファイルに追記する
"追加行" | Out-File "myfile.txt" -Append

# 文字コードを指定して書き込む
"テスト" | Out-File "myfile.txt" -Encoding UTF8

# ファイルの内容を変数に格納
$content = Get-Content "myfile.txt"

6. 変数

# 変数の定義($から始まる)
$name = "PowerShell"
$number = 42
$flag = $true   # 真偽値は$true / $false

# 変数を表示
Write-Host $name
Write-Host "Hello, $name"   # 文字列内に埋め込める

# 変数の型を確認
$name.GetType()

# 配列
$array = @("apple", "banana", "cherry")
$array[0]   # apple

# ハッシュテーブル(連想配列)
$hash = @{
    Name = "PowerShell"
    Version = "7.x"
}
$hash["Name"]   # PowerShell
$hash.Name      # PowerShell(ドットでもアクセス可能)

7. パイプライン

PowerShellのパイプはオブジェクトを渡します。

# プロセス一覧をソートして表示
Get-Process | Sort-Object CPU -Descending

# 特定のプロセスを検索
Get-Process | Where-Object { $_.Name -like "*chrome*" }

# プロセス名だけ取り出す
Get-Process | Select-Object Name, CPU

# 先頭5件だけ取得
Get-Process | Select-Object -First 5

# 件数をカウントする
Get-ChildItem | Measure-Object

# CSVに出力する
Get-Process | Export-Csv "process.csv" -NoTypeInformation

$_はパイプラインで渡ってきたオブジェクト(現在の要素)を指します。
Where-ObjectForEach-Objectの中でよく使います。


8. 条件分岐とループ

# if文
$value = 10
if ($value -gt 5) {
    Write-Host "5より大きい"
} elseif ($value -eq 5) {
    Write-Host "5と等しい"
} else {
    Write-Host "5より小さい"
}

# 比較演算子一覧
# -eq  等しい
# -ne  等しくない
# -gt  より大きい
# -lt  より小さい
# -ge  以上
# -le  以下
# -like ワイルドカード一致
# -match 正規表現一致

# forループ
for ($i = 0; $i -lt 5; $i++) {
    Write-Host $i
}

# foreachループ
$items = @("apple", "banana", "cherry")
foreach ($item in $items) {
    Write-Host $item
}

# ForEach-Object(パイプラインで使う)
1..5 | ForEach-Object { Write-Host $_ }

# whileループ
$count = 0
while ($count -lt 3) {
    Write-Host $count
    $count++
}

9. 文字列操作

$str = "Hello, PowerShell"

# 文字列の長さ
$str.Length

# 大文字・小文字変換
$str.ToUpper()
$str.ToLower()

# 特定の文字列を含むか確認
$str.Contains("PowerShell")   # True

# 文字列を置換
$str.Replace("PowerShell", "World")

# 文字列を分割
$str.Split(",")

# トリム(前後の空白を削除)
"  Hello  ".Trim()

# 部分文字列を取得
$str.Substring(0, 5)   # Hello

# 文字列の検索
$str.IndexOf("PowerShell")   # 7

10. プロセス・サービスの管理

# プロセス一覧を表示
Get-Process

# 特定のプロセスを表示
Get-Process -Name "notepad"

# プロセスを起動
Start-Process "notepad.exe"

# プロセスを強制終了
Stop-Process -Name "notepad" -Force

# サービス一覧を表示
Get-Service

# サービスの状態を確認
Get-Service -Name "wuauserv"

# サービスを起動・停止・再起動
Start-Service -Name "wuauserv"
Stop-Service -Name "wuauserv"
Restart-Service -Name "wuauserv"

11. よく使う便利なコマンド

# クリップボードにコピー
Get-Process | Set-Clipboard

# クリップボードから貼り付け
Get-Clipboard

# コマンドの実行時間を計測
Measure-Command { Get-ChildItem -Recurse }

# コマンドのヘルプを表示
Get-Help Get-ChildItem
Get-Help Get-ChildItem -Examples   # 使用例を表示

# コマンドの一覧を検索
Get-Command *process*

# オブジェクトのプロパティ一覧を確認
Get-Process | Get-Member

# 環境変数を確認
$env:PATH
$env:USERNAME
$env:COMPUTERNAME

# 環境変数を設定(セッション内のみ)
$env:MY_VAR = "myvalue"

12. スクリプトファイルのお作法

実行ポリシーの確認と変更

# 現在の実行ポリシーを確認
Get-ExecutionPolicy

# 実行ポリシーを変更(管理者権限が必要)
Set-ExecutionPolicy RemoteSigned

実行ポリシーの種類

ポリシー 内容
Restricted スクリプトの実行を禁止(デフォルト)
RemoteSigned ローカルのスクリプトは実行可。ダウンロードしたものは署名が必要
Unrestricted すべてのスクリプトを実行可
Bypass 警告なしですべて実行可

UnrestrictedBypassはセキュリティリスクがあります。
通常はRemoteSignedを使用してください。

スクリプトファイルの基本構造

<#
.SYNOPSIS
    スクリプトの概要

.DESCRIPTION
    スクリプトの詳細な説明

.PARAMETER Name
    パラメータの説明
#>

param (
    [string]$Name = "World",   # デフォルト値あり
    [int]$Count = 1
)

# 処理
for ($i = 0; $i -lt $Count; $i++) {
    Write-Host "Hello, $Name!"
}

スクリプトのお作法まとめ

項目 推奨 理由
コマンド名 フルコマンドレット名を使う 可読性・移植性のため
変数名 $PascalCaseまたは$camelCase PowerShellの慣例
コメント # で記述 単行コメント
複数行コメント <# 〜 #> で囲む ブロックコメント
エラー処理 try-catchを使う 例外を適切に処理する
出力 Write-HostよりWrite-Outputを推奨 パイプラインに渡せる

13. エラーハンドリング

try {
    # エラーが発生する可能性のある処理
    Get-Content "存在しないファイル.txt" -ErrorAction Stop
}
catch {
    # エラー発生時の処理
    Write-Host "エラーが発生しました: $($_.Exception.Message)"
}
finally {
    # 必ず実行される処理
    Write-Host "処理終了"
}

-ErrorAction Stopについて:
PowerShellのエラーはデフォルトでは処理を継続します。
-ErrorAction Stopを付けることで
エラーをcatchで捕捉できるようになります。


まとめ

カテゴリ 主なコマンド
ファイル操作 Get-ChildItem / New-Item / Remove-Item
ファイル内容 Get-Content / Out-File
変数 $変数名 = 値
パイプライン Where-Object / Select-Object / ForEach-Object
プロセス Get-Process / Start-Process / Stop-Process
サービス Get-Service / Start-Service / Stop-Service
ヘルプ Get-Help コマンド名
エラー処理 try-catch-finally

さいごに

コマンド操作には慣れるまで時間がかかりますが
慣れたら普段づかい以外にも
バッチ処理にも使えて便利です。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?