从对象中选择单词
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 ...
}
我有一个包含以下值的变量 $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 ...
}