使用Powershell创建用户

问题描述

我正在尝试学习PowerShell。

$newuser = ‘ash’,‘bob’,‘charlie’,‘david’

$newuser | foreach({New-LocalUser -Name $_newuser -Password “123123” -Description “Students”})

我想做的是使用列表中的每个名称$newuser以及密码和我的描述创建新的本地帐户。

我在Google上搜索了很多,并尝试了其他方法,但是没有运气。

是否需要使用此语法创建列表? $newuser = @(ash,bob,charlie,david)

我也对放在-Name之后的内容感到困惑。 尝试过类似-Name $newuser-Name $__.newuser-Name $_.($newuser)等的操作。 我一直在寻找从$newuser调用每个对象来创建每个用户帐户的方法

任何建议将不胜感激!

解决方法

您即将到达想要的地方!

声明数组::您会注意到,当您尝试在PowerShell ISE或VSCode中使用$newuser = @(ash,bob,charlie,david)时,会出现语法错误。这是因为您需要在每个项目周围加上引号。实际上,您完成此操作的方式没有什么不同。这完全取决于您要如何定义数组。有时,使用大数组展开多行时,用@()

包裹起来可以更容易地跟踪结束位置

了解变量:您可以通过尝试两种方法并使用GetType()方法来测试这两个数组声明方法:$newuser.GetType()

命名约定:在处理包含多个对象(例如数组)的对象时,请尝试对变量名使用复数形式。因此,在这种情况下,$newuser应该为$newusers,并尝试使变量描述它们所包含的内容。 (您在这里做得很好)

$ PSItem和$ _::当您遍历数组时,会有一个漂亮的PowerShell变量,名为$PSItem,别名也称为$_。此变量包含您要迭代的当前对象。请参阅下面的示例,了解我如何做这样的事情,但还要记住,大多数情况下有多种方法可以在PowerShell中完成任务。

密码:您在此处使用的cmdlet不会将字符串作为密码,而是需要SecureString。您可以在脚本中将字符串强制设置为SecureString,但实际上只能这样做。最好的做法是拥有一个您从中调用然后切细的文件,或一个在需要传递值时调用的外部密码管理器。 纯文本密码不是一个好主意

方法1

$newUsers = ‘ash’,‘bob’,‘charlie’,'david’
$securePassword = ConvertTo-SecureString '123123' -AsPlainText -Force 

foreach ($user in $newUsers) {
    New-LocalUser -Name $user -Password $securePassword -Description 'Students'
}

方法2

$securePassword = ConvertTo-SecureString '123123' -AsPlainText -Force 

‘ash’,'david’ | ForEach-Object {New-LocalUser -Name $PSItem -Password $securePassword -Description 'Students'}

这主要是个人喜好,或者您会遵循团队使用的标准,但是我想说第一个是我在脚本中使用的标准,因为我发现它更具可读性,第二个是我会在终端中即时进行。