2017-10-17 15 views
0

J'ai ce code qui vérifie un répertoire entier pour les autorisations de fichiers. Le problème est qu'ils sont nombreux et continuent à additionner. Ceci est utilisé lors du déploiement d'une nouvelle version de l'application juste pour s'assurer qu'aucun problème ne se produit dans le déploiement.Comparer les autorisations de fichiers de différents dossiers

Maintenant, ce que je voulais vraiment est de vérifier l'autorisation des fichiers qui vont être mis à jour et non pas tout le répertoire ...

+1

Ce n'est pas clair. Essayez-vous de supprimer l'autorisation readonly sur les fichiers où il est défini? Ou essayer de définir tous les fichiers dans un répertoire pour être en lecture seule? – arco444

+0

+1 pour la question n'est pas claire. Si vous voulez seulement "les fichiers qui vont être mis à jour et pas le répertoire entier" vous devriez ajouter l'indicateur '-File' à' Get-ChildItem' – Megabeets

+0

Je veux vérifier si les fichiers ont readonly et si oui, le supprimer. Maintenant, je vérifie tout le répertoire, mais je veux vérifier seulement les fichiers qui vont être mis à jour. –

Répondre

1

Si je vous ai bien compris, vous devriez probablement être en mesure de le faire comme ceci:

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

cela itérer sur tous les fichiers $PATHDEST (pas des dossiers) récursive et supprimer l'attribut lecture seule à partir des fichiers en lecture seule.

Il est préférable d'utiliser $file.IsReadOnly = $false puis attrib car il n'utilise pas d'outil externe pour y parvenir.

0

Je ne suis pas à 100% ce que la question exacte est mais je le comprends comme>

  • performances
  • & le fait que le code que vous avez écrit est exécuté une fois. Cependant, de nouveaux fichiers arrivent et cela doit être pris.

Permettez-moi de suggérer ce qui suit.

Performance

  1. Utilisez le paramètre -filter sur l'applet de commande get-childitem. Chaque fois qu'un paramètre -filter est disponible sur une applet de commande PowerShell, les objets récupérés par la cmdlet sont traités de manière plus performante.
  2. Utilisez le paramètre -file sur Get-childitem pour obtenir uniquement des fichiers.

En ce qui concerne les fichiers qui continuent d'affluer dans

  1. Maintenant, comme vous ne mentionnez pas ce que l'application que vous essayez de déployer est que je pourrais être absent quelques détails de domaine. Mais. Si j'étais vous je voudrais essayer de plonger dans:
    • Si l'application peut vous fournir une liste sur les fichiers qui vont être mis à jour. Les applications doivent probablement le savoir.
    • N'est-il pas possible d'interroger les fichiers mis à jour après le déploiement de l'application? Si oui, faites cela et réagissez après l'application. a été déployé. Si le cas est que vous devez surveiller de façon continue le dossier des fichiers modifiés je regarderais en utilisant le System.IO.FileSystemWatcher ... voici un bon exemple>https://mcpmag.com/articles/2015/09/24/changes-to-a-folder-using-powershell.aspx

J'espère que cela aide. Passez une bonne journée.

1

Si vous voulez trouver tous les fichiers en lecture seule et supprimer l'autorisation en lecture seule, vous pouvez utiliser les éléments suivants:

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

Cela utilisera l'applet de commande Where-Object pour filtrer tous les fichiers en lecture seule, puis les passer dans le pipeline à la cmdlet Foreach-Object qui effectuera une action sur la liste filtrée, en exécutant la commande attrib -r sur les fichiers.