मैंने CSV फ़ाइल के अंदर एक सूची के आधार पर एक व्यापक फ़ोल्डर संरचना के अंदर बड़े पैमाने पर संपादन अनुमतियों में सहायता के लिए एक स्क्रिप्ट बनाई। स्क्रिप्ट अपेक्षा के अनुसार काम करती है, लेकिन कई फ़ोल्डरों के लिए, मुझे पता है कि स्क्रिप्ट को विफल होना चाहिए और एक त्रुटि फेंकनी चाहिए क्योंकि फ़ोल्डर मौजूद नहीं है। हालाँकि, मुझे स्क्रिप्ट से कोई आउटपुट नहीं मिल रहा है, एक चल रही सूची से अलग मुझे वर्तमान फ़ोल्डर के बारे में सूचित करना होगा। मैंने कोशिश-कैच का प्रयास किया है, लेकिन स्क्रिप्ट पहली त्रुटि पर प्रसंस्करण बंद कर देती है और मुझे यकीन नहीं है कि स्क्रिप्ट को चालू रखने के लिए इंजीनियर कैच कैसे करें। स्क्रिप्ट प्रोसेसिंग को रखने का सबसे अच्छा तरीका क्या है, लेकिन मुझे पता है कि आउटपुट त्रुटियां एक फ़ाइल के लिए मौजूद हैं इसलिए मैं बाद में उनकी समीक्षा कर सकता हूं?
उदाहरण के लिए, जब कोड चलता है, तो उसे 1-3 पर काम करना चाहिए। यदि फ़ोल्डर 2 मौजूद नहीं है, तो पॉवर्सशेल उस पथ के साथ एक त्रुटि फेंकने के लिए उपयोग करता है जो इसे नहीं मिल सकता है और जारी रहेगा। मैं उस त्रुटि को बाद में पार्स करने के लिए एक फ़ाइल में चाहूंगा क्योंकि कुछ फ़ोल्डर्स इस स्क्रिप्ट द्वारा संशोधित संरचना का पालन नहीं करते हैं।
$CSV=Import-Csv "C:\ProjectList.csv"
ForEach ($Entry in $CSV)
{
$ProjectNumber = $Entry.Projects
$Project = "$ProjectMain\$ProjectNumber"
Write-Host $Project #Writes out current project being processed
#sddl defines
$sddlProject = 'D:PAI(D;CI;DCLCSDWDWO;;;DU)(D;CI;DCLCSDWDWO;;;S-1-5-21-513)(A;OICI;FA;;;BA)(A;OICIIO;FA;;;CO)(A;OICI;FA;;;SY)(A;OICI;FA;;;DA)(A;OICI;0x1200a9;;;DU)(A;OICI;FA;;;S-1-5-21-512)(A;OICI;0x1200a9;;;S-1-5-21-513)'
$sddlRootFolders = 'D:PAI(D;;SDWDWO;;;DU)(D;;SDWDWO;;;S-1-5-21-513)(A;OICIIO;FA;;;CO)(A;OICI;FA;;;SY)(A;OICI;FA;;;DA)(A;OICI;0x1301bf;;;DU)(A;OICI;FA;;;BA)(A;OICI;FA;;;S-1-5-21-512)(A;OICI;0x1301bf;;;S-1-5-21-513)'
$sddlCommon = 'D:AI(A;ID;FA;;;BA)(A;OICIIOID;FA;;;CO)(A;OICIID;FA;;;SY)(A;OICIID;FA;;;DA)(A;OICIID;0x1301bf;;;DU)(A;OICIIOID;FA;;;BA)(A;OICIID;FA;;;S-1-5-21-512)(A;OICIID;0x1301bf;;;S-1-5-21-513)'
$sddlMGMT = 'D:PAI(A;OICI;0x1301bf;;;S-1-5-21-1501)(A;OICIIO;FA;;;CO)(A;OICI;FA;;;SY)(A;OICI;0x1301bf;;;S-1-5-21-12461)(A;OICI;0x1301bf;;;S-1-5-21-12462)(A;OICI;0x1301bf;;;S-1-5-21-12463)(A;OICI;0x1301bf;;;S-1-5-21-12464)(A;OICI;0x1301bf;;;S-1-5-21-12465)(A;OICI;0x1301bf;;;S-1-5-21-12466)(A;OICI;FA;;;DA)(A;OICI;0x1301bf;;;S-1-5-21-1486)(A;OICI;0x1301bf;;;S-1-5-21-1487)(A;OICI;FA;;;S-1-5-21-512)(A;OICI;FA;;;BA)'
$sddlFiles = 'D:AI(A;ID;FA;;;BA)(A;ID;FA;;;SY)(A;ID;FA;;;DA)(A;ID;0x1301bf;;;DU)(A;ID;FA;;;S-1-5-21-512)(A;ID;0x1301bf;;;S-1-5-21-513)'
#Apply ACL to main folder
$securityDescriptor = Get-Acl -Path $Project
$securityDescriptor.SetSecurityDescriptorSddlForm($sddlProject)
Set-Acl -Path $Project -AclObject $securityDescriptor
#Apply ACL to the top tier folders
$ProjectSub = $Project + "\Folder1"
$securityDescriptor = Get-Acl -Path $ProjectSub
$securityDescriptor.SetSecurityDescriptorSddlForm($sddlRootFolders)
Set-Acl -Path $ProjectSub -AclObject $securityDescriptor
$ProjectSub = $Project + "\Folder2"
$securityDescriptor = Get-Acl -Path $ProjectSub
$securityDescriptor.SetSecurityDescriptorSddlForm($sddlRootFolders)
Set-Acl -Path $ProjectSub -AclObject $securityDescriptor
$ProjectSub = $Project + "\Folder3"
$securityDescriptor = Get-Acl -Path $ProjectSub
$securityDescriptor.SetSecurityDescriptorSddlForm($sddlRootFolders)
Set-Acl -Path $ProjectSub -AclObject $securityDescriptor
#Apply ACL to MGMT folders
$ProjectSub = $Project + "\Folder9"
$ProjectDiscSub = $ProjectSub + "\MGMT"
$securityDescriptor = Get-Acl -Path $ProjectDiscSub
$securityDescriptor.SetSecurityDescriptorSddlForm($sddlMGMT)
Set-Acl -Path $ProjectDiscSub -AclObject $securityDescriptor
#Apply ACL to MGMT inside folders
$ProjectDiscSub = $Project + "\Folder1\MGMT"
$securityDescriptor = Get-Acl -Path $ProjectDiscSub
$sddlMGMTSub = 'D:PAI(D;;SDWDWO;;;S-1-5-21-12471)(D;;SDWDWO;;;S-1-5-21-1497)(A;OICIIO;FA;;;CO)(A;OICI;FA;;;SY)(A;OICI;0x1301bf;;;S-1-5-21-12471)(A;OICI;FA;;;DA)(A;OICI;0x1301bf;;;S-1-5-21-1497)(A;OICI;FA;;;S-1-5-21-512)(A;OICI;FA;;;BA)'
$securityDescriptor.SetSecurityDescriptorSddlForm($sddlMGMTSub)
Set-Acl -Path $ProjectDiscSub -AclObject $securityDescriptor
$ProjectDiscSub = $Project + "\Folder3\MGMT"
$securityDescriptor = Get-Acl -Path $ProjectDiscSub
$sddlMGMTSub = 'D:PAI(D;;SDWDWO;;;S-1-5-21-12469)(D;;SDWDWO;;;S-1-5-21-1501)(A;OICIIO;FA;;;CO)(A;OICI;FA;;;SY)(A;OICI;0x1301bf;;;S-1-5-21-12469)(A;OICI;FA;;;DA)(A;OICI;0x1301bf;;;S-1-5-21-1501)(A;OICI;FA;;;S-1-5-21-512)(A;OICI;FA;;;BA)'
$securityDescriptor.SetSecurityDescriptorSddlForm($sddlMGMTSub)
Set-Acl -Path $ProjectDiscSub -AclObject $securityDescriptor
}