Exporte para o arquivo Get-ACL para AD Computer Object e importe posteriormente usando Set-ACL

Exporte para o arquivo Get-ACL para AD Computer Object e importe posteriormente usando Set-ACL

Eu poderia usar alguma ajuda. Meu Active Directory tem 20 anos, está prestes a começar a comprar álcool legal e só Deus sabe para onde vai a partir daí...

Brincadeiras à parte, o Exchange devastou meus AD DACLs. A tal ponto que o Exchange nem está funcionando direito. Construí um laboratório com uma estrutura AD idêntica, mas atualizada em 2022-OS/2019-EX-CU12, apenas para poder ver como são as permissões corretas.

ÓTIMO! Vejo todos os DACLS faltantes de que preciso para uma operação adequada mais uma vez. O problema? Você já tentou usar ferramentas de permissão nativa avançada para coisas complicadas, como coisas do Exchange? Simplesmente trava, só Deus sabe se estou fazendo certo, ugh...

O que eu prefiro fazer é isso do lado limpo:

$acl = get-acl -path "AD:DC=prod,DC=widgets,DC=corp"
$acl.Access | ? {$_.IdentityReference -like "*Exchange*" -or $_.IdentityReference -like "*Organization*"} | export-CliXml -Path c:\temp\ftw.xml

Em seguida, remova os registros de linha do arquivo de texto que não preciso importar. Para aqueles que preciso, modificaria o nome de domínio no arquivo xml para corresponder ao lado da produção:

$CleanACLs = Import-Clixml C:\temp\ftw.xml
$TestVictom = "AD:CN=Poor User,OU=Employees,DC=prod,DC=myCompany,DC=corp"
$acl = get-acl -path $TestVictom
#Testing just one ACL
$NewACE = ($CleanACLs)[0]
$acl.AddAccessRule($newACE)
Set-Acl -Path $TestVictom -AclObject $acl

No entanto, meus sonhos foram frustrados por este erro na linha "$acl.AddAccessRule($newACE)":

MethodException: Não é possível converter o argumento "rule", com valor: "System.DirectoryServices.ActiveDirectoryAccessRule", para "AddAccessRule" digitar "System.DirectoryServices.ActiveDirectoryAccessRule": "Não é possível converter o valor "System.DirectoryServices.ActiveDirectoryAccessRule" do tipo "Desserializado .System.DirectoryServices.ActiveDirectoryAccessRule" para digitar "System.DirectoryServices.ActiveDirectoryAccessRule"."

Parece algo tão bobo quanto o fato do import-clixml alterar TODOS os objetos para adicionar os desserializados. é o problema. Tenho quase certeza de que os objetos são idênticos. Ironicamente, eu estava usando clixml para preservar o tipo de objeto.

Alguém tem alguma mágica para fazer com que esses objetos não tenham o prefixo desserializado?

Caso contrário, alguém tem uma maneira decente de exportar um DACL de objeto AD para um arquivo de texto editável, com uma maneira de reimportar? A única coisa que preciso fazer no arquivo de texto é remover linhas desnecessárias (que posso filtrar tecnicamente no lado da origem) e também alterar o nome de domínio do IdentityReference).

Saúde!

Responder1

Você pode usar o cmdlet Get-Acl no PowerShell para recuperar a DACL de um objeto AD. Aqui está um exemplo de comando que exporta a DACL de um objeto AD para um arquivo CSV:

Get-Acl -Path "AD:\CN=ObjectDN,DC=DomainName,DC=com" | Select-Object -ExpandProperty Acesso | Exportar-Csv -Path "C:\Path\To\File.csv" -NoTypeInformation

Para reimportar a DACL editada, você pode usar o cmdlet Set-Acl no PowerShell. Aqui está um exemplo de comando que define a DACL de um objeto AD de um arquivo CSV:

Set-Acl -Path "AD:\CN=ObjectDN,DC=DomainName,DC=com" -AclObject (Import-Csv -Path "C:\Path\To\File.csv" | ForEach-Object {New-Object System .Security.AccessControl.FileSystemAccessRule($.IdentidadeReferência,$.FileSystemRights,$.InheritanceFlags,$.PropagationFlags,$_.AccessControlType)})

Responder2

Você não pode consertar isso, nativamente. O problema é que quando um objeto é salvo em disco (na sua importação/exportação), ele é serializado. Quando você lê isso do disco, ele é desserializado. Embora os objetos sejam idênticos da sua perspectiva (como nas mesmas propriedades, etc.), como você deve ter visto, o novo objeto é do mesmo tipo, mas foi desserializado no final. Por isso são objetos tecnicamente diferentes.

Eu tive o mesmo problema há algum tempo com comandos completamente diferentes e, na verdade, levantei uma questão sobre mim mesmo. Trabalhei com alguém para descobrir e para entender maisDê uma olhadaaqui. Mas para você, a única solução é reconstruir o objeto manualmente :-( Ou não salvá-lo no disco.

EDITAR: Depois de pensar um pouco mais, você poderá conseguir isso fazendo tudo em um processo. Em vez de exportar o DCAL primeiro (não podemos ver como você conseguiu isso, mas você pode usar o PowerShell), basta executar essas linhas de código e salvar o objeto DACL em uma variável e NÃO em um arquivo. Isso o manterá em seu formato original e você poderá passá-lo com sucesso.

informação relacionada