tl; dr: Existe-t-il un moyen de configurer l’historique des fichiers Windows 8 via une ligne de commande sans surveillance / un script?
Longue histoire: Je configure beaucoup de PC autonomes (hors domaine) et je pense qu'une sauvegarde est préférable à l'absence de sauvegarde. Sous Windows 7, je configure même sa sauvegarde standard malgré son retard. Par défaut, l'ordinateur ralentit considérablement tous les lundis, à moins que l'utilisateur ne s'éteigne de ne pas éteindre son PC avant le week-end. Il remplit alors le support de sauvegarde et arrête la sauvegarde.
Et j’ai démissionné pour essayer d’automatiser sa configuration, mais au moins là, je peux la configurer une fois en tant qu’administrateur et elle est efficace pour tous, y compris les nouveaux utilisateurs. Et je planifie (la planification est automatisée ) un script personnalisé pour supprimer les anciennes sauvegardes lorsque le support de sauvegarde manque d’espace, de sorte qu’il ne nécessite aucune maintenance par la suite (défini une seule fois et oublié).
Depuis Windows 8, il existe ce type d’historique appelé Fichier, qui est beaucoup moins intrusif pour les utilisateurs (son impact sur les performances est à peine perceptible), et qui peut se nettoyer (gestion automatique de l’historique en fonction de l’âge ou de l’espace disponible). C'est une vraie solution de sauvegarde, pour de vrai maintenant :) Mais cela nécessite également une configuration manuelle pour chaque utilisateur. Ce qui est inacceptable, car les utilisateurs vont oublier de le configurer.
Mon plan est de le configurer par utilisateur en utilisant un script d’ouverture de session unique. Je fais déjà certaines choses via des scripts runonce-logon, donc l'installation d'un tel script ne pose pas de problème. Mais je ne sais pas comment configurer l'historique des fichiers via un script.
J'ai essayé quelques recherches, mais le seul outil officiel que j'ai trouvé (il y a des découvertes non officielles, voir les captures d'écran ci-dessous) est FhManagew.exe , qui supprime les anciennes versions des fichiers. Et je dois d'abord le configurer via l'interface graphique. Sur le lien, il y a une API complète, et apparemment, l'historique des fichiers peut être configuré via cette API. Mais je suppose que ceci est une API pour les applications .NET, elle ne peut donc pas être utilisée via une ligne de commande. Ou peut-il?
Essayé recherche dans le registre, mais l'emplacement de l'historique des fichiers ne se trouve nulle part :(
Pour plus de détails, supposons que je souhaite configurer l’historique des fichiers \\localhost\FileHistory$
et conserver la version des fichiers jusqu’à ce que l’espace disponible soit suffisant (par défaut, cette information est conservée indéfiniment). Voici à quoi cela devrait ressembler:
Pour référence: la sauvegarde sur un partage local est une solution de contournement qui permet à l’historique des fichiers de fonctionner sur un seul disque dur, sinon, il affirme qu’il est dangereux.
Voici ce que j’ai trouvé via les commentaires: la configuration est stockée dans des fichiers xml dans %LocalAppData%\Microsoft\Windows\FileHistory\Configuration
. Il est référencé dans la clé de registre HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\fhsvc\Parameters\Configs
avec la valeur nom = chemin du dossier de configuration (comme ci-dessus) et la valeur data = REG_DWORD:1
.
Mais le simple fait d'ajouter ces fichiers et ces valeurs de registre et de démarrer le service ( il existe un script ) ne démarre pas les sauvegardes, aucune configuration n'est mise à jour dans le Panneau de configuration. Toutefois, si l'historique des fichiers est déjà configuré, les mises à jour des fichiers XML sont reflétées dans le panneau de configuration.
la source
Réponses:
Malheureusement, l’API n’est pas très simple à utiliser - la plupart des appels pertinents sont destinés à un objet COM qui n’est pas implémenté
IDispatch
. Il serait donc extrêmement difficile et fastidieux d’appeler ces fonctions à partir de PowerShell. Ce sont les appels que nous devons faire:CoCreateInstance
pour obtenir l'FhConfigMgr
objetIFhConfigMgr::CreateDefaultConfiguration
pour créer la configuration ou remplacer une ancienneIFhConfigMgr::ProvisionAndSetNewTarget
définir le dossier cible de la sauvegardeIFhConfigMgr::SetLocalPolicy
définir la stratégie pour supprimer uniquement lorsque l'espace est nécessaireIFhConfigMgr::SetBackupStatus
activer l'historique des fichiersIFhConfigMgr::SaveConfiguration
commettre les changementsFhServiceOpenPipe
obtenir une poignée du service d'historique de fichiersFhServiceReloadConfiguration
dire au service de recharger ses paramètresFhServiceClosePipe
fermer la poignée du servicePour appeler toutes ces fonctions, nous pouvons utiliser mon application open-source SprintDLL . J'ai écrit ce script pour vous, commenté avec des équivalents en faux-C ++ de chaque section:
J'ai obtenu les ID de champ VTable à partir des positions des fonctions dans l'interface COM de style C pour l'objet COM du gestionnaire d'historique des fichiers. Si le script réussit, il indiquera que chaque fonction renvoie zéro.
Pour utiliser le script, enregistrez-le dans un fichier, par exemple
filehistory.sprint
. Vous pouvez ensuite l'exécuter à partir d'un fichier de commandes comme ceci:Si vous effectuez un déploiement sur le réseau, vous voudrez peut-être inclure une commande qui copie d'abord l'utilitaire et le script sur la machine locale.
la source