2017-10-17 14 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

+1の質問がクリアされていません。 "更新するファイルとディレクトリ全体ではない"だけを望む場合は、 'Get-ChildItem'に' -File'フラグを追加してください。 – 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. 取得-ChildItemコマンドレットの-filterパラメータを使用します。 PowerShellコマンドレットで-filterパラメーターを使用できるときはいつでも、コマンドレットによって取得されたオブジェクトはより効率的な方法で処理されます。
  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コマンドレットを使用します。ファイルにattrib -rコマンドを実行して、フィルターを適用したリストに対して操作を実行するコマンドレットForeach-Objectに送信します。

関連する問題