如何提取指定服务器为TargetPath的DFS共享列表?PowerShell代码排障
问题分析与修正代码
你的代码存在几个关键问题,导致$DFSTarget始终为空:
- Where子句引用错误:你用了
$DFSNFolder.TargetPath,但$DFSNFolder是Get-DfsnFolder返回的文件夹对象,它没有TargetPath属性——这个属性属于Get-DfsnFolderTarget返回的目标对象,应该用管道自动变量$_来引用当前目标的TargetPath。 - 变量覆盖问题:循环里每次给
$DFSTarget赋值会覆盖之前的结果,应该用数组累加的方式保存所有符合条件的结果。 - 语法冗余:Where子句末尾多余的管道符会导致语法错误。
- 未定义变量:代码里没有定义
$servername,需要先指定目标服务器名称。
修正后的代码
# 定义目标服务器名称 $servername = "你的目标服务器名" $DFSPath = "\\DFSpath" # 初始化数组存储结果 $DFSTarget = @() $DFSNFolders = Get-DfsnFolder $DFSPath foreach($DFSNFolder in $DFSNFolders ) { # 获取当前DFS文件夹的所有目标,筛选出TargetPath包含指定服务器的项 $matchingTargets = Get-DfsnFolderTarget $DFSNFolder.Path | Select-Object Path, TargetPath | Where-Object { $_.TargetPath -like "*$servername*" } # 将匹配结果添加到数组中 $DFSTarget += $matchingTargets } # 输出结果 $DFSTarget
额外优化说明
- 如果
$servername是完整的服务器路径前缀(比如\\server01),可以把-like "*$servername*"改成-eq $servername,实现精准匹配。 - 若不需要保存结果到变量,直接输出的话,也可以用管道一次性处理,效率更高:
$servername = "你的目标服务器名" $DFSPath = "\\DFSpath" Get-DfsnFolder $DFSPath | ForEach-Object { Get-DfsnFolderTarget $_.Path | Select-Object Path, TargetPath | Where-Object { $_.TargetPath -like "*$servername*" } }
内容的提问来源于stack exchange,提问作者CarlM
相关产品推荐
相关产品推荐

