我有一个NAS文件夹列表,我必须定期查询文件夹是否存在。每个查询都是唯一的,但可能存在于40多个目录中。目录是固定的,我只查找true或null(对所有目录)响应。我需要有一个用户输入框和一个输出到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
}
我应该在哪里打破?如何对这些语句进行分组以使其有效?
答案 0 :(得分: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
}
答案 1 :(得分:0)
我认为问题在于你在循环之外打印文件夹存在消息,此时$ potentialpaths(名称应该是单数而不是复数)具有在循环的最后一次迭代中给出的值。从if(Test-Path)块内部打印该消息,并根据更大的上下文打破/返回/退出,并且假设有$或者一个$ Folderquery实例,或者至少你只对第一个实例感兴趣一。