You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 09:25:25