PowerShell执行foreach循环时每次迭代均提示输入凭据如何解决?
PowerShell批量重命名域计算机重复弹密码问题解决
问题描述
编写PowerShell脚本实现域内计算机批量重命名,脚本读取包含OldName、NewName两列的CSV文件,循环遍历条目执行重命名操作。脚本逻辑可正常运行,但实际执行时每处理一台计算机就会弹出一次密码输入提示,需要实现全流程仅输入一次凭据完成所有操作。
原始代码如下:
$a = Import-Csv C:\File.csv -Header OldName, NewName Foreach ($Computer in $a) {Rename-Computer -ComputerName $Computer.OldName -NewName $Computer.NewName -DomainCredential Domain\Admin01 -Force -Restart}
问题原因
直接向-DomainCredential参数传入用户名字符串时,PowerShell每次执行Rename-Computer命令都会重新触发凭据收集流程,不会自动缓存之前输入的密码,因此每轮循环都会弹出密码输入框。
解决方法
在循环外部提前通过Get-Credential命令一次性获取域管理员凭据并存入变量,循环执行重命名操作时直接调用该凭据变量即可,全程仅会弹出一次密码输入框。
修复后的完整代码:
# 脚本启动时仅弹出一次凭据输入窗口 $domainCred = Get-Credential -UserName "Domain\Admin01" -Message "请输入域管理员账号密码" $computerList = Import-Csv C:\File.csv -Header OldName, NewName foreach ($pc in $computerList) { Rename-Computer -ComputerName $pc.OldName -NewName $pc.NewName -DomainCredential $domainCred -Force -Restart }
补充说明
- 如果执行脚本的当前登录账号本身具备域内计算机重命名的对应权限,可以直接省略
-DomainCredential参数,脚本运行全程不会弹出密码提示。 - 运行脚本前请确保PowerShell已以管理员身份启动,若触发脚本执行策略拦截,可先执行
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser放开本地脚本运行权限。
内容的提问来源于stack exchange,提问作者JellyfishPirate
相关产品推荐
相关产品推荐

