PowerShell变量嵌入路径失效问题求助
问题:PowerShell变量嵌入路径时为空导致路径错误
我写了一段PowerShell脚本,接收$mdmUserName变量,要解析它并用到复制命令的路径里。排查时发现,解析后的$localusername输出到文本文件显示正常,但嵌入目标路径$to时却为空,导致路径出现连续反斜杠。手动给$mdmUserName赋值为"Win11/User"测试也有同样问题。
脚本代码
param ([String] $mdmUserName) $mdmUserName | Out-File "C:\Windows\Temp\test.txt" $FullUserSplit = $mdmUserName.Split("\") $FullUserSplit | Out-File -append "C:\Windows\Temp\test.txt" $localusername = $FullUserSplit[2] $localusername | Out-File -Append "C:\Windows\Temp\test.txt" $from = "C:\Windows\Temp\Normaltest.dotm" $to = "C:\Users\$localusername\AppData\Roaming\Microsoft\Templates\" $to | Out-File -Append "C:\Windows\Temp\test.txt" Copy-Item $from $to -Force
test.txt输出内容
Win11\User Win11 User C:\Users\\AppData\Roaming\Microsoft\Templates\
解决方案
问题根源
$mdmUserName.Split("\")拆分后得到的数组只有2个元素(索引0是Win11,索引1是User),但脚本中用了索引[2]去取值,超出数组范围,导致$localusername实际为$null,嵌入路径时就会变成空,从而出现连续反斜杠。
修复步骤
- 修正索引取值:将
$localusername = $FullUserSplit[2]改为$localusername = $FullUserSplit[1],因为数组索引从0开始,用户名对应的是拆分后的第二个元素。 - 增加异常判断:建议在拆分后判断数组长度,避免因输入格式错误导致索引越界:
if ($FullUserSplit.Count -ge 2) { $localusername = $FullUserSplit[1] } else { Write-Error "输入的用户名格式不正确,应为域\用户名或计算机名\用户名" exit 1 }
修复后的完整脚本
param ([String] $mdmUserName) $mdmUserName | Out-File "C:\Windows\Temp\test.txt" $FullUserSplit = $mdmUserName.Split("\") $FullUserSplit | Out-File -append "C:\Windows\Temp\test.txt" if ($FullUserSplit.Count -ge 2) { $localusername = $FullUserSplit[1] } else { Write-Error "输入的用户名格式不正确,应为域\用户名或计算机名\用户名" exit 1 } $localusername | Out-File -Append "C:\Windows\Temp\test.txt" $from = "C:\Windows\Temp\Normaltest.dotm" $to = "C:\Users\$localusername\AppData\Roaming\Microsoft\Templates\" $to | Out-File -Append "C:\Windows\Temp\test.txt" Copy-Item $from $to -Force
内容的提问来源于stack exchange,提问作者Denham
相关产品推荐
相关产品推荐

