【问题标题】:How to compare two Foreach loops如何比较两个 Foreach 循环
【发布时间】:2022-10-20 08:31:15
【问题描述】:

我当前的脚本检查某些客户端上的特定文件夹是否存在。 在检查文件夹是否存在之前,我想检查客户端是在线还是离线。 我当前的脚本如下所示:

$CDS = Get-content C:\Users\XY\Desktop\Clientliste.txt

Foreach($c in $CDS) {

    IF (Test-Connection -BufferSize 32 -Count 1 -ComputerName $c -Quiet) {
            
        Foreach ($c in $CDS) {
            $Test = Test-Path -path "\\$c\c$\apps\perl"
            Start-Sleep -s 0.25 

            If ($Test -eq $True) {
                Write-Host "Path exists on $c."
            }
            Else {
                Write-Host "Path NOT exist on $c."
            }
        }
    }
    Else {
        Write-Host "The remote computer " $c " is Offline"
    }
}

我不知道如何链接 foreach 循环以便它们一起工作。 因为当我现在运行我的脚本时,它会在第二个foreach 循环中的第一个if 请求之后进行,并且当它完成第二个foreach 循环时它确实会先离开它。 我不想要那个。我希望如果客户端在线,它会检查路径是否存在,然后转到下一个客户端并再次检查它是否在线,然后......

也许你可以帮助我:)

【问题讨论】:

  • 在您的if 中添加break
  • 您不需要第二个 foreach,将其删除
  • 老实说,您只需测试路径即可。仅仅因为您可以 ping 一台机器,并不意味着您可以连接到它。从我的角度来看,只需要一个循环。

标签: windows powershell


【解决方案1】:

为什么对文本文件中的项目进行另一个相同的循环是您已经测试过机器是否可达?

只需删除第二个循环并执行以下操作:

$CDS = Get-Content -Path 'C:UsersXYDesktopClientliste.txt'
foreach($computer in $CDS) {
    if (Test-Connection -BufferSize 32 -Count 1 -ComputerName $computer -Quiet) {
        if (Test-Path -Path "\$computerC$ppsperl" -PathType Container) {
            Write-Host "Path exists on computer '$computer'."
        }
        else {
            Write-Host "Path NOT exist on computer '$computer'."
        }
    }
    else {
        Write-Host "The remote computer '$computer' is Offline"
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    • 2015-04-11
    • 2013-07-18
    • 1970-01-01
    相关资源
    最近更新 更多