Powershell-计算文件时远程文件夹的可用性

Powershell-计算文件时远程文件夹的可用性,powershell,remote-access,Powershell,Remote Access,我正在尝试制作一个Powershell脚本,用于报告远程文件夹上是否存在超过x分钟的文件。我要这样做: $strfolder = 'folder1 ..................' $pocet = (Get-ChildItem \\server1\edi1\folder1\*.* ) | where-object {($_.LastWriteTime -lt (Get-Date).AddDays(-0).AddHours(-0).AddMinutes(-20))} | Me

我正在尝试制作一个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(测试路径…),但是在通过测试路径之后,它就变得不可用了

有人有解决办法吗


提前感谢您

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

$pocet = (Get-ChildItem \\server1\edi1\folder1\*.* ) | where-object {($_.LastWriteTime -lt (Get-Date).AddDays(-0).AddHours(-0).AddMinutes(-20))} | Measure-Object
请改为尝试此操作(删除
*.*
会出错,但我们可以将其放回-filter参数中):

但是,$pocet.Count仍将等于0,因为您实际上创建了一个类型为
Microsoft.PowerShell.Commands.MeasureInfo
的对象,该对象存在于$pocet中,当未向其传递任何内容时,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
}

我不知道你为什么没有出错。如果我运行“Get ChildItem\\server1\edi1\folder1”(不存在),我会得到一个错误,这是正常的预期行为。这是你的全部剧本吗?您的$ErrorActionPreference的值是多少?如果设置为“SilentlyContinue”,则可能会隐藏此错误。感谢您的回复。是的,现在就这些。大约8小时前,我开始使用Powershell来简化我的工作,但我还没有了解$ErrorActionPreference。我也预期会出现错误,但我在其他计算机上尝试了此脚本,即使使用了伪路径,也无法访问远程文件夹,因此写得很好。所以,现在我不确定是否使用它……我找到了它不出错的原因,并在下面为您提供了一个答案。如果有帮助,请将其标记为答案!一些提示:Get ChildItem周围的参数是不必要的,对于日期(Get date)。AddMinute(-20)就足够了。@KeithHill我必须说我甚至没有读过那一点(糟糕的格式!)。我已经清理了基于此的代码。谢谢。仅供参考($pocet)。Count-eq 0将在V1/V2和>=V3上运行。您只需执行
$pocet.Count-eq 0
。非常好的主意,但是我现在已经尝试过了,结果出现了错误,OK->即使forlder路径不存在,catch部分也不会启动。我已经通过添加-ErrorAction Stop将Get ChildItem生成的错误强制为终止错误。需要终止错误才能捕获错误。请立即尝试:)
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
}