Powershell 如何从提示和代码清理中重置csv中所有用户的密码

Powershell 如何从提示和代码清理中重置csv中所有用户的密码,powershell,active-directory,Powershell,Active Directory,我正在设置一个自动脚本,该脚本将重置csv中的用户密码,启用他们的帐户,并强制他们在登录时更改密码。我不熟悉使用PowerShell编写脚本。我可以用任何方法让它变得更简单,这将是非常棒的。我觉得我不需要多次获得AdUser,我应该能够用一条线输送所有东西,对吗 我试图避免每次用户密码重置都会提示我自己 Import-Module ActiveDirectory $newPassword = $(Read-Host "Enter Password" -AsSecureString) Import

我正在设置一个自动脚本,该脚本将重置csv中的用户密码,启用他们的帐户,并强制他们在登录时更改密码。我不熟悉使用PowerShell编写脚本。我可以用任何方法让它变得更简单,这将是非常棒的。我觉得我不需要多次获得AdUser,我应该能够用一条线输送所有东西,对吗

我试图避免每次用户密码重置都会提示我自己

Import-Module ActiveDirectory
$newPassword = $(Read-Host "Enter Password" -AsSecureString)
Import-Csv "C:\Scripts\ADUsers.csv" | ForEach-Object {
 $samAccountName = $_."samAccountName"
Get-ADUser -Identity $samAccountName | Set-ADAccountPassword $newPassword
Get-ADUser -Identity $samAccountName | Enable-ADAccount
Set-ADUser -Identity $samAccountName -ChangePasswordAtLogon $True
}
我收到的错误信息:

设置ADAccountPassword:无法绑定参数“Identity”。不能 转换类型为的“System.Security.SecureString”值 输入“System.Security.SecureString” “Microsoft.ActiveDirectory.Management.AdaAccount”。第5行字符:62 + ... ADUser-标识$samAccountName |设置ADAccountPassword$newPassword + ~~~~~~~~~~~~ +CategoryInfo:InvalidArgument:(:)[Set-AdaAccountPassword],ParameterBindi NgeException +FullyQualifiedErrorId:CannotConvertArgumentNoMessage,Microsoft.ActiveDirectory.Man
management.Commands.setadaAccountPassword


编辑这看起来对吗?我想我错过了原始脚本中的-NewPassword标记

Get-ADUser -Identity $samAccountName | Set-ADAccountPassword -NewPassword $newPassword 
这次我得到了不同的回报。明天我得在华盛顿试一试

我能不能不这样把这两个管道连在一起

Get-ADUser -Identity $samAccountName | Set-ADAccountPassword -NewPassword $newPassword | Enable-ADAccount

Get-ADUser -Identity $samAccountName | Set-ADAccountPassword
-NewPassword $newPassword | Enable-ADAccount
设置ADAccountPassword:无法绑定参数“Identity”。不能 转换类型为的“System.Security.SecureString”值 输入“System.Security.SecureString” “Microsoft.ActiveDirectory.Management.AdaAccount”。第5行字符:62+ ... ADUser-标识$samAccountName |设置ADAccountPassword $newPassword+~~~~~~~~~~~~~~~~+类别信息:InvalidArgument:(:) [设置ADAccountPassword],参数Bindi NgeException+ FullyQualifiedErrorId: CannotConvertArgumentNoMessage,Microsoft.ActiveDirectory.Man management.Commands.setadaAccountPassword

出现上述错误是因为您正在将一个
ADUser
对象输送到一个
Set AdAccountPassword
中,而没有任何命名参数。
-Identity
参数是唯一通过管道获取值并设置为位置0的参数。因此,
$newPassword
将绑定到
-Identity
(因为它是第一个参数,也称为位置0),并且管道中的任何内容都不会绑定到任何内容。添加
-NewPassword
可以释放管道输入的
-Identity


我能不能不这样把这两个管道连在一起

Get-ADUser -Identity $samAccountName | Set-ADAccountPassword -NewPassword $newPassword | Enable-ADAccount

Get-ADUser -Identity $samAccountName | Set-ADAccountPassword
-NewPassword $newPassword | Enable-ADAccount
完全按照列出的方式运行代码将不会执行所需的操作。默认情况下,
Set ADAccountPassword
不输出任何内容;因此,最后一个命令不会进入管道。但是,希望并没有完全破灭,因为
Set AdAccountPassword
提供了
-PassThru
开关,它将输出您正在使用的当前项目。此外,如果帐户已经设置了密码,则需要包括
-Reset
开关。否则,在更改密码之前,您需要提供当前密码。如果任何东西有机会工作,它将是以下内容:

Get-ADUser -Identity $samAccountName |
    Set-ADAccountPassword -NewPassword $newPassword -PassThru -Reset | Enable-ADAccount

您是否查看了该cmdlet的帮助?您是否通过管道向其发送正确的对象类型?如果您做了明智的事情并为新密码使用正确的参数名,会发生什么?这看起来对吗?我想我错过了-NewPassword标记``Get ADUser-Identity$samAccountName`;Set-AdaAccountPassword-NewPassword$NewPassword``这次我得到了不同的返回。我明天要在华盛顿特区试一试。我没有任何广告资料,所以我只是在看文件。[咧嘴笑]接下来我要检查的就是管道中传送的东西。接受管道输入的cmdlet通常有某种要求-“ByValue`或
ByName
。如果通过管道传递的内容没有identity属性,则可能需要以某种方式重新构造代码,以便为cmdlet提供所需的属性以及所需的名称和值。Hi AdminOfThings。我确实错过了新密码,我很感激你向我解释的方式。一切似乎都很顺利。我没有用-PassThru管道化Enable ADAccount,而是将其保留为3行。非常感谢。