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

时间:2013-11-08 15:26:01

标签: 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))}   | 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后它变得不可用了?

有人有解决方案吗?

提前谢谢

1 个答案:

答案 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
}