CIOが増殖中

イメージ
急速充電器が増えてきて面倒…  スマートフォン、ノートPCなど増えてきて、標準の充電器ってかさばるし、持ち運ぶのも邪魔。 そこで、電源タップ付きのものや、小形でMacbookProに充電できるものを探して購入。 気づいたら、CIO製品が増加していた。 持ち運び用 (1)  https://amzn.to/4d83MBV (2)  https://amzn.to/3P3B9xZ 自宅用 (3)  https://amzn.to/42WLezS どれも、それ程かさばらず、重宝しています。 電源タップが必要な場合は、(2)を持っていくけれど、ほとんどの場合は(1)のみでOK。 1ポートなら67W出力可能なので、全く問題なし。 2ポート以上使用しても、45W出力してくれるので、困ることはない。 (2) の場合は、延長ケーブルも持って歩くことが多いかなぁ。 1m程のケーブルが有ると、電源が取りにくい場所でも、なんとかなる。 という感じです。 ゼロハリのアタッシュケース自体が重いので、なるべく軽くするために(1)が常用です。 UGREENとかAnkerとかも良さそうなだけど、今の所CIOばかり増殖していますねぇ。

ログの整理 #2

直しを入れてみた

前回のスクリプトでは、切り出したログを処理すると、対応するログオンIDが見つからないことがあり、ホスト名やIPが空欄になる現象が発生していた。
そこで、後から確認するためにログオンIDをフィールドに付加する仕様に変更した。

こうすることで、手動で該当するログとの突き合わせが可能になる。切り出したcsvだけだと情報が欠落してしまい、再度全部チェックしないといけなくなるを避けるためだ。

さらに仕様変更

ログファイルは、キーボードから入力(といっても、Drag&Dropで入力できるので面倒ではないのだけれど)して、画面に出力していたものを、直接csvファイルに落とすことにした。

ファイル名も面倒なので、入力したログファイルの拡張子をcsvに変更するだけにした。
まあ、少しは手間が省けることでしょう。

ということで、以下がそのスクリプトの全体。
今のところ、最低限のチェックしか入れていないので、暇があれば修正をしようと思う。

誰かのお役に立てれば幸いですが…。


#requires -version 2.0
# 2012/10/04 add field logon-id
#     direct write csv-file 
function GetValue([String]$category, [String]$key, [String[]]$properties)
{
  $b = $false;
  foreach ($property in $properties) {
    if ($b -eq $false) {
      if ($property.contains($category)) {
        $b = $true;
        continue;
      }
    } else {
      if ($property.contains($key)) {
        return [String]$property.Substring($property.IndexOf(":")+1).Trim();
      }
    }
  }
  return "";
}
function ConvertACL([string]$accessList)
{
  return $accessList.trim();
}
function GetLogonInfo([String]$logonid, [Object[]]$entrys)
{
  foreach ($entry in $entrys) {
    $properties = $entry.Message.Split("`n");
    #ID4663のログオンIDとID4624のログオンIDが一致するかどうか
    if ($logonid -eq (GetValue "新しいログオン:" "ログオン ID:" $properties)) {
      return (GetValue "ネットワーク情報:" "ワークステーション名:" $properties), `
          (GetValue "ネットワーク情報:" "ソース ネットワーク アドレス:" $properties);
    }
  }
  return "","";
}
#初期エントリポイント
$archive = Read-Host "Archive log file name";
if(Test-path $archive){
  $filename = $(Get-childitem $archive).name
  $name = $filename.split(".");
  if($name[1] -ne "evtx"){
    write-output "イベントログではありません。";
    exit 1;
  }
  $csvfile=$name[0]+".csv";
}else{
  write-output "ファイルが存在しません";
  exit 1;
}
$logons =  Get-winevent -Path $archive | Where-Object { $_.ID -eq '4624' };
$acslogs = Get-winevent -Path $archive | Where-Object { $_.ID -eq '4663' };
$i = 0;
Add-content -Path $csvfile -Value "日時,ユーザ名,ログオンID,ドメイン名,コンピュータ名,IPアドレス,ファイル名,操作,アプリケーション";
foreach ($entry in $acslogs) {
  $i = $i + 1;
  Write-Progress -Activity "Outputting Event" `
    -Status "Progress:" -PercentComplete ($i/$acslogs.count*100);
  $properties = $entry.Message.Split("`n");
  $csv = [String]$entry.TimeCreated.ToString("yyyy/MM/dd HH:mm:ss");
  $csv = $csv+","+(GetValue "サブジェクト:" "アカウント名:" $properties);
  $csv = $csv+","+(GetValue "サブジェクト:" "アカウント ドメイン:" $properties);
  $logonid = (GetValue "サブジェクト:" "ログオン ID:" $properties);
  $logoninfo = (GetLogonInfo $logonid $logons);
  $csv = $csv+","+$logonid
  $csv = $csv+","+($logoninfo[0]); #ワークステーション名
  $csv = $csv+","+($logoninfo[1]); #ソースネットワークアドレス
  $csv = $csv+","+(GetValue "オブジェクト:" "オブジェクト名:" $properties);
  $csv = $csv+","+(ConvertACL((GetValue "アクセス要求情報:" "アクセス:" $properties)));
  $csv = $csv+","+(GetValue "プロセス情報:" "プロセス名:" $properties);
  Add-content -Path $csvfile -Value $csv;
}
exit 0;

コメント

このブログの人気の投稿

MEGAにも弱点があった?

Ubuntu24.04 でGUIが死んだ

VirtualBoxでUSBを使う方法が分かった!