我正在尝试创建一个Powershell脚本,报告远程文件夹上是否有超过x分钟的文件。我做到了:
$strfolder = 'folder1 ..................'
$pocet = (Get-ChildItem \\server1\edi1\folder1\*.* ) | where-object {($_.LastWriteTime -lt (Get-Date).AddDays(-0).AddHours(-0).AddMinutes(-20))} | Measure-Object
if($pocet.count -eq 0){Write-Host $strfolder "OK" -foreground Green}
else {Write-Host $strfolder "ERROR" -foreground Red}
但是有一个很大的问题。由于高负载,我常常无法使用该文件夹,并且在没有连接的情况下我发现它没有报告错误,但在$ pocet.count中继续为零。这意味着当文件夹不可用时,它会报告一切正常。
我正在考虑使用if(Test-Path ..)但是在通过Test-Path后它变得不可用了?
有人有解决方案吗?
提前谢谢
答案 0 :(得分:1)
我尝试了这行代码并经历了相同的结果(即使路径不存在也没有错误),即使默认的$ ErrorActionPreference设置为Continue。
$pocet = (Get-ChildItem \\server1\edi1\folder1\*.* ) | where-object {($_.LastWriteTime -lt (Get-Date).AddDays(-0).AddHours(-0).AddMinutes(-20))} | Measure-Object
请尝试此操作(删除*.*
会导致错误,但我们可以将其放回-filter参数中):
$pocet = (Get-ChildItem \\server1\edi1\folder1 -Filter *.* ) | where-object {($_.LastWriteTime -lt (Get-Date).AddDays(-0).AddHours(-0).AddMinutes(-20))} | Measure-Object
但是$ pocet.Count仍然等于0,因为你基本上创建了一个存在于$ pocet中的Microsoft.PowerShell.Commands.MeasureInfo
类型的对象,并且当没有任何传递给它时,count属性将等于零。
相反,我试试这个:
try
{
$pocet = Get-ChildItem "\\server1\edi1\folder1" -Filter *.* -ErrorAction Stop | where-object { ($_.LastWriteTime -lt (Get-Date).AddMinutes(-20)) }
if(($pocet | Measure-Object).Count -eq 0)
{
Write-Output "Folder ok"
}
else
{
}
}
catch
{
Write-Output "Error getting items from folder"
Write-Output $Error[0].Exception.Message
}