2016-12-07 18 views
1

このスクリプトを実行すると、全体のスクリプト出力を.txtまたは.CSVに保存するパスである変数$ ComputerNameと$ OutputFilePathを入力するように求められます。私は$(*script*)*>&1 > $OutputFilePathに全体のスクリプトをラップしました。指定されたパスに出力が正常に保存されましたが、出力がコンソールに出力されませんでした。スクリプト全体の出力をファイルにリダイレクトして同時にコンソールに表示

出力をファイルに保存して同時にコンソールに出力する方法はありますか?

param(
[Parameter(Mandatory=$true)][string]$ComputerName = $env:COMPUTERNAME, 
[Parameter(Mandatory=$true)][string]$OutputFilePath 
)#end param 

$(
# All Installed Windows features 
Write-Output "====================================================================================================" 

Write-Output "ALL INSTALLED WINDOWS FEATURES:" 
Write-Verbose -Message "Searching installed features..." -Verbose 
$obj=Get-WindowsFeature | Where-Object {$_.Installed} | Select-Object Name, InstallState | Format-Table -AutoSize 
Write-Output $obj 

Write-Output "====================================================================================================" 
)*>&1 > $OutputFilePath 

答えて

1

Start-Transcriptお探しのものがそうです。起動されると、バックグラウンドで実行され、コンソール入力と出力をテキストファイルに書き込みます。この間、コンソールは正常に機能します。

それは次のように使われています:

Start-Transcript -Path "C:\transcripts\transcript.txt" 
#yourcode here 
Stop-Transcript 
+0

これは私にこのエラーを与えます: "Stop-Transcript:このホストは転写をサポートしていません。"私はこれをpowershell version minで実行する必要があります。 V2を最新のものに変更します。 – user1994521

+0

ISEではなくコンソールで実行していますか?転写はPS v5以降のISEでのみ機能します。 –

+0

はいu r右....それは今、thnx – user1994521

-1

あなたはこのように、(この正確な目的のために設計されており、また、V2でサポートされています)ティー・オブジェクトであることを行うことができます。

"testing" *>&1 | Tee-Object -FilePath .\OutputFile.txt 
+0

私はtask.ps1しようとすると動作します。 Tee-Object -FilePath $ OutputFilePathエラー: "task.ps1という用語がコマンドレットの名前として認識されない" – user1994521

+0

@ user1994521 D:\ logmod.ps1 *> 1 | Tee-Object -FilePath test.txt –

0

私はコンソールに出力し、同時に(WriteLog機能を使用して)ログファイルに追加するカスタムの「Write-Terminal」機能を使用する傾向があります。また、メッセージの種類に応じてコンソールの色を変更することもできます。

Function Write-Terminal 
{ 
<# 
.SYNOPSIS 
      Write output to the screen 
.DESCRIPTION 
      <Description of function> 
.PARAMETER 
      <Input params and descriptions> 
.RETURNS 
      <What the function returns> 
.EXAMPLE 
      <Function example> 
#> 
    Param 
    (
     [string]$strOut, 
     [string]$strType 
    ) 

    switch -wildcard ($strOut) 
    { 
     "ERR:*"  { write-host $strOut -ForegroundColor RED -BackgroundColor BLACK } 
     "WARN:*" { write-host $strOut -ForegroundColor CYAN -BackgroundColor BLACK } 
     "WARNING:*" { write-host $strOut -ForegroundColor CYAN -BackgroundColor BLACK } 
     "INFO:*" { write-host $strOut -ForegroundColor YELLOW -BackgroundColor BLACK } 
     "DEBUG:*" { write-host $strOut -ForegroundColor DARKGREEN -BackgroundColor BLACK } 
     "OTH:*"  { write-host $strOut -ForegroundColor MAGENTA -BackgroundColor BLACK } 
     default  { write-host $strOut }  
    } 
    WriteLog $strOut 
} #END Write-Terminal 

Function WriteLog 
{ 
<# 
.SYNOPSIS 
      Write output to a log file 
.DESCRIPTION 
      <Description of function> 
.PARAMETER 
      <Input params and descriptions> 
.RETURNS 
      <What the function returns> 
.EXAMPLE 
      <Function example> 
#> 
    Param 
    (
     [string]$strOut, 
     [bool]$blnNoDate 
    )  
    $strDateTime = get-date -uFormat "%d-%m-%Y %H:%M:%S" 
    If (-not ($blnNoDate)) 
    { 
     $strOutPut = ($strDateTime+ ": " + $strOut) 
    } 
    else 
    { 
     $strOutPut = $strOut 
    } 
    "$strOutPut" | out-file -filepath "path/to/logfile" -append 
} #END WriteLog 

だから私の私は、コンソールに書きたかったスクリプト毎回、ログファイルに私のようなものを使用します:

Write-Terminal "Some message" 

または私は、エラーメッセージがでコンソールに表示させたい場合に私が使用するREDテキスト:

Write-Terminal "ERR: Some message" 

は、私は(ウェブ上のさまざまなソースからコンパイル)、これらの日、すべての私のPSスクリプトに使用する汎用スクリプト「テンプレート」でこれの拡大例については以下を参照してください:

https://github.com/Asnivor/PowerShellScriptTemplate

また、あなたが自動的に既存のフレームワークを使用して、同時にエラーを記録することができます。

hth。

関連する問題