PowerShell脚本循环删除DFS目标报错求助
解决Remove-DfsnFolderTarget动态参数报错问题
我一眼就看出问题出在哪了——你脚本里的变量引用语法错了,导致Remove-DfsnFolderTarget没拿到有效的参数值,才会报出"无法调用null值表达式的方法"这种错误。
问题根源
你在双引号里写"$Array.Path"的时候,PowerShell会把这整段当成普通字符串,而不是去解析$Array对象的Path属性。结果传递给cmdlet的是空值或者无效的字符串,自然触发了动态参数解析失败的报错。
修正后的脚本
直接改对变量引用方式就行,我给你两种可行的写法:
$TargetsToDelete = Import-Csv "DFS_Targets.csv" foreach ($item in $TargetsToDelete) { # 推荐写法:直接引用对象属性,无需额外引号(自动处理路径空格) Remove-DfsnFolderTarget -Path $item.Path -TargetPath $item.TargetPath # 备选写法:如果一定要用双引号,必须用子表达式语法 # Remove-DfsnFolderTarget -Path "$($item.Path)" -TargetPath "$($item.TargetPath)" }
另外我把循环变量从$Array改成了$item,只是为了可读性更好,不是必须的,但用语义化的变量名能帮你少踩坑。
验证小技巧
要是不确定参数是否正确解析,可以先加一行输出,甚至用-WhatIf模拟删除操作,确认没问题再执行真实删除:
$TargetsToDelete = Import-Csv "DFS_Targets.csv" foreach ($item in $TargetsToDelete) { Write-Host "待删除目标:Path=$($item.Path) | TargetPath=$($item.TargetPath)" Remove-DfsnFolderTarget -Path $item.Path -TargetPath $item.TargetPath -WhatIf }
-WhatIf参数会告诉你cmdlet将要执行什么操作,但不会真的删除目标,非常适合新手调试。
内容的提问来源于stack exchange,提问作者db74
相关产品推荐
相关产品推荐

