PowerShell执行Move-Item移动用户目录报路径不存在但实际成功如何解决
问题原因
你的脚本报错根源是变量调用逻辑错误:
- 提前将
$HomeDirectory赋值为整个CSV文件所有HomeDirectory字段组成的数组,而非循环内当前行的对应路径 - 每次执行
ForEach循环时,Move-Item都会一次性传入所有用户的主目录路径,第一个路径的目录被移动走后,后续循环再查找该路径自然会提示不存在,但所有移动操作在第一次循环时就已经全部执行完成,所以你会看到功能正常但有报错的情况。
修复方案
调整循环内的变量调用逻辑,每次取当前循环行的HomeDirectory字段即可,还可新增路径存在判断避免无效路径报错,修改后的代码如下:
# 声明存储离校用户主目录列表的CSV文件路径 $HomeDirectoryList = Import-CSV "C:\Scripts\Leavers\HomeDirectoryExport.csv" $Archive = "\\myfileserver.ac.uk\D$\21-22 Leavers" ForEach ($userItem in $HomeDirectoryList) { # 取当前循环行的主目录路径 $currentHomeDir = $userItem.HomeDirectory if (Test-Path -Path $currentHomeDir) { Move-Item -Path $currentHomeDir -Destination $Archive } }
临时隐藏错误的方法
如果不需要修复逻辑,仅想屏蔽报错,可以在Move-Item命令后添加错误忽略参数:
Move-Item -Path $HomeDirectory -Destination $Archive -ErrorAction SilentlyContinue
该方案仅做报错屏蔽,没有解决根本逻辑问题,更推荐使用上面的修复方案。
内容的提问来源于stack exchange,提问作者Daniel De La Warr
相关产品推荐
相关产品推荐

