Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查文件夹PowerShell的多个NAS目录_Powershell_Scripting - Fatal编程技术网

检查文件夹PowerShell的多个NAS目录

检查文件夹PowerShell的多个NAS目录,powershell,scripting,Powershell,Scripting,我有一个NAS文件夹列表,我必须定期查询这些文件夹是否存在。每个查询都是唯一的,但可能位于40多个目录中的任意一个目录下。这些目录是固定的,我只寻找一个true或null(对所有目录)响应。我需要有一个用户输入框和一个输出到txt文件或一个带有验证UNC路径的弹出对话框。 PowerShell提供了有用的测试路径、读取主机和获取内容功能,我认为我将使用这些功能,但我愿意接受其他想法。这是我的开始想法,如果有任何帮助,我将不胜感激 我的变量 $Folderquery = Read-Host

我有一个NAS文件夹列表,我必须定期查询这些文件夹是否存在。每个查询都是唯一的,但可能位于40多个目录中的任意一个目录下。这些目录是固定的,我只寻找一个true或null(对所有目录)响应。我需要有一个用户输入框和一个输出到txt文件或一个带有验证UNC路径的弹出对话框。 PowerShell提供了有用的测试路径、读取主机和获取内容功能,我认为我将使用这些功能,但我愿意接受其他想法。这是我的开始想法,如果有任何帮助,我将不胜感激

我的变量

    $Folderquery = Read-Host 'Enter remote folder name'
    $potentialpaths = Get-Content \\nas\listofpaths.txt
当我存储单个变量$Folderquery并针对每个可能的UNC路径运行它时,我的命令会起作用

    Test-Path \\NAS1\Folder1\$Folderquery
我认为我需要将所有可能的UNC测试路径都放在listofpaths.txt文件中,因为每个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
}    

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

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

$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
}

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

我尝试了你的脚本,但是我得到了一个错误ndcurlybrace c:\testpath.ps1:10 char:2查看该语法,我想我需要指定一个日志或模式输出?此外,我试图只在任何位置上都不存在文件时接收not present,并在VBS userinput box上创建一个弹出式输入框。所以,我想我需要比现在多一点。修复了缺少的括号并添加了日志输出。效果非常好,只是我可能弄脏了水。脚本只有在潜在路径上没有文件夹时才会回复,我想我是这么说的。。。在先前的答复中。我试图实现的是,如果某个文件存在,则是肯定的响应;如果该文件在任何路径上都不存在,则是否定的响应。我需要的输出是:“文件夹$Folderquery不存在”和“文件夹$Folderquery存在于$potentialpath上”抱歉,我在回复中看不到森林。弄明白了,请告诉我是否有更优雅的方法来实现这一点。我会把代码贴在上面好吧,开个玩笑。。。这将告诉我文件夹确实存在。然而,它并没有告诉我正确的路径。如果($i-eq 1){Write Output“文件夹$Folderquery存在于$potentialpath\$Folderquery”| Out File“\\NAS\pathlogfile.log”-编码ASCII-Append},则默认为路径列表{Else}中的最后一个文件夹我已经在上面发布了修改后的代码,但由于我理解有限,我不确定应该将中断放在哪里,以便它能够正确地重复或运行。计算匹配的策略似乎是太多的工作了。你一找到第一根火柴就可以停下来。这将是紧跟$i++语句之后的break语句。现在阅读关于break的内容。看起来有不同的。。。我刚刚在I++(第8行)之后的行中插入了“Break”,这似乎有效。谢谢