3

シナリオ:

私はPowershellに少し慣れていないので、ここで少し助けてほしいと思っていました. このスクリプトを実行した後、Powershell でセッション メモリ リークが発生したようです。58 番目のログの場所 (このスクリプトをバッチ ファイルで実行した場合は 56) を削除しようとすると停止し、合計で 93 の場所が削除されるはずです。いくつかの調査を行った後、これは Microsoft の既知のバグであり、現在のセッションで実行された後に powershell がコマンドを完全に閉じないことがわかりました。

目標:

目標は、コマンドの実行中にユーザーが入力した日付 (日数を使用) よりも古い日付のフォルダーとファイルを削除する自動化スクリプトを作成することです。

test1.ps1 の内容:

# Gets number of days input by user as a variable
param($NumberOfDays)

If ($NumberOfDays -eq $null) {
    Write-Output "Please enter number of days you want to keep logs for"
    Write-Output "Example: test1.ps1 30"
    Exit
}
elseif ($NumberOfDays -ge 0) {
    Write-Output "You have entered $NumberOfDays days to keep logs" 
}

#*Note* I use the -whatif switch to see if it will delete the folders and files without actually deleting them.
dir \\server\dir1\dir2\logs -recurse | where { ((get-date)-$_.creationTime).days -ge $NumberOfDays} | remove-item -force -recurse -whatif


Write-Output "Exiting Script"

コマンド「test1.ps1 18」を実行した後の出力:

What if: Performing operation "Remove Directory" on Target "\\server\dir1\dir2\logs\192716".
What if: Performing operation "Remove Directory" on Target "\\server\dir1\dir2\logs\192981".
What if: Performing operation "Remove Directory" on Target "\\server\dir1\dir2\logs\193046".
What if: Performing operation "Remove Directory" on Target "\\server\dir1\dir2\logs\193063".
What if: Performing operation "Remove Directory" on Target "\\server\dir1\dir2\logs\193065".
What if: Performing operation "Remove Directory" on Target "\\server\dir1\dir2\logs\191335".
Freezes once it gets to the 58th folder (should be a total of 93 folders)

質問:

この dir コマンドを次のように取得する方法を知りたいです。

  1. 最大 20 個の削除コマンドを実行する
  2. チェックを実行して、削除するフォルダー/ファイルが他にあるかどうかを確認します
  3. 削除するフォルダー/ファイルがさらにある場合は、powershell セッションを閉じて新しいセッションを開き、チェックを付けて dir/del コマンドを再実行します。
  4. elsif 削除するフォルダー/ファイルがなくなったら、スクリプトを終了します。

PS ステップ 1 ~ 4 よりも優れたアルゴリズムがある場合は、お気軽に役立つ情報を追加してください。

4

1 に答える 1

0

コマンドpowershell invoke-command( http://technet.microsoft.com/en-us/library/hh849719.aspx)として実行するのはどうですか

バックグラウンドで実行される -AsJob に関する部分を確認してください

于 2013-10-07T09:25:13.063 に答える