PowerShell Firefoxのプロファイルアカウントを調べる方法
これを書いているのは2024年2月なんですけども最近アカウントを管理するサービスの売り込みが激しいです。中小企業の弊社にも電話がよく掛かってきます。商品名を出すと「ジョーシス」「Admina」とかです。これらのサービスでは社員が勝手に使っているブラウザログインアカウントなどの、いわゆるシャドーITも分かるそうなんですが、仕組みを聞いても教えてくれませんでした。
どうやるんだろう、Firefoxのログインアカウントだけでも収集できたらなぁとモヤモヤしてたんですが、やってみたらできました。
Firefoxのアカウントを調べるPowerShell
PowerShellのターミナルを立ち上げて下のコードを実行すると取得できます。
$jsonlist = (Get-ChildItem -Path "$env:appdata\mozilla\firefox\profiles\" -Filte signedInUser.json -Recurse).FullName
foreach($i in $jsonlist){
(ConvertFrom-Json -InputObject (Get-Content $i -Raw)).accountData.email
}
こちらのコードでも調べられます
$jsonlist = (Get-ChildItem -Path "$env:appdata\mozilla\firefox\profiles\" -Filte prefs.js -Recurse).FullName
foreach($i in $jsonlist){
Get-Content $i -Raw | where-object{$_ -like '*services.sync.username*'}
}
あたりまえですけどもアカウント無しでFirefoxを使っていたら何も出てきません。
解説
まずFirefoxのヘルプページからプロファイル情報の場所を探します。
ここに書いてありました↓
https://support.mozilla.org/ja/kb/profiles-where-firefox-stores-user-data
以下、抜粋ーーーー
Firefox は、既定ではコンピューター上にこの場所にプロファイルフォルダーを保存します:
C:\Users\<your Windows login username>\AppData\Roaming\Mozilla\Firefox\Profiles\
1.キーボードの Windows キー + R キーを押します。「ファイル名を指定して実行」ダイアログが開きます。
2.テキストボックスに次の文字列を入力してください:
%APPDATA%\Mozilla\Firefox\Profiles\
3.OK ボタンをクリックします。プロファイルフォルダーが含まれるウィンドウ が開きます。
4.プロファイルフォルダーをダブルクリックして開きます。プロファイルが一つしかない場合、フォルダー名に「default」が含まれているでしょう。
ーーーーここまでが抜粋
ヘルプページに書いてある通りに実行すると、
私のパソコンではフォルダー名に「default」が含まれているフォルダが2つありました。
PS C:\> dir "$env:APPDATA\Mozilla\Firefox\Profiles\"
ディレクトリ: C:\Users\GodaGo\AppData\Roaming\Mozilla\Firefox\Profiles
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2024/02/26 22:34 wti14ybp.default
d----- 2024/02/26 22:38 ypy2rybk.default-release
ここでGrep検索を掛けます。検索キーは自分のFirefoxログインアカウントです。すると2つのファイルがヒットしました。
signedInUser.json
prefs.js
この2個のファイルにFirefoxアカウントが入っているようなのでアカウントを切り取るようにコードを書きます。
プロファイルが複数ある場合を考慮して\mozilla\firefox\profiles\の中を検索してsignedInUser.jsonを探しフルパスを取得します。
$jsonlist = (Get-ChildItem -Path "$env:appdata\mozilla\firefox\profiles\" -Filte signedInUser.json -Recurse).FullName
次にこのフルパスの入った配列$jsonlistをループして中からアカウント情報を取り出して完成。
foreach($i in $jsonlist){
(ConvertFrom-Json -InputObject (Get-Content $i -Raw)).accountData.email
}
signedInUser.jsonはJSONファイルなのでConvertFrom-Jsonを使えば取り出せます。
次にprefs.jsの方も同じようにファイル検索でフルパスのファイルリストを作り、ループしてファイルを開きアカウント名が書いてある部分を取り出します。
$jsonlist = (Get-ChildItem -Path "$env:appdata\mozilla\firefox\profiles\" -Filte prefs.js -Recurse).FullName
foreach($i in $jsonlist){
Get-Content $i -Raw | where-object{$_ -like '*services.sync.username*'}
}
prefs.jsの中でservices.sync.usernameと書いてある行にアカウント名が入っていたのでこのようにしました。
Firefox使ってる人は、だいぶ減ったと思います。
いまフォクすけのブログを見に行ったら2011年で更新が止まっていました。
https://foxkeh.jp/
まだFirefox使っているぞという変わり者の方、
いらっしゃいましたらコメントください
#PowerShell #IT資産管理 #プログラミング #ジョーシス #Admina #アカウント管理 #Firefox #フォクすけ