你已经接近你想要的地方了!
声明数组:您会注意到,当您尝试在 PowerShell ISE 或 VSCode 中使用 $newuser = @(ash, bob, charlie, david) 时,您会收到语法错误。这是因为您需要在每个项目周围加上引号。你最初的做法在实践中没有什么不同。这完全取决于您要如何定义数组。有时对于扩展多行的大型数组,使用@() 包裹时更容易跟踪它的结束位置
了解您的变量:您可以通过尝试两种方式并使用GetType() 方法来测试这两种数组声明方法,如下所示:$newuser.GetType()
命名约定:在处理包含多个对象的事物(如数组)时,尽量使用复数形式的变量名。所以在这种情况下,$newuser 应该是$newusers,并尝试让你的变量描述它们所包含的内容。 (你在这里做得很好)
$PSItem 和 $_: 当您遍历一个数组时,有一个漂亮的 PowerShell 变量,称为 $PSItem,也由别名 $_ 调用。此变量包含您正在迭代的当前对象。请参阅下面的示例,了解我如何执行此类操作,但请记住,大多数时候在 PowerShell 中完成任务有多种方法。
密码:您在此处使用的 cmdlet 不会将字符串作为密码,而是需要 SecureString。您可以在脚本中将字符串强制为 SecureString,但只能作为练习执行此操作。最好的办法是有一个文件,您可以从中调用并在之后粉碎,或者在需要传递值时调用外部密码管理器。 纯文本输入密码绝不是一个好主意。
方法一
$newUsers = ‘ash’, ‘bob’, ‘charlie’, 'david’
$securePassword = ConvertTo-SecureString '123123' -AsPlainText -Force
foreach ($user in $newUsers) {
New-LocalUser -Name $user -Password $securePassword -Description 'Students'
}
方法二
$securePassword = ConvertTo-SecureString '123123' -AsPlainText -Force
‘ash’, ‘bob’, ‘charlie’, 'david’ | ForEach-Object {New-LocalUser -Name $PSItem -Password $securePassword -Description 'Students'}
这主要是个人喜好,或者您会遵循团队使用的标准,但我会说第一个是我将在脚本中使用的,因为我觉得它更具可读性,第二个是我会在候机楼即时执行。