脚本耗费时间过长


PowerShell交流中心脚本耗费时间过长
0
Betty asked 7 年 ago

#功能:1、查找最近的新创建的版本\\winbuilds\rele\MAIN\{最新版本号}
# 2、\\winbuilds\rele\MAIN\{版本号}\amd64fre\bin\MsM.dll一定要有这个文件存在。
#
#问题: 因为路径下的文件太多太多,要耗费几个小时甚至十几个小时,有没有新的思路?

#筛选出\\winbuilds\rele\MAIN下最近创建的两个版本=>\\winbuilds\rele\MAIN\{版本号}
$dirs = dir \\winbuilds\rele\MAIN -Directory -ErrorAction:SilentlyContinue |
where {$_.LastWriteTime -gt (Get-Date).AddDays(-2)}|
Select-object -ExpandProperty fullname
#对着两个版本进行筛选,获得存在‘MsM.dll’的路径(几个小时甚至十几个小时)
$dirs | foreach {
Get-ChildItem $_ -File -Filter ‘MsM.dll’ -Recurse -ErrorAction SilentlyContinue
} |
Sort-Object LastWriteTime -Descending |
select -First 1 -ExpandProperty FullName

1 Answers
0
Best Answer
Mooser Lee 管理员 answered 7 年 ago

如果文件相对路径是固定的,根本就不需要递归

1..100 | 
where {
$buildNO = (Get-Date).AddDays($_).ToString("yyyy.MM.dd")
$MockBuildPath = "\\winbuilds\rele\MAIN\$buildNO\amd64fre\bin\MsM.dll"
Write-Host "正在测试 $MockBuildPath " 
#如果路径存在,再进行下一步筛选和排序
#Test-Path $MockBuildPath
}
 正在测试 \\winbuilds\rele\MAIN\2017.06.25\amd64fre\bin\MsM.dll 
正在测试 \\winbuilds\rele\MAIN\2017.06.26\amd64fre\bin\MsM.dll 
正在测试 \\winbuilds\rele\MAIN\2017.06.27\amd64fre\bin\MsM.dll 
正在测试 \\winbuilds\rele\MAIN\2017.06.28\amd64fre\bin\MsM.dll 
正在测试 \\winbuilds\rele\MAIN\2017.06.29\amd64fre\bin\MsM.dll 
正在测试 \\winbuilds\rele\MAIN\2017.06.30\amd64fre\bin\MsM.dll 
正在测试 \\winbuilds\rele\MAIN\2017.07.01\amd64fre\bin\MsM.dll 
正在测试 \\winbuilds\rele\MAIN\2017.07.02\amd64fre\bin\MsM.dll 
正在测试 \\winbuilds\rele\MAIN\2017.07.03\amd64fre\bin\MsM.dll 
正在测试 \\winbuilds\rele\MAIN\2017.07.04\amd64fre\bin\MsM.dll 
正在测试 \\winbuilds\rele\MAIN\2017.07.05\amd64fre\bin\MsM.dll 
正在测试 \\winbuilds\rele\MAIN\2017.07.06\amd64fre\bin\MsM.dll 
正在测试 \\winbuilds\rele\MAIN\2017.07.07\amd64fre\bin\MsM.dll 
正在测试 \\winbuilds\rele\MAIN\2017.07.08\amd64fre\bin\MsM.dll