You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取指定服务器为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 21:17:26