我正在阅读包含我应用审核设置的文件和文件夹的文本文件的内容。文件夹在SACL上有一些不同的设置,所以我想过滤以查找所有文件并执行操作,然后对目录执行不同的操作。我很难找到一种方法来过滤/区分两者。我使用的是PowerShell v2.0,可能无法进行升级。
这里是我的代码,我知道它不起作用,但是让我知道我的想法:
import-module NTFSSecurity
$Targetfiles = Get-Content c:\temp\test.txt
if($Targetfiles -match ".exe or .dll or .msc"){
$files = $Targetfiles -match ".exe or .dll or .msc"
foreach ($File in $files){
Get-NTFSAudit -Path $files | Remove-NTFSAudit -PassThru
Add-NTFSAudit -Path $files -Account 'NT Authority\Everyone' -AccessRights FullControl -Type Failure -AppliesTo ThisFolderOnly
Add-NTFSAudit -Path $files -Account 'NT Authority\Everyone' -AccessRights ExecuteFile, AppendData, Delete, ChangePermissions, TakeOwnership -Type Success -AppliesTo ThisFolderOnly
}
}
else{
$directories = $Targetfiles -notmatch ".exe or .dll or .msc"
foreach ($Directory in $directories){
Get-NTFSAudit -Path $directories | Remove-NTFSAudit -PassThru
Add-NTFSAudit -Path $directories -Account 'NT Authority\Everyone' -AccessRights FullControl - Type Failure -AppliesTo ThisFolderOnly
Add-NTFSAudit -Path $directories -Account 'NT Authority\Everyone' -AccessRights ExecuteFile, AppendData, ReadData, CreateFiles, Delete, ChangePermissions, TakeOwnership -Type Success -AppliesTo ThisFolderOnly
}
}
显然-match / -notmatch不起作用。我希望脚本检查所有带扩展名的项目,将它们放入$ files然后完成工作以及任何没有扩展名的项目,进入$目录并完成这项工作。我还在学习,所以我的逻辑可能不起作用。我已经尝试了#34;。"与-match,但它似乎没有做任何事情。
可在此处找到该模块:https://gallery.technet.microsoft.com/scriptcenter/1abd77a5-9c0b-4a2b-acef-90dbb2b84e85#content
感谢您的帮助!
答案 0 :(得分:0)
我没有使用该特定模块,因此我无法在那里调试任何内容,但对于您的逻辑,这就是我使用的内容:
Import-Module NTFSSecurity;
Get-Content C:\Temp\test.txt | ForEach-Object {
If (Test-Path $_ -PathType Leaf) {
If ((Get-Item $_).Extension -in ('.exe','.dll','.msc')) {
#Apply executable file rule
}
} ElseIf (Test-Path $_ -PathType Container) {
#Apply folder rule
} Else {
Write-Output "Path not found: $_";
}
}
我的语法有点迂腐,可以改进,但这应该让你开始。我不确定你要完成什么,这是最直接的版本。