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