Nous essayons de comparer les autorisations NTFS pour les fichiers ou les dossiers en utilisant l'attribut SDDL
. La seule chose qui nous intéresse est si l'ACL est égale ou non, en utilisant le SDDL et pas d'autres méthodes comme AccessToString
ou simplement en comparant deux objets ACL. C'est parce que nous avions des problèmes dans le passé avec la manière standard de le faire.Fichier SDDL non égal bien qu'il devrait être
Donc, nous allons maintenant exécuter un problème où File1
et File2
ont exactement les mêmes autorisations lors de la vérification de l'onglet Advanced Permissions
dans Windows. Cependant, le SDDL dit que ce n'est pas égal, bien que nous enlevions la partie Owner O:
de la chaîne SDDL comme indiqué here, car le propriétaire ne nous intéresse pas.
Le code:
Function Test-ACLequal {
Param (
$Source,
$Target
)
$CompParams = @{
ReferenceObject = Get-Acl -LiteralPath $Source
PassThru = $True
}
$CompParams.DifferenceObject = Get-Acl -LiteralPath $Target
$AccessParams = @{
ReferenceObject = ($CompParams.ReferenceObject.sddl -split 'G:', 2 | Select -Last 1)
DifferenceObject = ($CompParams.DifferenceObject.sddl -split 'G:', 2 | Select -Last 1)
PassThru = $True
}
if (Compare-Object @AccessParams) {
Write-Verbose 'Test-ACLequalHC: Not equal'
$false
}
else {
Write-Verbose 'Test-ACLequalHC: Equal'
$True
}
}
Test-ACLequal -Source $File1-Target $File2
Vous pouvez voir clairement qu'il ya une différence entre les deux fichiers:
$AccessParams.ReferenceObject
DUD:(A;ID;FA;;;BA)(A;ID;0x1200a9;;;S-1-5-21-1078081533-261478967-839522115-243052)(A;ID;0x1301ff;;;S-1
-5-21-1078081533-261478967-839522115-280880)(A;ID;0x1301ff;;;S-1-5-21-1078081533-261478967-839522115-6
96733)(A;ID;0x1301ff;;;S-1-5-21-1078081533-261478967-839522115-696745)
$AccessParams.DifferenceObject
DUD:AI(A;ID;FA;;;BA)(A;ID;0x1200a9;;;S-1-5-21-1078081533-261478967-839522115-243052)(A;ID;0x1301ff;;;S
-1-5-21-1078081533-261478967-839522115-280880)(A;ID;0x1301ff;;;S-1-5-21-1078081533-261478967-839522115
-696733)(A;ID;0x1301ff;;;S-1-5-21-1078081533-261478967-839522115-696745)
Est-il possible de comparer les fichiers en utilisant le SDDL sans courir dans ce problème?
Je considérais utiliser ce '$ CompParams.ReferenceObject.sddl -split « \ (», 2 | Sélectionnez -Dernière 1' – DarkLite1
En fait, en utilisant une scission n'est pas la bonne chose à J'ai du mettre à jour la réponse – arco444
Modifier le sddl avant de le vérifier en général ne semble pas être une chose sensée à faire, il ne semble pas que ce soit destiné à être analysé avec un traitement de chaîne Il serait beaucoup plus sûr de laisser l'objet intact et de comparer avec la méthode '.Equals()' – arco444