基于这样的csv文件,我创建了这个用户和他的文件夹:
user,password,name
fcuadrado,P@assword,Paco Cuadrado
rita,1234@ASIR,Rita la cantaora
ccoton,Asir1234,Carmelo Conton
我在localhost:中创建用户
foreach ($users in (Import-Csv .usuarios.csv)){
$securepassword = ConvertTo-SecureString "$users.password" -AsPlainText -Force
New-LocalUser -Name $users.user-Password $securepassword-FullName $users.name
}
文件夹:
foreach ($users in (Import-Csv .users.csv)){
New-Item -Name $users.user-Path C:users-ItemType Directory
}
我试过了,但循环无法从csv 中找到用户
foreach ($users in (Import-Csv .users.csv)){
$acl = Get-Acl -Path c:users$($users.user)
$acl.SetAccessRuleProtection($true,$false)
$acl.Access | ForEach-Object { $acl.RemoveAccessRule($_) | Out-Null }
$ace = New-Object System.Security.Accesscontrol.FileSystemAccessRule ($($users.user), "FullControl", "ContainerInherit,ObjectInherit", "InheritOnly", "Allow")
$acl.AddAccessRule($ace)
Set-Acl -Path "c:users$($users.user)" -AclObject $acl
}
我想用foreach设置权限,我用来创建文件夹和用户。一旦用户问题得到解决,它就不会为每个用户循环我,并将所有文件夹的权限授予一个用户,而不是将每个具有文件夹名称的用户作为其用户
Get-Acl -Path c:usuariosfcuadrado
这给了我访问ccoton的权限。
那么,为什么无论如何都要使用多个foreach循环,而不是简单地在一个foreach环路中执行所有操作呢?
foreach ($user in (Import-Csv .users.csv)) {
$account = $user.user # just for convenience
$securepassword = $user.password | ConvertTo-SecureString -AsPlainText -Force
New-LocalUser -Name $account -Password $securepassword -FullName $user.name
# create the path for the userfolder and store in a variable for re-use
$userFolder = Join-Path -Path 'C:Users' -ChildPath $account
$null = New-Item -Path $userFolder -ItemType Directory -Force
$acl = Get-Acl -Path $userFolder
$acl.SetAccessRuleProtection($true, $false)
$acl.Access | ForEach-Object { $acl.RemoveAccessRule($_) | Out-Null }
$ace = [System.Security.Accesscontrol.FileSystemAccessRule]::new($account, "FullControl", "ContainerInherit,ObjectInherit", "InheritOnly", "Allow")
$acl.AddAccessRule($ace)
$acl | Set-Acl -Path $userFolder
}
您需要注意几个问题。
第一个问题是您的CSV文件。在本例中,您使用逗号作为分隔符
根据运行PS的区域性,分隔符可能不同。因此,使用-分隔符参数显式声明它:
$userData = Import-Csv -Path '.usuarios.csv' -Delimiter ','
之后,检查$userData是否确实是PSObject或的数组,以便可以直接调用属性。
第二个问题是NewLocalUser中的参数声明
如果没有隔离,就无法在字符串中访问对象属性
这是错误的:
New-LocalUser -Name "$user.User" -Password $secpass -FullName "$user.Name"
这项工作:
New-LocalUser -Name $user.User -Password $secpass -FullName $user.Name
# Alternatively
New-LocalUser -Name "$($user.User)" -Password $secpass -FullName "$($user.Name)"