Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

PowerShellスクリプトでログファイルに出力を書き込む

単純なテキストログファイルを使用して、PowerShellスクリプトのすべてのアクティビティの実行と追跡を制御できます。これは、エラーをデバッグしたり、スクリプトアクションを監査したりするときに役立ちます。この記事では、テキストログファイルに出力を書き込むことにより、PowerShellスクリプトのログインを使用するいくつかの方法を示します。

最も単純なケースでは、情報メッセージまたはPowerShellコマンドの結果の出力をテキストログファイルに書き込みたい場合は、次のいずれかの形式を使用して、PS出力をテキストファイルにリダイレクトできます。

Write-Output "Files are successfully created in $env:computername" >> C:\PS\Logs\TestLog.txt
Add-Content -Path C:\PS\Logs\TestLog.txt -Value "Files are successfully created in $env:computername"
"Files are successfully created in $env:computername" | Out-File -FilePath C:\PS\Logs\TestLog.txt –Append

いずれの場合も、コマンドは指定したテキストを含む新しい行をtxtファイルに追加します。

ログファイルの内容を毎回上書きする場合は、Set-Contentを使用してください。 コマンドレット。

PowerShellスクリプトでログファイルに出力を書き込む

この方法の主な欠点は、エントリがいつログに書き込まれたか(イベントが発生したか)を把握できないことです。現在のタイムスタンプをログファイルに追加できます。スクリプトが実行され、特定のイベントが発生した時刻を特定するのに役立ちます。

より便利にするために、PowerShellスクリプトに個別の関数を作成して、受信したデータをログファイルに書き込み、各イベントのタイムスタンプを追加することができます。

以下に示すような関数を作成できます:

$Logfile = "C:\PS\Logs\proc_$env:computername.log"
function WriteLog
{
Param ([string]$LogString)
$Stamp = (Get-Date).toString("yyyy/MM/dd HH:mm:ss")
$LogMessage = "$Stamp $LogString"
Add-content $LogFile -value $LogMessage
}

次に、 WriteLogを呼び出します 何かをログに記録したい場合に機能します。

WriteLog "The script is run"
WriteLog "Calculating…."
Start-Sleep 20
WriteLog "The script is successfully executed"

これで、ログファイルの各エントリの時刻を確認できます。

PowerShellスクリプトでログファイルに出力を書き込む

Write-Hostを置き換えることができます LogWriteを使用した呼び出し スクリプト内のもの。

PowerShellには、PSコンソールに表示されるすべてのコマンドと出力をテキストログファイルに保存するためのトランスクリプト機能が組み込まれています。

現在のPowerShellセッションをログに記録するには、 Start-Transcript コマンドレットが使用されます。

コマンドを実行すると、すべてのコマンドの出力が記録されているファイルを示すメッセージが表示されます。デフォルトでは、ログファイルは現在のユーザープロファイルにあります:

Transcript started, output file is C:\Users\user\Documents\PowerShell_transcript.DESKTOP-P2FHTKQ.+IzDgZiN.20210908163729.txt
テキストファイルへのパスは次のように指定できます。

Start-Transcript -Append C:\PS\Logs\PSScriptLog.txt

–追加 オプションは、新しいセッションがファイルの最後に(上書きせずに)ログに記録されることを示します。

結果をコンソールに出力するいくつかのPowerShellコマンドを実行します。たとえば、実行中のプロセス、サービス、およびADレプリケーションステータスのリストを表示してみましょう。

Get-Process| where-object {$_.WorkingSet -GT 500000*1024}|select processname,@{l="Used RAM(MB)"; e={$_.workingset / 1mb}} |sort "Used RAM(MB)" –Descending
Get-Service | Where-Object {$_.status -eq 'Running'}
Get-ADReplicationFailure -Target mun-dc01

現在のPowerShellセッションのログ記録を停止します:

Stop-Transcript

次に、トランスクリプトログファイルを開きます。

PowerShellスクリプトでログファイルに出力を書き込む

ご覧のとおり、ログには、コンソールで実行されたPowerShellコマンドの全履歴とすべての出力が表示されます。

すべてのエラーと警告もログに記録され、複雑なPowerShellスクリプトをデバッグするときに非常に便利です。

Start-Transcriptを使用できます およびStop-Transcript PowerShellスクリプトのコマンドレットを使用して、すべてのアクションと出力をネイティブにログに記録します。

グループポリシーオプションの使用PowerShell文字変換をオンにする ([コンピューターの構成] –>[管理用テンプレート]–>[Windowsコンポーネント]–> [Windows PowerShell])、実行中のすべてのPowerShellコマンドとコンピューターでの出力の自動ログを有​​効にできます。コンピューターでGPO設定を更新した後、実行中のpowershell.exeプロセスごとに個別のテキストログファイルが作成され、すべてのPSコマンドとその出力がログに記録されます。
PowerShellスクリプトでログファイルに出力を書き込む


  1. PowerShell でフォルダーとサブフォルダーを削除する方法

    Windows 10 でファイルを削除するのは、パイを食べるのと同じくらい簡単です。ただし、ファイル エクスプローラーで実行される削除プロセスの所要時間は、アイテムによって異なります。サイズ、削除する個々のファイルの数、ファイルの種類など、さまざまな要因が影響します。したがって、数千の個々のファイルを含む大きなフォルダを削除するには、数時間かかる場合があります .場合によっては、削除中に表示される推定時間が 1 日を超えることもあります。さらに、ごみ箱を空にする必要があるため、従来の削除方法も少し非効率的です。 これらのファイルを PC から完全に削除します。そのため、この記事では、Windo

  2. PowerShell を使用してファイルとフォルダーを削除する方法

    すべてのファイルとフォルダーを手動で削除するのは面倒です。ただし、PowerShell の使い方を知っていれば、その必要はありません。この記事では、PowerShell を使用して Windows のファイルとフォルダーを削除するさまざまな方法を紹介します。 PowerShell を使用してファイルとフォルダーを削除する PowerShell は、Windows が提供する無料のコマンド自動化ツールです。簡単に言えば、コマンド プロンプト ウィンドウ内で起動するシェルの助けを借りて、オペレーティング システムをより詳細に制御するのに役立ちます。 コマンドレットとも呼ばれるコマンドレットを利