2017-10-17 76 views
0

我有这个代码检查整个目录的文件权限。 问题是,他们是很多,并继续加起来。比较来自不同文件夹的文件权限

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 
    } 
} 

这是在部署新版本的应用程序时使用,以确保在部署中不会出现问题。现在

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

+1

这个不清楚。你是否试图删除设置文件的只读权限?或试图将目录中的所有文件设置为只读? – arco444

+0

对于问题不明确。如果你只想要“文件将被更新,而不是整个目录”,你应该将'-File'标志添加到'Get-ChildItem' – Megabeets

+0

我想检查文件是否只读,如果是,请将其删除。现在我正在检查所有目录,但我只想检查将要更新的文件。 –

回答

1

如果我理解正确的话,你也许应该是能够做到这一点像这样:

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

这将在所有遍历文件中$PATHDEST(不是文件夹)递归和将删除只读从只读文件属性。

最好使用$file.IsReadOnly = $false然后attrib,因为它不使用外部工具来实现。

0

我不是100%准确的问题是什么,但我把它理解为>

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

让我建议如下。

性能

  1. 使用-filter的get-childitem cmdlet的参数。无论何时在PowerShell cmdlet上使用-filter参数,cmdlet检索的对象都会以更高性能的方式进行处理。
  2. 使用Get-childitem上的-file参数仅获取文件。

至于是守在

  1. 未来现在,你不提你正在尝试部署该应用程序是我可能会丢失一些域详细信息的文件。但。如果我是你,我会试着潜入:
    • 看看应用程序是否可以为您提供一个列表,列出将要更新的文件。可能应用程序必须知道这一点。
    • 应用程序部署完成后,是否无法查询更新的文件?如果是这样,那么做,并在应用程序后作出反应。已被部署。如果情况是,你有汽车无监视更改的文件我会考虑使用System.IO.FileSystemWatcher的文件夹...这里是一个很好的例子>https://mcpmag.com/articles/2015/09/24/changes-to-a-folder-using-powershell.aspx

我希望这有助于。祝你有美好的一天。

1

如果你想找到的所有只读文件,并删除只读权限,则可以使用以下命令:

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

这将使用Where-Object cmdlet来过滤所有只读文件,然后将它们传递下来的管道到Foreach-Object cmdlet将对筛选列表执行操作,对文件运行attrib -r命令。