使用csv使用foreach设置文件夹权限



基于这样的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)"

最新更新