0

フォルダーとサブフォルダー内のファイルをエコーし​​、ファイル名を示す出力を生成する方法を理解したいと思っています。

このスクリプトを 2 つの異なるレベルで書きたかった

レベル 1: PowerShell スクリプトは、ファイル名をエコーし​​、削除されたことが特定されたファイルの出力を提供します。これには、フォルダーとサブフォルダーを含むファイルが含まれている必要があります。

Level2: 削除機能を追加して level1 スクリプトを結合します。これにより、フォルダーとサブフォルダー内のファイルが削除されます。

削除する移動スクリプトと直接スクリプトがありますが、正しいファイルが選択されていることを確認し、削除されるファイル名を知りたいです。

どんな助けでも大歓迎です。

編集コメントから追加

私は非常に単純な方法でこのようなことを試みてきました

Get-ChildItem -Path c:\test | where {$_.lastWriteTime -lt (Get-Date).addDays(-60)} 

別のフォルダーの場所にファイル名の出力を生成するパラメーターを追加したいと思います。

4

2 に答える 2

1

これはあなたが必要としているものだと思います.-whatifパラメーターを使用してスクリプトをドライランできるcmdletbindingなど、あなたが気付いていないかもしれないいくつかの概念を紹介しました. -verbose を指定して、途中で何が起こっているかを確認することもできます。この時点で、Add-Contentコマンドレットを使用してログに追加することもできます。

したがって、次のように実行できます。

.\DeleteOldFiles.ps1 -Path c:\test -Age 50 -WhatIf -Verbose

次に、ファイルを削除する準備ができたら、 -WhatIf パラメーターなしで実行できます。

.\DeleteOldFiles.ps1 -Path c:\test -Age 50 -Verbose

これはすべての質問に答えるわけではありませんが、始めるのに役立つはずです。コードにはたくさんのコメントを入れているので、すべてを理解できるはずです。

# Add CmdletBinding to support -Verbose and -WhatIf 
[CmdletBinding(SupportsShouldProcess=$True)]
param
(
    # Mandatory parameter including a test that the folder exists       
    [Parameter(Mandatory=$true)]
    [ValidateScript({Test-Path $_ -PathType 'Container'})] 
    [string] 
    $Path,

    # Optional parameter with a default of 60
    [int] 
    $Age = 60   
)

# Identify the items, and loop around each one
Get-ChildItem -Path $Path | where {$_.lastWriteTime -lt (Get-Date).addDays(-$Age)} | ForEach-Object {

    # display what is happening 
    Write-Verbose "Deleting $_ [$($_.lastWriteTime)]"

    # delete the item (whatif will do a dry run)
    $_ | Remove-Item
}
于 2013-02-19T18:32:27.487 に答える
0

質問は少し漠然としていますが、これはあなたが望むもののようなものだと思います。
David Martin の回答は気に入っていますが、スキル レベルとニーズによっては、少し複雑すぎるかもしれません。

param(
    [string]$Path,
    [switch]$LogDeletions
)

foreach($Item in $(Get-ChildItem -Path $Path | where {$_.lastWriteTime -lt (Get-Date).addDays(-60)}))
{
    if($LogDeletions)
    {
        $Item | Out-File "C:\Deleted.Log" -Append
    }
    rm $Item
}
于 2013-02-19T19:48:05.930 に答える