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