コンテンツにスキップ

PowerShellノート

cmdのコマンド含む。
スクリプトの場合、文字コードは「UTF-8 with BOM」にしないと日本語が文字化けする。

共通系

実行ポリシー

PowerShellスクリプトを実行する際、標準では実行できない。
ポリシーを変更する必要がある。

ポリシー名 署名あり ローカル 非ローカル
Restricted x x x
AllSigned o x x
RemoteSigned o o x
Unrestricted o o #
Bypass o o o
Get-ExecutionPolicy                                     # 現在のポリシーを確認
Set-ExecutionPolicy RemoteSigned                        # ポリシーを RemoteSigned に

PowerShell -ExecutionPolicy RemoteSigned .\sample.ps1   # 実行ポリシーをその場だけ変更

繰り返し/分岐

# Where-Object (?) オブジェクト抽出
Get-Alias | ?{$_ -like "echo"}

# ForEach-Object (%) itemsをすべて処理
@(1,2,3,4,5) | %{Write-Host $_}

# Get-Service (gsv) サービス一覧を表示
gsv | ?{$_.name -like "Win*"}

| Format-List   # リスト化
| Get-Member    # メンバー(MethodやProperty)を表示
| Select-Object -Property * # プロパティ一覧表示

エイリアス

# Get-Alias (gal) エイリアスの一覧を取得
gal -Definition Write-Output    # Write-Output のエイリアスを表示
gal -Name echo                  # echo がなんのエイリアスか表示

# 設定ファイルの場所を確認
echo $profile

# 設定ファイルがなければ作成
New-item type file force $profile

# 設定ファイルに書き込む
set-alias <設定する略称> <正式なコマンド>
    # echo "set-alias~" >> $profile でもよい?

ファイル/ディレクトリ操作

robocopy

# ヘルプの表示
robocopy /?

$src_dir = "C:\work\SourceDir"
$src_dir = "C:\work\DestDir"

# テスト実行
robocopy $src_dir $src_dir /S /E /MIR /TEE /NP /L 
# 実行
robocopy $src_dir $src_dir /S /E /MIR /TEE /NP

robocopy "\\server\share¥SourceDir" "\\server\share¥TargetDir" /S /E /MIR /LOG:"<LogFile>" /TEE /NP
オプション 説明
/S サブディレクトリをコピー(空のディレクトリはコピーしない)
/E 空のディレクトリを含むサブディレクトリをコピー
/PURGE コピー元に存在しないコピー先のファイル・フォルダを削除。
/MIR ディレクトリをミラー化。/E /PURGE (*1)
/L テスト実行。処理内容の表示のみを行い変更を加えない。
/NP コピーの完了率を表示しない
/LOG:ファイル ログファイルに出力(上書き)
/TEE ログファイル出力時、コンソールウィンドウにも出力
/V スキップされたファイルも結果に表示

*1 /E /PURGE とほぼ同等だが、コピー先にフォルダが存在する場合、/MIRはセキュリティ設定をコピーする。

フォルダ 作成

# ディレクトリ作成 以下の例だと、C:\work がなくとも自動生成される
New-Item -Type Directory 'C:\work\dir01'

# 確認
Get-Item 'C:\work\dir01'

ディレクトリを圧縮

Get-ChildItem -Directory | ForEach-Object { Compress-Archive -Path $_.FullName -DestinationPath "$($_.Name).zip" }

疑似 tail -f

Get-Content .\test.log -Wait -Tail 10

ハッシュ値計算

Get-FileHash -Algorithm md5 <FilePath>      # md5
Get-FileHash -Algorithm sha256 <FilePath>   # sha256

端末のパスを短く

PowerShellのプロンプト文字列をカスタマイズする - @IT

cipher - HDD削除

HDD捨てる前とかに

事前にNTFSにフォーマット → コマンド実行

cipher /w:d:            #dドライブを削除するよ 

できるだけ多くのデータを削除するためにCIPHER /W の実行中
はほかのアプリケーションをすべて終了してください
0x00 に書き込み中
......................  # ←進行状況
0xFF に書き込み中
......................
乱数 に書き込み中
......................
C:\>

日付取得

$date = Get-Date -Format "yyyy/MM/dd HH:mm:ss.fff"
echo $date

カレントフォルダ内のフォルダ毎に圧縮

# カレントディレクトリ内のすべてのフォルダを取得
$folders = Get-ChildItem -Directory

# 各フォルダをzipファイルに圧縮
foreach ($folder in $folders) {
    $zipPath = "$($folder.FullName).zip"
    Compress-Archive -Path $folder.FullName -DestinationPath $zipPath
}