プログラミング学習サイト

プログラミングの学習を開始される方を対象としたプログラミング入門サイトです。

Powershellでレジストリ操作

Powershell概要

minegishirei.hatenablog.com

レジストリとは何か

wikipediaからの引用


OSに関する基本情報やアプリケーションの設定、拡張情報などのほか、拡張子の関連付け、ユーザパスワードなども保存されている。

要約するとこうだ

レジストリを制するものはwindowsアプリケーションを制する

例えば

・ユーザーパスワードを覗けてしまったり

・嫌いな上司の重要な書類をメモ帳と関連付けて困らせたり

・アプリの画面サイズのコントロールなど

やりたい放題である。

レジストリをハックすればなんでもできるのか?


何らかの原因によりレジストリに不正な設定が書き込まれたり、レジストリデータベースが破壊された際、
システムが自動的にバックアップしたデータベースから復旧できる場合がある。

やりたい放題だが復旧される時もある

とはいえ


システム設定情報を直接修正するため、レジストリエディタによる編集はオペレーティングシステムの動作に異常をきたす、
システムが起動しなくなるなど高いリスクを伴う。

なので操作できることはwindows生殺与奪の権を握ることを意味する

どうやっていじるのか


Windowsには、レジストリを編集するアプリケーション、レジストリエディタが付属する。

つまり、それ専用のツールもある。

レジストリキーを表示する

Get-ItemPropertyでレジストリキーを取得できる。


Set-Location HKCU:
Set-Location \Software\Microsoft\Windows\CurrentVersion\Run
Get-ItemProperty .

実行結果


PSPath: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_U
        SER\Software\Microsoft\Windows\CurrentVersion\Run
PSParentPath: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_U
          SER\Software\Microsoft\Windows\CurrentVersion
PSChildName: Run
PSDrive: HKCU
PSProvider: Microsoft.PowerShell.Core\Registry
FolderShare: "C:\Program Files\FolderShare\FolderShare.exe" /background
TaskSwitchXP: d:\lee\tools\TaskSwitchXP.exe
ctfmon.exe: C:\WINDOWS\system32\ctfmon.exe
Ditto: C:\Program Files\Ditto\Ditto.exe
QuickTime Task: "C:\Program Files\QuickTime Alternative\qttask.exe
                        " -atboottime
H/PC Connection Agent : "C:\Program Files\Microsoft ActiveSync\wcescomm.exe"

レジストリキーはファルダーやファイルと同じ扱いであると考えてよい

また、プロパティの値にアクセスするためには「.」繋ぎでキーを入力して値にアクセスできる。


PS >$runKey = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run"
PS >(Get-ItemProperty $runKey).TaskSwitchXp
d:\lee\tools\TaskSwitchXP.exe

レジストリの値を設定する。


#変更前のファイルパスの値
PS >(Get-ItemProperty .).MyProgram
c:\temp\MyProgram.exe

#レジストリの変更
PS >Set-ItemProperty . MyProgram d:\Lee\tools\MyProgram.exe

#変更したレジストリを再度確認する。
PS >(Get-ItemProperty .).MyProgram
d:\Lee\tools\MyProgram.exe

新しいレジストリキーを登録する。

New-ItemPropertyを使う


New-ItemProperty . -Name MyProgram -Value c:\temp\MyProgram.exe

ここでは「MyProgram」というキーを作成し、「c:\temp\MyProgram.exe」という値を格納している

レジストリ応用1 サイトをInternet explorerセキュリティゾーンに追加する

サンプルコード


Set-Location "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
Set-Location ZoneMap\Domains
New-Item example.com
Set-Location example.com
New-Item www
Set-Location www
New-ItemProperty . -Name http -Value 2 -Type DWORD

インターネットエクスプローラーのSettingに移動した後、ZoneMap\Domainsに移動

インターネットエクスプローラーのセキュリティはサイトごとにファイルが形成されている仕組みのため、追加したいサイトのドメイン名でファイルを作る。

レジストリ応用2 Internet explorerのプロキシを変更する。


Set-Location "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings" 
Set-ItemProperty . -Name ProxyServer -Value http://proxy.example.com 
Set-ItemProperty . -Name ProxyEnable -Value 1

ここではプロキシサーバーをhttp://proxy.example.com に設定しています。

また、セキュリティのレベルを1(イントラネット、Local intarnet)に設定

ちなみに番号の識別子は以下の通り


0. My Computer 
1. Local intranet 
2. Trusted sites 
3. Internet
4. Restricted sites

title:レジストリキー操作【powershell】 description:Get-ItemPropertyでレジストリキーを取得できる。レジストリの値を設定する。新しいレジストリキーを登録する。 category_script:page_name.startswith("17") img:https://johobase.com/jb/wp-content/uploads/2021/03/taskbar-powershell-icon-contextmenu.png

page:https://minegishirei.hatenablog.com/entry/2024/05/22/120354