「両面印刷を既定にしたいのに、レジストリのどこにあるのか分からない」「スクリプトで安全に一括変更したい」。そんな運用担当者の悩みに答えるため、本記事では Windows の印刷設定、とくに「両面印刷(Duplex)」の保存場所と正しい管理手法を、仕組みから実務の手順・自動化・トラブル対応まで徹底的に解説します。レジストリを直接いじる前に、まず読んでください。
印刷設定(両面印刷)の保存場所と基本概念
Windows の印刷設定は、単一の見やすいレジストリ値に入っているわけではありません。実際には「プリンタードライバーが理解するバイナリ構造体(DEVMODE)」として保持されます。両面印刷はこの DEVMODE の一部(dmDuplex フィールド)に格納され、あわせてドライバー固有の拡張領域(dmDriverExtra)に付随情報が収まります。
レジストリ階層の全体像
| 用途 / 対象 | 主なレジストリ パス | 内容 | 備考 |
|---|---|---|---|
| プリンター キュー(システム既定) | HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers\<プリンター名> | キューの属性、ポート、ドライバー、共有名、印刷既定の DEVMODE(ドライバー依存のバイナリ)など | サーバー共有の既定値もここに格納される |
| ユーザー既定(各ユーザーの印刷設定) | HKEY_CURRENT_USER\Printers\DevModePerUser または ...\DevModes2 | ユーザーごとの「印刷設定(Printing Preferences)」の DEVMODE(バイナリ) | 実装はドライバーやバージョンで差異あり |
| 既定プリンター | HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows の Device | 「既定のプリンター」の名前とポート(PrinterName,winspool,NeXX:) | 両面設定そのものは保持しない |
| ドライバー定義の各種プロパティ | HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Environments\Windows x64\Drivers\... | ドライバー カタログ、機能定義など | 実体は INF/PPD/Manifest と連動 |
重要な点は、両面印刷(Duplex)が人間に読みやすい「DWORD=1/0」のような値で保存されていないことです。ドライバーが理解する DEVMODE バッファの中に、dmFields フラグと dmDuplex 値の組として保存され、さらに一部ドライバーでは私有データ(dmDriverExtra)側に補助情報が入ります。
両面印刷が値として見えない理由
- DEVMODE は C 構造体をそのままバイナリ化したもので、値の位置や意味づけはドライバーの実装に依存します。
- アプリは印刷時に DEVMODE をコピーしてジョブ単位の変更を行うため、レジストリ上の既定値を直接書き換えると矛盾が生じやすいです。
- 64bit/32bit・V3/V4 ドライバー・XPS/PrintTicket 経路などで挙動が微妙に異なります。
レジストリで直接編集できるか(結論:非推奨)
技術的にはバイナリエディター等で DEVMODE の dmDuplex を書き換えることは可能です。しかし次の理由からレジストリエディターでの直接操作は非推奨です。
- バイナリレイアウトがドライバー依存であり、将来の更新で壊れる可能性が高い。
- 誤った編集は印刷不具合(用紙サイズ不一致、配列崩れ、スプーラーのクラッシュ)やドライバー破損を招きうる。
- 企業環境ではサーバーや GPO により再配布され、ユーザー側での変更が上書きされるケースがある。
したがって、両面印刷をはじめとする既定の印刷設定は、必ずドライバーが提供する正規の API/ツール経由で更新しましょう。
推奨される設定・管理方法(安全なルート)
| 用途 | 推奨手段 | 手順の要点 | メモ |
|---|---|---|---|
| 個人 PC(単体) | コントロール パネル → デバイスとプリンター → 対象プリンター右クリック → 印刷設定 | 「2 面印刷」「両面」「Two-sided」等を有効化し、適用 | ユーザーの「Printing Preferences」(DEVMODE)を正しく更新 |
| サーバー共有(全社既定) | プリントサーバー上のキュー → プリンターのプロパティ → 詳細設定 → 既定の印刷設定 | 共有キューの「Printing Defaults」を両面にし、クライアントへ配布 | クライアントに配布されるため、個別 PC のレジストリ編集は不要 |
| ドメイン一斉配布 | グループポリシー(GPO)でプリンター接続を配布 | プリンターの配布自体は GPO、「既定」はサーバー側の Printing Defaults で統制 | ドライバー互換性・バージョン管理に注意 |
| スクリプト自動化 | Set-PrintConfiguration(PowerShell) | -DuplexingMode を TwoSidedLongEdge/TwoSidedShortEdge に設定 | Windows 10 1709 以降で利用可 |
コントロール パネル(クライアント)での手順
- 「コントロール パネル」→「デバイスとプリンター」を開きます。
- 対象プリンターを右クリックし「印刷設定」を選択します(英語 UI: Printing Preferences)。
- 「レイアウト」「仕上げ」「基本設定」などのタブから「両面印刷」「2 面印刷」「Two-sided」等のチェックをオンにします。
- 「長辺とじ(Long Edge)」「短辺とじ(Short Edge)」のどちらかを用途に合わせて選び「適用」→「OK」。
この操作はユーザー単位の既定(Printing Preferences)を変更し、レジストリの HKEY_CURRENT_USER 側に DEVMODE が反映されます。
プリントサーバー側の「既定の印刷設定(Printing Defaults)」
- プリントサーバーで対象の共有プリンターを開き、「プリンターのプロパティ」を開きます。
- 「詳細設定」タブの「既定の印刷設定」をクリック。
- 両面印刷を選び、保存します。
ここで設定した既定は、共有を配布されたクライアント側に初期値として反映されます。ユーザーが手元で一時的に片面へ変更しても、キュー再作成やプロファイル更新のタイミングで既定が戻る設計にできます。
グループポリシーでの配布の考え方
- プリンターの「接続(マッピング)」自体は GPO(ユーザー構成 → 設定 → コントロール パネルの設定 → プリンター)や「Deployed Printers」で行います。
- 両面の既定はプリントサーバー側の Printing Defaults を正として管理し、クライアントにはそれを配布します。
- GPP の「レジストリ」項目で DEVMODE を直接書く方法は動きますが壊れやすく、推奨しません。
PowerShell による安全な自動化
Windows 10 1709 以降(Server は 2016/2019/2022)では、PrintManagement モジュールの Set-PrintConfiguration を使用して、ドライバーに正規 API 経由で設定を適用できます。
基本コマンド
# 両面印刷(長辺とじ)をデフォルトに設定
Set-PrintConfiguration -PrinterName "MyPrinter" -DuplexingMode TwoSidedLongEdge
# 短辺とじ
Set-PrintConfiguration -PrinterName "MyPrinter" -DuplexingMode TwoSidedShortEdge
# 片面に戻す
Set-PrintConfiguration -PrinterName "MyPrinter" -DuplexingMode OneSided
現在の設定を確認
Get-PrintConfiguration -PrinterName "MyPrinter" | Select-Object PrinterName, DuplexingMode, Color, Collate, PaperSize
PC 内の全プリンターに一括適用
$printers = Get-Printer | Where-Object { $_.Shared -eq $false } # ローカル接続に限定する例
foreach ($p in $printers) {
try {
Set-PrintConfiguration -PrinterName $p.Name -DuplexingMode TwoSidedLongEdge -ErrorAction Stop
Write-Host "OK : $($p.Name)"
} catch {
Write-Warning "NG : $($p.Name) - $($_.Exception.Message)"
}
}
リモート PC へ適用(管理者権限)
$computers = @("PC001","PC002","PC003")
foreach ($c in $computers) {
try {
Get-Printer -ComputerName $c | ForEach-Object {
Set-PrintConfiguration -ComputerName $c -PrinterName $_.Name -DuplexingMode TwoSidedLongEdge
Write-Host "[$c] OK : $($_.Name)"
}
} catch {
Write-Warning "[$c] NG : $($_.Exception.Message)"
}
}
共有キュー(サーバー)の既定を更新
# プリントサーバー QUEUE の既定(Printing Defaults)を更新
$server = "PRINT-SRV01"
$queue = "Office-Color-A3"
Set-PrintConfiguration -ComputerName $server -PrinterName $queue -DuplexingMode TwoSidedLongEdge
監査・レポート(CSV 出力)
Get-Printer |
ForEach-Object { Get-PrintConfiguration -PrinterName $_.Name } |
Select-Object PrinterName, DuplexingMode, PaperSize, Color |
Export-Csv -NoTypeInformation -Encoding UTF8 "$env:USERPROFILE\Desktop\PrintDefaults.csv"
DEVMODE と Duplex 値の基礎知識
内部的には次のような値が使われます(ドライバーや印刷経路により保持場所は異なります)。
| DEVMODE フィールド | 意味 | 代表値 | 備考 |
|---|---|---|---|
dmFields | 有効なフィールドを示すフラグ | DM_DUPLEX が立っていると dmDuplex が有効 | 他に DM_ORIENTATION など多数 |
dmDuplex | 両面方式 | DMDUP_SIMPLEX(1) / DMDUP_VERTICAL(2)(長辺)/ DMDUP_HORIZONTAL(3)(短辺) | ドライバーはこの値をもとに UI を表示 |
dmDriverExtra | ドライバー固有の拡張領域 | バイト配列 | 機種依存の追加オプションや装置構成が入る |
このように値は人にやさしくない形で保持されるため、Set-PrintConfiguration や UI で更新するのが安全です。
「印刷設定」と「既定の印刷設定」の違い(混同注意)
- 印刷設定(Printing Preferences):クライアント側ユーザーの既定。アプリが印刷ダイアログを開くとまずここを初期値にします。
- 既定の印刷設定(Printing Defaults):プリンター キュー(主にサーバー側)の既定。新規接続クライアントへ「初期値」として配布されます。
両者は別物です。現場で「サーバーで両面にしたのに、ユーザーが片面になる」といった相談は、ユーザー側の「印刷設定」が手動で片面にされ、そのプロファイルが残っているケースが典型です。原則として、サーバー側で Printing Defaults を両面に統一し、クライアントでは強く変更を求めない運用がトラブルを減らします。
レジストリを「見に行く」ことはできるが、書き換えは避ける
調査目的でレジストリを確認することはあります。たとえば、プリンター キューの存在と状態は次のキーで見えます。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers\<プリンター名>\
この配下にドライバー名、ポート、共有名などが並び、ドライバー次第では Default DevMode に相当するバイナリ値も見つかります。ですが、値の編集はドライバーの想定外となり不具合の温床です。閲覧にとどめ、変更は Set-PrintConfiguration か UI で行いましょう。
バックアップとロールバック
印刷キューや既定値を整理するときは、事前バックアップを強く推奨します。Windows には PrintBRM(printbrm.exe) が付属しており、キュー、ポート、ドライバー、既定設定をまとめてエクスポートできます。
# プリントサーバーの構成をバックアップ
printbrm -B -S \\PRINT-SRV01 -F C:\Backup\PrintServer_Backup.printerExport
# 復元(メンテナンス時間内に実施)
printbrm -R -S \PRINT-SRV01 -F C:\Backup\PrintServer_Backup.printerExport
単体 PC の場合も、復元ポイントの作成や該当キーのエクスポート(.reg)を取ってから作業してください。
よくある落とし穴と対処法
両面がグレーアウトして選べない
- 装置構成が未設定:一部機種は「自動両面ユニット(Duplex Unit)」の搭載有無をデバイス設定で明示する必要があります。プリンターのプロパティ → 「デバイス設定」やドライバー固有の「オプション設定」で「インストール済み」にしてください。
- クラスドライバーの制限:Windows 標準(Class/Generic)ドライバーだと機能が足りない場合があります。ベンダー提供のフルドライバーへ切替を検討します。
- アプリが上書き:アプリケーション側テンプレートで片面が固定されていることがあります(PDF ビューア、業務システム等)。アプリ内の印刷設定も合わせて確認しましょう。
サーバーで両面にしたのに、クライアントで片面になる
- クライアント側ユーザープロファイルに旧 DEVMODE が残っている可能性。プリンターを一度削除して再接続させると解消することが多いです。
- GPO で複数の同名キューを配布して競合しているケース。命名規則と配布の重複を整理します。
- プロファイル移行時に HKCU の
DevModePerUser/DevModes2が持ち込まれ、意図せず上書きされることがあります。移行設計に注意。
V3 と V4 ドライバーでの見え方の違い
V4 ドライバーは XPS/PrintTicket ベースのため、アプリや印刷経路により「設定がどの層に保持されるか」の見え方が変わります。とはいえ、Set-PrintConfiguration は抽象化されており、両面の既定を変える用途では同じコマンドで管理可能です。
運用ベストプラクティス
- 原則サーバーで統一:共有プリンターはサーバー側の Printing Defaults を唯一の正とし、クライアントに配布。現場での微調整は最小限に。
- スクリプトは Get- → Set- → Verify:適用前に
Get-PrintConfiguration、適用後に再度取得して記録。CSV で監査証跡を残します。 - ドライバーの標準 UI を使う:機種固有のオプション(製本、ステイプルなど)はドライバー UI で最終確認。汎用コマンドで見えない項目は無理をしない。
- レジストリ直接編集は最後の手段:どうしても必要な場合は該当キーの完全バックアップを取り、検証用環境で先に確認。
- デバイス構成の自動認識を有効化:SNMP/双方向通信を有効にすると、両面ユニット搭載状況の自動検出が働く機種が多いです。
具体例:部署単位で「長辺とじ」を全キューに適用する
次のサンプルは、プリントサーバー上の特定のプレフィックスを持つキューに一括適用し、結果をログへ記録します。
$server = "PRINT-SRV01"
$prefix = "DeptA-"
$targets = Get-Printer -ComputerName $server | Where-Object { $_.Name -like "$prefix*" }
$log = @()
foreach ($q in $targets) {
$before = Get-PrintConfiguration -ComputerName $server -PrinterName $q.Name
try {
Set-PrintConfiguration -ComputerName $server -PrinterName $q.Name -DuplexingMode TwoSidedLongEdge -ErrorAction Stop
$after = Get-PrintConfiguration -ComputerName $server -PrinterName $q.Name
$log += [pscustomobject]@{
Queue = $q.Name
BeforeDuplex = $before.DuplexingMode
AfterDuplex = $after.DuplexingMode
Result = "OK"
}
} catch {
$log += [pscustomobject]@{
Queue = $q.Name
BeforeDuplex = $before.DuplexingMode
AfterDuplex = $null
Result = "NG: $($_.Exception.Message)"
}
}
}
$log | Export-Csv -NoTypeInformation -Encoding UTF8 "C:\Temp\DeptA_Duplex_Apply_Result.csv"
具体例:Intune/リモート管理での適用
Microsoft Intune などのデバイス管理で、サインイン中ユーザーの既定印刷設定を変えたい場合は、サインイン スクリプトとして上記の Set-PrintConfiguration を配布します。ポイントは次の通りです。
- 「ユーザー コンテキスト」で実行し、ユーザーの既定(Printing Preferences)を更新する。
- 共有キューの既定はサーバー側で変更する。クライアントで強制上書きし続けるとユーザー体験が悪化する。
- 毎回の強制適用ではなく、初回のみ適用 → 監査で乖離を検出したときだけ再適用、が望ましい。
専門的トピック:XPS/PrintTicket と DEVMODE の橋渡し
近年のアプリは XPS ベースの印刷経路を採用し、PrintCapabilities(デバイスが提供可能な機能)と PrintTicket(要求する印刷設定)を XML でやり取りします。スプーラーはこれを DEVMODE に変換してドライバーに渡します。つまり「両面印刷」は PrintTicket 上では JobDuplexAllDocumentsContiguously 等の要素で表現され、最終的に DEVMODE の dmDuplex に落ちる、という流れです。管理者はこの実装差を意識する必要はありませんが、V4 ドライバーで UI が刷新されても、Set-PrintConfiguration で統制できる理由はここにあります。
ケーススタディ:現場で起きた「両面にならない」三つの原因
ケース 1:機器入れ替え後に片面固定
原因は「自動両面ユニットの未設定」。交換前はユニット搭載、交換後は出荷時の「未搭載」のまま。サーバー側のデバイス設定を「搭載」に変更し、双方向通信を有効化して解決。
ケース 2:GPO で配ったのにユーザーが片面
ユーザーが一度「印刷設定」を片面にし、それが HKCU の DEVMODE に残って初期値を上書き。対策は「プリンター再接続のスクリプト化」+「サーバー側 Printing Defaults の見直し」。
ケース 3:アプリ固定テンプレートが片面
帳票アプリのテンプレートで片面が埋め込まれており、既定を無視。アプリ側テンプレートを両面に修正し、Set-PrintConfiguration は「既定の初期値」としてのみ使う運用に改めて解消。
運用チェックリスト
- プリントサーバーの全キューで Printing Defaults = 両面 を確認したか。
- 双方向通信と SNMP が適切に構成され、自動両面ユニットが検出されているか。
- クライアント配布方法(GPO/Intune/手動)が二重になっていないか。
- 現場の主要アプリ(PDF、Office、業務システム)のテンプレート既定が両面か。
- 監査ログ(CSV)を定期出力・保管しているか。
安全なロールアウト手順(サンプル計画)
- 棚卸し:
Get-Printer/Get-PrintConfigurationで現状を CSV 化。 - 検証:代表 1 機種 × 3 アプリ(PDF/Office/業務)で印刷結果を確認。
- サーバー既定変更:Printing Defaults を両面へ、業務時間外に適用。
- クライアント初期化:必要に応じて既存キューを再接続(スクリプト化)。
- モニタリング:ログで乖離検出、現場問い合わせの一次対応手順を共有。
FAQ
Q. 両面設定をレジストリで単純な 1/0 にできませんか?
A. できません。DEVMODE は複合構造で、両面だけを独立した整数値として持ちません。正規 API を使いましょう。
Q. 共有プリンターでユーザーごとの既定を強制できますか?
A. 技術的には可能ですが、ユーザー体験を損なう恐れがあります。原則はサーバー既定を「初期値」とし、例外運用は部門ごとにキューを分ける設計が安全です。
Q. スクリプトでデバイス設定(両面ユニット搭載)まで変更できますか?
A. 一部ドライバーはコマンド露出がなく、UI 操作が必要です。可能な範囲は Set-PrintConfiguration がカバーしますが、装置オプションはドライバー固有のため自動検出(双方向通信)を有効にしてください。
まとめ
- 両面印刷はレジストリにDEVMODE(バイナリ)として保存され、人間に読みやすい値では表れません。
- レジストリ直接編集は非推奨。コントロール パネル / プリントサーバーの Printing Defaults / PowerShell(Set-PrintConfiguration)を使いましょう。
- 組織運用では「サーバー既定の統一 → クライアントに配布 → 監査ログ」の流れが最小コストで安全です。
- トラブルの多くは装置構成未設定、ユーザー側旧 DEVMODE の残存、アプリ固定テンプレートに起因します。順に切り分けて解決しましょう。
すぐ使えるスニペット集
# 1) この PC の特定プリンターを長辺とじで両面に
Set-PrintConfiguration -PrinterName "MyPrinter" -DuplexingMode TwoSidedLongEdge
# 2) この PC の全プリンターを短辺とじで両面に
Get-Printer | ForEach-Object {
Set-PrintConfiguration -PrinterName $_.Name -DuplexingMode TwoSidedShortEdge
}
# 3) リモート PC 群に一括適用
"PC001","PC002","PC003" | ForEach-Object {
Get-Printer -ComputerName $_ | ForEach-Object {
Set-PrintConfiguration -ComputerName $_ -PrinterName $PSItem.Name -DuplexingMode TwoSidedLongEdge
}
}
# 4) サーバーの共有キュー既定を両面に
Set-PrintConfiguration -ComputerName "PRINT-SRV01" -PrinterName "Dept-Color-1" -DuplexingMode TwoSidedLongEdge
# 5) 現状の監査(DuplexingMode を CSV 出力)
Get-Printer | ForEach-Object { Get-PrintConfiguration -PrinterName $_.Name } |
Select-Object PrinterName, DuplexingMode | Export-Csv -NoTypeInformation "$env:USERPROFILE\Desktop\Duplex_Audit.csv"
再確認:本記事の要点(質問への直接回答)
- レジストリ階層:基本的なプリンター設定は
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers\<プリンター名>に保存されます。ただし両面印刷(Duplex)は DEVMODE 構造体の一部として格納され、人が読める形の値としては現れません。 - レジストリで直接編集できるか:DEVMODE はドライバー依存のバイナリで、誤編集は不具合や破損に直結します。レジストリエディターでの直接操作は非推奨です。
- 推奨される設定方法: 用途 推奨手段 メモ 個人 PC 「コントロール パネル → デバイスとプリンター → 右クリック → 印刷設定」 ドライバーが DEVMODE を正しく更新 組織全体 グループポリシーまたはプリントサーバーで既定印刷設定を配布 ドライバー互換性に注意 スクリプト自動化
Set-PrintConfigurationでDuplexingModeを変更 Windows 10 1709 以降で利用可 - PowerShell 例:
Set-PrintConfiguration -PrinterName "MyPrinter" -DuplexingMode TwoSidedLongEdge - 補足:ドライバーによっては「印刷設定」と「既定の印刷設定」を別に保持。サーバー共有プリンターではサーバー側の既定値がクライアントに配布されるため、通常クライアント側レジストリの手動編集は不要です。
最終アドバイス:レジストリは「確認」まで、更新は必ず UI か PowerShell(Set-PrintConfiguration)で。これが壊れない両面印刷運用の最短ルートです。

コメント