2017-10-17 145 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命令。