2009-03-20 11 views
0

デプロイスクリプト(.bat)があり、その一部には他のプログラムの呼び出しとコマンドラインでのパスワードの送信が必要です。私は、展開スクリプトの出力をファイルに記録します。問題は、パスワードも同様に記録されることです。このログファイルを消毒する方法が必要です。Windowsのログファイルからパスワードを削除するにはどうすればよいですか?

これを行う1つの方法は、パスワードを含む行をエコーし​​ないことですが、パスワードを別の文字列に置き換えることをお勧めします。

これはサーバー(Windows 2008)上で行われるため、cygwinなどをインストールするだけでは問題ありません。私はWindowsの 'find'コマンドが助けになると思ったが、できることは、 '/ v'オプションで行全体を省略することだ。

UPD:いくつかの研究はありましたが、私はPowerShellが道のりだと思います。パスワードは環境変数の中にあるので、読み込みと置き換えの方法を理解する必要があります。

+0

「他のプログラム」がコマンドラインパラメータではなく環境変数(またはパスワードファイル)を使用してパスワードを受け入れることができるかどうかをまだ確認していない場合は、お問い合わせください。 – vladr

+0

@Vlad面白いアイデア。すべてのプログラムができる場合にのみ動作します。面白いアプローチ。 –

答えて

0

私はPowerShellのオプションを閲覧し、エンコーディング、引用符や他のいくつかの問題を超えて取得した後、ここに私の最終的な解決策である:

powershell "& {(Get-Content $env:LOG_FILENAME)|Foreach-Object {$_ -replace [regex]::escape($env:PASSWORD), '######'} | Set-Content ($env:LOG_FILENAME+\".clean.\"+(get-date).toString('yyyyMMddhhmmss')+\".log\")}" 

この行は、最後のステップとして、バッチファイルから呼び出されますデプロイスクリプト。 スクリプトの最初に、LOG_FILENAMEおよびPASSWORDの値が設定されます。

それを破壊:ログ・ファイル内の

powershell "& {...}" 

読書:バッチファイルからPowerShellを実行

(Get-Content $env:LOG_FILENAME) 

各行については、[正規表現]を交換してください:: '######'のエスケープ($ env:PASSWORD):

Foreach-Object {$_ -replace [regex]::escape($env:PASSWORD), '######'} 

は、正規表現に予約文字として解釈することができるPASSWORD環境変数に任意の文字をエスケープ:。

[regex]::escape($env:PASSWORD) 

保存.cleanと新しいログファイルへの出力を[タイムスタンプ]は元の名前に追加さ.LOG:

Set-Content ($env:LOG_FILENAME+\".clean.\"+(get-date).toString('yyyyMMddhhmmss')+\".log\") 
0

JavaScriptを使用できる場合は、次のようなものは、それを行う必要があります。

その標準入力を読み込みます
var rePassword = /password=\S+/g; 
while (!WScript.StdIn.AtEndOfStream) 
{ 
    WScript.StdOut.WriteLine(WScript.StdIn.ReadLine().replace(rePassword, 'password=sanitized')); 
} 

、非空白の任意の数字が続く文字列「パスワード=」のいずれかの発生を置き換えます"password = sanitized"という文字列を含む文字を標準出力に書き出します rePassword正規表現と置換文字列を調整して要件に合わせることができます そのスクリプトを「sanitize.js」として保存したとしますバッチスクリプトから次のように入力します。

cscript sanitize.js <logfile.log> logfile.sanitized 
+0

。私はPowerShellで試してみるつもりだ –

関連する問題