从对象中选择单词

Selection of words from the object

我有一个包含以下值的变量 $a

$a
Server Work TS,,login,A+,,,0,,Aplus,Z%@#$!dasgktP#&^zES&M,
Server Work TS,,login,DAK,,,0,,DAK,c@!@%SDJgPrNA69%#$!#e53V6f,
Server Work TS,,login,DAS,,,0,,DAS,!@$dJGH4Q!DFE3jhhd,
Server Work TS,,login,DAS,,,0,,DAS,$@L1A0aR*G3FsAGGCCnc,
Server Work TS,,login,Avdeev,,,0,,AvdeevI,gd@%^%$YFASCNHhdgas8P,
Server Work TS,,login,Andriyshik,,,0,,AndriychukS,ASFHRT46fgsdjmbvn,

然后我需要提取登录名和密码并创建一个用户

我就是这样做的

$username1 = $a[1] -split ',' | Select -Last 3 | select -SkipLast 2
$password1 = $a[1] -split ',' | Select -Last 2 | select -SkipLast 1 | ConvertTo-SecureString -AsPlainText -Force

然后我创建一个用户并将他们添加到适当的组

New-LocalUser $username1 -Password $password1 -AccountNeverExpires -PasswordNeverExpires -UserMayNotChangePassword
net localgroup "Remote Desktop Users" "$username1" /ADD
net localgroup "Users" "$username1" /ADD

接下来,我用变量“a”的每一行重复上面的选择

我可以循环执行此命令吗?它会自动遍历每一行,并对每个用户重复执行“($a).count”的次数? 因为变量“$a”中的行数可以变化

你可以简单地使用一个循环:

foreach($line in $a){
$username1 = $line -split ',' | Select -Last 3 | select -SkipLast 2
$password1 = $line -split ',' | Select -Last 2 | select -SkipLast 1 | ConvertTo-SecureString -AsPlainText -Force
New-LocalUser $username -Password $password -AccountNeverExpires -PasswordNeverExpires -UserMayNotChangePassword
net localgroup "Remote Desktop Users" "$username" /ADD
net localgroup "Users" "$username" /ADD
}

我强烈建议使用 ConvertFrom-Csv cmdlet 为您解析数据:

$users = $a |ConvertFrom-CSV -Header A,B,C,D,E,F,G,H,Username,Password,K |Select-Object Username,Password

foreach($user in $users){
    New-LocalUser -Username $user.Username -Password ($user.Password |ConvertTo-SecureString -AsPlainText -Force) ...
}

变量 $a 中的内容是没有 headers 的 CSV。如果您将 headers 提供给 ConvertFrom-Csv cmdlet,您可以简单地转换它:

$a |  ConvertFrom-Csv -Header 'Server','Empty1','Login','NoIdea','Empty2','Empty3','Digit','Empty4','UserName','PassWord','Empty5' | ForEach-Object {
    $pw = $_.Password | ConvertTo-SecureString -AsPlainText -Force
    New-LocalUser -Username $_.Username -Password $pw ...
}