【发布时间】:2013-10-07 17:25:13
【问题描述】:
场景:
我对 Powershell 有点陌生,我希望在这里能得到一点帮助。运行此脚本后,Powershell 似乎有会话内存泄漏。它在尝试删除第 58 个日志位置后停止(如果我使用批处理文件运行此脚本,则为 56 个),总共应该有 93 个要删除。经过一番研究,我发现这是微软的一个已知错误,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 命令:
- 最多执行 20 个删除命令
- 检查是否有更多文件夹/文件要删除
- 如果有更多文件夹/文件要删除,请关闭 powershell 会话并打开一个新会话,然后重新运行 dir/del 命令并进行检查。
- 如果没有要删除的文件夹/文件,退出脚本。
附:如果有比步骤 1-4 更好的算法,请随时添加有用的输入。
【问题讨论】:
-
为什么在20次删除后打开一个新的shell并继续删除,为什么不在当前shell继续?
-
因为 powershell 有内存泄漏,并且每次执行命令时都不会关闭它。请阅读帖子的场景部分以获得解释。
-
我两个不清楚。你为什么使用 import-pssession ?您正在删除网络驱动器上的文件。 PSSESSION 与此有什么关系?
-
抱歉造成混淆,这只是 powershell 在执行一系列命令时如何发生内存泄漏的一个例子。我记得当我必须编写稳定性测试用例并且必须分离测试用例时处理同样的事情。它适用于 telnet,但不适用于 powershell。这是因为内存泄漏。但是出于安全目的,我正在删除登录的服务器将使 telnet 不可用。我从原始帖子中删除了 pssession 语句 to clean 以消除任何混乱。
-
也许得到这里建议的文件列表会有所帮助stackoverflow.com/questions/7196937/…
标签: powershell