Windows10になるとPowerShellでSSHができたり色々と便利になっていることに気づきました。
しかしTeraterm等と比べると色々足りないなーと思うこともチラホラあります。
その1つにログの自動取得があるのですが、いくつか対応方法があったのでメモします。
PowerShell Profilesを利用する場合
PowerShellにもbashでいうbash_profileのよう実行時に自動的に読み込まれるProfileがあります。
Windows PowerShell プロファイル | Microsoft Docs
ここでStart-Transcriptを実行することでログを取得してしまおうという方法です。
ただし、これを利用する場合はスクリプト実行ポリシーがRemoteSigned以下である必要があります。
PowerShellを管理者権限で実行し、実行ポリシーをRemoteSignedに設定します。
PS C:\Windows\system32> Get-ExecutionPolicy -List Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Undefined CurrentUser Undefined LocalMachine Undefined PS C:\Windows\system32> Set-ExecutionPolicy -Scope CurrentUser RemoteSigned 実行ポリシーの変更 実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies のヘルプ トピック (https://go.microsoft.com/fwlink/?LinkID=135170) で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか? [Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "N"): Y PS C:\Windows\system32> Get-ExecutionPolicy -List Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Undefined CurrentUser RemoteSigned LocalMachine Undefined
今回はログインユーザの全シェルのログを取得するので、以下のファイルを作成します。
(ログの保存先のディレクトリは予め作成しておいてください。)
%UserProfile%\My Documents\WindowsPowerShell\profile.ps1
# ログディレクトリのパス(C:\Users\ユーザ名\Documents\WindowsPowerShell\logs) $logdir = join-path ([Environment]::GetFolderPath("MyDocuments")) "\WindowsPowerShell\logs" # ログファイル名 $fileName = (Get-Date).ToString("yyyyMMdd_HHmmss") + ".log" # ログファイルのパス $logfile = join-path $logdir $filename # ログディレクトリが存在する場合、ログ取得を開始 if ( Test-Path $logdir ) { Start-Transcript $logfile -append } else { Write-Host ("No such directory : " + $logdir) }
次回以降のPowerShellの実行時に以下のような表示がされ、ログ取得が開始されます。
Windows PowerShell Copyright (C) Microsoft Corporation. All rights reserved. トランスクリプトが開始されました。出力ファイル: C:\Users\admin\Documents\WindowsPowerShell\logs\20190406_151853.log PS C:\Users\admin>
グループポリシーで設定する場合
グループポリシーでログを取得するように設定する方法です。
こちらで設定するほうがいろんなログが取得できるようです。
スタート -> gpedit.msc よりローカルグループポリシーエディタを開きます。
ユーザの構成 -> 管理用テンプレート -> Windowsコンポーネント -> Windows PowerShell よりPowerShell トランスクリプションを有効にするを編集します。
トランスクリプションの設定にて、有効化とログ保存先のディレクトリを指定します。
次回以降のPowerShellの実行時には何も表示されませんが、ログ保存先のディレクトリ配下にログが保存されています。
日ごとログファイルが分けられて保存されるため、こちらのほうが便利ですね。
セキュリティを意識した設定
今回は自分の操作ログを保存したかったので上記の対応となりました。
しかし、セキュリティ対策を考えると他にも設定したほうが良さそうな項目がありそうです。
こちらのサイトに詳しく書かれおり、参考になりました。
それでは良いPowerShellライフを!