0

我有一个 NAS 文件夹列表,我必须定期查询这些文件夹是否存在。每个查询都是唯一的,但可能存在于 40 多个目录中的任何一个下。目录是固定的,我只寻找真或空(对所有目录)响应。我需要有一个用户输入框和一个输出到 txt 文件或带有经过验证的 UNC 路径的弹出对话框。PowerShell 具有有用的 Test-Path、Read-Host 和 Get-Content 功能,我认为我会使用这些功能,但对其他想法持开放态度。这是我的初步想法,任何帮助将不胜感激。

我的变量

    $Folderquery = Read-Host 'Enter remote folder name'
    $potentialpaths = Get-Content \\nas\listofpaths.txt

当我存储单个变量 $Folderquery 并针对每个可能的 UNC 路径运行它时,我的命令有效

    Test-Path \\NAS1\Folder1\$Folderquery

我想我需要在 listofpaths.txt 文件中包含所有可能的 UNC 测试路径,因为每个 NAS 都有数百个主文件夹,我只想在其中的一小部分内进行扫描。

    Foreach ($potentialpaths in (Get-Content \\NAS\listofpaths.txt))
    {
    If (-not (Test-Path $Folderquery)) {
    Write-Output "The Folder $Folderquery does not exist"
    }
    else {
    Write-Output "The Folder $Folderquery has been found on $listofpaths
    }

那么,我该如何把它们放在一起呢?

修改后的代码:

$Folderquery = Read-Host 'Enter remote folder name'
$i = 0
foreach ($potentialpath in (Get-Content \\NAS\listofpaths.txt))
{
  If (Test-Path "$potentialpath\$Folderquery") 
  {
    $i++
  }
}
If ($i -eq 1)
{
  Write-Output "The Folder $Folderquery exists on $potentialpath\$Folderquery" | Out-File "\\NAS\pathlogfile.log" -Encoding ASCII -Append
} 
Elseif ($i -eq 0)
{
  Write-Output "The Folder $Folderquery does not exist" | Out-File "\\NAS\pathlogfile.log" -Encoding ASCII -Append
}    

我应该在哪里休息?我如何对这些陈述进行分组以使其有效?

4

2 回答 2

1

看起来你已经非常接近你的答案了,这就是你要找的吗?

$Folderquery = Read-Host 'Enter remote folder name'
$i = 0

Foreach ($potentialpath in (Get-Content \\NAS\listofpaths.txt))
{
  If (Test-Path "$potentialpath\$Folderquery") 
  {
    $i++
  }
}

If ($i -eq 0)
{
  Write-Output "The Folder $Folderquery does not exist" | Out-File "C:\logfile.log" -Encoding ASCII -Append
}
于 2013-08-23T20:27:38.740 回答
0

我认为问题在于您正在循环之外打印文件夹存在消息,此时 $potentialpaths (名称应该是单数而不是复数)具有在循环的最后一次迭代中给出的值。从 if(Test-Path) 块内部打印该消息并根据更大的上下文中断/返回/退出,并且假设存在 $Folderquery 的零个或一个实例,或者至少您只对第一个感兴趣一。

于 2013-09-09T18:38:26.530 回答