2017-12-07 6 views
0

実際に削除されているファイルのログファイルを出力するスクリプトを取得する方法を探しています。誰も私がこれをやり遂げる方法を知っていますか?ここに私の画面があります。Powershellで私の削除スクリプトの結果を印刷するにはどうすればいいですか?

Where-Object { -not $_.PSIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-1) } | 
    Remove-Item -Force 
+0

Remove-Itemコマンドレットに-Verboseパラメータを追加するだけで済みます。詳細なステートメントは、ファイルの完全なパスを含むようにファイルに対してファイルの削除操作が実行されていることを示します。 – tommymaynard

+0

このコマンドを実行する前に、削除項目の最後に '-whatif'をすばやく追加することもできます。それは実際にファイルを削除せずに何をするかを表示します。それは私のベーコンを数回以上保存しました。 –

答えて

1

あなただけのログがTranscriptと冗長出力を使用することです必要がある場合は、全体の最も簡単な方法。

スクリプトはこのようになりますので、コマンドに-Verboseが追加されていることに注意してください。

Start-Transcript C:\Logs\Remove.txt 
Some-Command | Where-Object { -not $_.PSIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-1) } | Remove-Item -Force -Verbose 
Stop-Transcript 

その後、C:\Logs\Remove.txtファイルはそれぞれ削除されたファイルのために、このようなメッセージを持っています:

VERBOSE: Performing the operation "Remove File" on target "H:\dns.csv". 
+0

これはまさに私が探していたものでした、ありがとう! – Guyver

0

あなたはループが必要になります。

Get-ChildItem -Path $Targets | 
    Where-Object { -not $_.PSIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-1) } | 
    ForEach-Object { 
     $_ | Remove-Item -Force 
     $_.FullName | Out-File -FilePath $LogFile -Append 
    } 
1

残念ながら、Remove-Itemコマンドレットはありません-Passthruパラメータをサポートしているため、これは簡単になります。

Where-Object { -not $_.PSIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-1) } | 
Tee-Object -FilePath .\Log.txt | 
Remove-Item -Force 

をしかし、それはGet-ChildItemからディレクトリ一覧を出力するので、それは少し醜いです:しかし、あなたはこれを行うことができます。あなただけのパスをキャプチャする代わりにこれを行うことができます:

Where-Object { -not $_.PSIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-1) } | 
Select-Object -ExpandProperty FullName | 
Tee-Object -FilePath .\Log.txt | 
Remove-Item -Force 

をまた、あなたが必要としないので、あなたはPowerShellのV3.0以降を使用している場合は、Get-ChildItemコマンドレットは-File-Directoryパラメータをサポートしていることに注意してください-not $_.PsIsContainerものすべてを行う。

関連する問題