将New ADUser与hashtable和PSCustomObject一起使用之间的区别



我试图在实验室环境中自动创建AD用户,但遇到了一个我似乎无法理解的有趣问题。当我尝试使用以下代码时,Powershell抛出了";新ADUser:提供的名称不是格式正确的帐户名称";

$Attributes = @{
Enabled = $true
ChangePasswordAtLogon = $false
Departent = "MyDepartment"
UserPrincipalNAme = "first.name@domain.lel"
City = "MySite"
DisplayName = "My display name"
EmailAddress = "My@mail.address"
GivenName = "First Name"
Manager = "cbu"
PasswordNeverExpires = $true
SamAccountName = "abc123"
Surname = "Last name"
Title = "Title"
Name = "abc123"
AccountPassword = $("Thishere1234" | ConvertTo-SecureString -AsPlainText -Force)
}
New-ADUser $Attributes

上面的例子接近于我发现的某篇文章的复制粘贴,该文章使用哈希表将信息传递给NewADUser。由于这不起作用,我尝试了以下方法:

$Attributes = [pscustomobject]@{
Enabled = $true
ChangePasswordAtLogon = $false
Departent = "MyDepartment"
UserPrincipalNAme = "first.name@domain.lel"
City = "MySite"
DisplayName = "My display name"
EmailAddress = "My@mail.address"
GivenName = "First Name"
Manager = "cbu"
PasswordNeverExpires = $true
SamAccountName = "abc123"
Surname = "Last name"
Title = "Title"
Name = "abc123"
AccountPassword = $("Thishere1234" | ConvertTo-SecureString -AsPlainText -Force)
}
$Attributes | New-ADUser 

这很好用。我的问题是:为什么第一个hashtable方法不接受name属性,而第二个PSCustomObject却接受完全相同的方法?

作为一个额外的问题,我不能使用NewADUser$Attributes,而是必须将$Attributes管道传输到NewADUser,这有什么特别的原因吗?我觉得你也可以用前者?

使用哈希表进行splatt时,需要在cmdlet上使用@符号,而不是$:

New-ADUser @Attributes

最新更新