Могу ли я объединять команды и передавать переменные в одной строке, не используя файл CSV - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь изменить разрешения для домашнего каталога нового пользователя. То, что я написал, работает. Однако я хочу передать данные из теста Get-Acl и изменить их без экспорта в файл CSV после тестирования ACL «Все».

Вот куда я направляюсь: ЕСЛИ у пользователя Home есть «"Полный контроль", ТОГДА удалите его и замените его на user.account.

Так как мой CSV-файл содержит "хорошие" данные, могу ли я использовать If-Then-Else, чтобы определить, следует ли изменять ACL-списки.

МОИ appoliges, когда я пишу это, я получаюидеи о том, что попробовать дальше ...

Get-Acl -Path $HomeDirectory | where accesstostring -like *everyone*  | Select pschildname | Export-Csv c:\test\acl.csv -Append  

Это работает, но я думаю, что могу сделать лучше.

Ответы [ 3 ]

0 голосов
/ 04 октября 2019

AccessToString - это поле в Get-Acl в модуле Microsoft.PowerShell.Securty

0 голосов
/ 04 октября 2019

вот мой законченный скрипт Get-Module

$import_mods = Read-Host -Prompt 'do you NEED to load modules? "y" or "n" (Y)'
if ($import_mods -ine "n")
{
Import-Module ShareUtils, PowerShellAccessControl, Microsoft.PowerShell.Security
}
$newhome = "\\xray\HDs\"
out-file -filepath C:\test\acl.csv
Get-ChildItem -Path \\xray\hd -Directory | select PSChildName | Export-Csv C:\test\xray.csv

$csv1= import-csv -path C:\test\xray.csv
foreach ($user in $csv1)
{
$SAM = $user.PSChildName
$account = get-aduser -Identity $SAM -Properties *
$HomeDirectory = "$($newhome)$($Account.SamAccountName)"   
$Acl = Get-Acl -Path $HomeDirectory -Filter *
if ($Acl.AccessToString -like "*everyone*")
{
Write-Output $user.pschildname | out-file -filepath C:\test\acl.csv -Append 
$Ar = New-Object system.Security.AccessControl.FileSystemAccessRule($Account.SamAccountName, "modify", "ContainerInherit, ObjectInherit", "None", "Allow")
$Ar1 = New-Object system.Security.AccessControl.FileSystemAccessRule("yourdomain\Domain Admins", "full", "ContainerInherit, ObjectInherit", "None", "Allow")
$Ar2 = New-Object system.Security.AccessControl.FileSystemAccessRule("yourdomain\sadmins", "full", "ContainerInherit, ObjectInherit", "None", "Allow")
$Acl.setaccessrule($Ar2)
$Acl.setaccessrule($Ar1)
$Acl.Setaccessrule($Ar)
# next line disables inheritance and for my enviroment this is there "everyone" comes from
$Acl.SetAccessRuleProtection($true,$false)
Set-Acl $HomeDirectory $Acl

Write-Host $SAM "fixed user"
} else {Write-Host $SAM "good user"}
}   

#3.0 rename & date acl.csv to record affected folders
  $destpath = 'C:\test\'+"acl_"+(get-date -Format yyyyMMdd)+'.txt'
$sourcepath = 'C:\test\acl.csv'
Move-Item -Path $sourcepath -Destination $destpath

exit
0 голосов
/ 01 октября 2019

в процессе написания вопроса у меня была идея попробовать: foreach ($ user in $ csv1) {$ SAN = $ user.PSChildName $ account = get-aduser -Identity $ SAN -Properties * $ HomeDirectory = "$ ($ newhome) $ ($ Account.SamAccountName) "
$ Acl = Get-Acl -Path $ HomeDirectory -Filter * if ($ Acl.AccessToString -like" каждый")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...