比较不同文件夹的文件权限

时间:2017-10-17 08:29:11

标签: powershell file-permissions

我有这个代码检查整个目录的文件权限。 问题是它们很多并且不断加起来。

output message "CHECKING FOR FILES PERMISSION"
$files = Get-ChildItem -Path $PATHDEST -Recurse | % { $_.isreadonly = $true }
$attribute = [io.fileattributes]::ReadOnly
Foreach($file in $files) {
   if((Get-ItemProperty -Path $PATHDEST"\"$file).attributes -band $attribute){
       attrib -r $PATHDEST"\"$file /s
   }
}

在部署新版本的应用程序时使用此方法只是为了确保部署中不会出现任何问题。

现在,我真正想要的是检查要更新的文件的权限,而不是整个目录......

3 个答案:

答案 0 :(得分:1)

如果我理解正确,你应该可以这样做:

foreach ($file in (Get-ChildItem -Path $PATHDEST -Recurse -File)) { 
    if ($file.IsReadOnly) {
        $file.IsReadOnly = $false
    }
}

这会以递归方式遍历$PATHDEST(不是文件夹)中的所有文件,并将从只读文件中删除只读属性。

最好使用$file.IsReadOnly = $false然后attrib,因为它没有使用外部工具来实现这一目标。

答案 1 :(得分:1)

如果要查找所有只读文件并删除只读权限,可以使用以下命令:

Get-ChildItem -Path $PATHDEST -Recurse | Where-Object { $_.isreadonly -eq $true } | Foreach-Object { attrib -r $_ }

这将使用Where-Object cmdlet过滤所有只读文件,然后将它们沿管道传递到Foreach-Object cmdlet,该cmdlet将对已过滤列表执行操作,运行{{1}命令对文件。

答案 2 :(得分:0)

我不是100%的确切问题,但我理解为>

  • 性能
  • &安培;您编写的代码执行一次这一事实。但是,新文件正在进入,这需要被捕获。

我建议如下。

效果

  1. 在get-childitem cmdlet上使用-filter参数。只要PowerShell cmdlet上有-filter参数,就会以更高效的方式处理cmdlet检索的对象。
  2. 使用Get-childitem上的-file参数仅获取文件。
  3. 关于不断进入的文件

    1. 现在,由于您没有提到您尝试部署的应用程序是什么,我可能会遗漏一些域详细信息。但。如果我是你,我会尝试潜入:
      • 查看应用程序是否可以为您提供将要更新的文件的列表。可能应用程序必须知道这一点。
      • 部署应用程序后是否有可能查询更新的文件?如果是这样,那么在应用程序之后做出反应。已部署。如果情况是你不得不监视文件夹中的已更改文件,我会使用System.IO.FileSystemWatcher ...这是一个很好的例子> https://mcpmag.com/articles/2015/09/24/changes-to-a-folder-using-powershell.aspx
    2. 我希望这会有所帮助。祝你有美好的一天。