0

我正在尝试制作一个 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 后它变得不可用怎么办?

请问有人有解决办法吗?

先感谢您

4

1 回答 1

1

我尝试了您的这行代码并遇到了相同的结果(即使路径不存在也没有错误),即使默认 $ErrorActionPreference 设置为 Continue。

$pocet = (Get-ChildItem \\server1\edi1\folder1\*.* ) | where-object {($_.LastWriteTime -lt (Get-Date).AddDays(-0).AddHours(-0).AddMinutes(-20))} | Measure-Object

试试这个(删除*.*make it error,但我们可以把它放回 -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,因为您实际上创建了一个Microsoft.PowerShell.Commands.MeasureInfo存在于 $pocet 中的类型的对象,并且当没有任何内容传递给它时,count 属性将等于 0。

相反,我会尝试这个:

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
}
于 2013-11-08T16:24:26.927 回答