PowerShell多行脚本编写及New-ADUser参数报错排查
PowerShell多行脚本编写问题及New-ADUser脚本报错排查
问题描述
我想了解如何在PowerShell中编写多行脚本,尝试使用反引号(Backtick)但未生效。同时编写了如下脚本:
$secPassword = Read-Host "Password" -AsSecureString New-ADUser -Name "XYZ ABC" -SamAccountName xyz.a -UserPrincipalName "xyz.a@ntsh.local" -AccountPassword $secPassword -Path "cn=Users,dc=ntsh,dc=local" -Enabled:$true -PasswordNeverExpires:$true -CannotChangePassword:$true -PasswordNotRequired:$false -ChangePasswordAtLogon:$false
运行时所有参数都出现CommandNotFoundException错误,请问我的脚本存在什么问题?
问题排查与解决
1. New-ADUser脚本报错原因
你遇到的CommandNotFoundException不是参数写法的问题,而是PowerShell无法找到New-ADUser命令,核心原因有两个:
- 未安装Active Directory模块:
New-ADUser属于RSAT(远程服务器管理工具)中的AD模块,仅在安装了该模块的Windows设备(如域控制器、安装RSAT的客户端)上可用。 - 未手动加载AD模块:即便已安装模块,部分场景下需先执行
Import-Module ActiveDirectory加载模块,再运行脚本。
另外,你写的多行参数格式本身是正确的——PowerShell中,只要下一行是以-开头的参数,会自动识别为续行,无需额外添加反引号。
2. PowerShell多行脚本的正确写法
场景1:命令与参数跨多行(无需反引号)
像你写的New-ADUser那样,只要下一行是以-开头的参数,PowerShell会自动续行:
Get-ChildItem -Path C:\ -Recurse -Filter *.txt
场景2:表达式中间续行(需反引号,且反引号后无空格)
如果是表达式、字符串拼接等场景下续行,必须用反引号,且反引号后面不能有任何空格或换行以外的字符——多数反引号失效的情况都是因为不小心在反引号后加了空格:
$longString = "这是一段很长的字符串,` 需要分成两行来写" $sum = 1 + 2 + ` 3 + 4
场景3:脚本块或管道的自然续行
在脚本块{}、管道|之后,PowerShell支持自然续行:
Get-Process | Where-Object {$_.CPU -gt 100} | Select-Object Name, CPU
内容的提问来源于stack exchange,提问作者Desperado
相关产品推荐
相关产品推荐

