Partage
  • Partager sur Facebook
  • Partager sur Twitter

Vssadmin et c#

Sujet résolu
    27 février 2019 à 16:20:03

    Bonjour à tous,

    Je me remet à vous après de nombreuses recherches infructueuses. J'ai pour mon travail une tâche que l'ont fait régulièrement, c'est ce qu'on appelle les tâches de maintenance. Au vue du nombre de postes, j'ai décidé de créer un script qui fait en partie une bonne partie du travail.

    Mon script est entièrement fonctionnel, la seule chose qui loupe on va dire, c'est une partie pour le point de restauration.

    En gros, on doit allouer 15% minimum du disque dur pour les points de restaurations. J'avais fait un script bat qui fonctionnait à merveille, mais j'ai décidé de passer sur du c# afin d'avoir plus d'options pour d'autres mission. Je voulais reprendre une partie du code de mon bat :

    vssadmin.exe list shadowstorage /on=C:"^|FINDSTR maximal

    Je récupérais les informations du C: et uniquement la ligne qui m'intéressait. Je faisais un traitement derrière pour déterminer le % et effectuer les actions nécessaires (resize au cas ou et création du point).

    Par soucis de test, puisque ça ne fonctionne pas, j'ai du changer mon code pour voir ce qui se passait dans la fenêtre. Voici mon code, et voici le résultat :

    var processInfo = new ProcessStartInfo("cmd.exe");
    processInfo.Arguments = "/k vssadmin";
    processInfo.Verb = "runas";
    var process = Process.Start(processInfo);

    'vssadmin' n’est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commandes.

    J'ai essayé en indiquant le chemin complet de vssadmin, problème identique. Je commence à peiner. Qui peut m'aider ? 

    Merci d'avance de votre aide. 

    • Partager sur Facebook
    • Partager sur Twitter
      27 février 2019 à 16:48:26

      C#, c'est du .NET, donc pas des scripts mais des programmes.

      C'est pas directement adapté aux tâches d'administration.

      Je vous conseille de vous pencher sur le PowerShell pour avoir le meilleur des 2 mondes.

      Sinon, votre code de test, il est chelou avec son "processInfo.Verb" des enfers.

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        27 février 2019 à 17:33:01

        Bonjour.

        C'est pas adapté, mais c'est une solution que j'ai trouvé. Je pensais pouvoir mettre du batch dans du c#, ce qui aurait simplifier les choses puisque en sois, c'est faisable.

        Concernant le ""processInfo.Verb" des enfers", ça permet de lancer cmd en Administrateur, sinon il ne se lance pas en administrateur. C'est peut être pas la meilleur solution, mais c'est une des solutions qui existent. 

        Donc je vais voir pour me pencher aussi sur du powershell...

        • Partager sur Facebook
        • Partager sur Twitter
          27 février 2019 à 18:55:34

          >mais c'est une solution que j'ai trouvé.

          Il ne faut jamais s'arrêter à la première solution trouvée et encore moins quand on ne connait ni les tenant et les aboutissants.

          >ça permet de lancer cmd en Administrateur

          Relisez la documentation.

          https://docs.microsoft.com/fr-fr/dotnet/api/system.diagnostics.processstartinfo.verb?view=netframework-4.7.2

          Si cela fait cela sur votre machine de Dev, rien n'est garanti sur une machine "lambda".

          Le caractère "Administrateur" est transitif, le plus simple et fiable, c'est que le programme "de départ" soit lancé en mode Administrateur.

          L'utilisation du manifeste est le plus simple. Voir l'exemple d'utilisation de"processInfo.Verb" où vous avez oublié une pelleté de condition et de raffinement :

          https://stackoverflow.com/questions/2532769/how-to-start-a-process-as-administrator-mode-in-c-sharp

          Comme vous n'avez pas assez, semble-t-il, d'expérience en C# et que vous n'avez même pas évalué la solution PowerShell, je pense qu'on va attendre votre épiphanie. ;)

          • Partager sur Facebook
          • Partager sur Twitter
          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
            28 février 2019 à 19:07:59

            Bonsoir.

            Je lis, et je comprends. Je ne reste pas buté. C'est une solution que j'ai trouvé, mais ce n'est pas la dernière solution. Effectivement, comme tout code et application, ça peut marcher sur une machine comme ça ne peut pas marcher sur une autre machine. 

            En tout état de cause, ma question première n'est pas le caractère administrateur, mais un caractère qui touche un fichier qui s'appelle "vssadmin" qui me permet de redéfinir le système de protection. C'est la question de base. 

            > Il ne faut jamais s'arrêter à la première solution trouvée et encore moins quand on ne connait ni les tenant et les aboutissants.

            Exact, et je suis tout à fait d'accord. Encore une fois, cette fameuse solution permettait l'action voulue, c'est à dire de passer mon script en mode Administrateur afin de pouvoir faire fonctionner mon vssadmin dans de bonnes conditions. 

            Concernant votre lien, je l'ai lu, je l'ai compris. Les oublies sont fait exprès, puisque ce n'est pas nécessaire pour expliquer mon problème.

            Pour le powershell > "vous n'avez même pas évalué la solution powershell" Je suis au regret de vous dire que j'ai regardé la solution de powershell, MAIS n'ayant jamais pratiqué le powershell, ou peu, je ne peux intégrer cette solution alors que la solution en batch fonctionne.

            Cependant, si vous avez des idées, je suis preneur. Ce n'est pas le but d'un forum ? Je ne demande pas de solution maché, ce n'est pas le but. Je demande juste une aide sur le pourquoi du comment. 

            Mais je voies que vous vous pensez supérieur par rapport à vos propos, je n'attends pas de direction de votre part.

            Et je passe en résolu parce que j'ai trouvé.

            -
            Edité par Vort 28 février 2019 à 19:28:13

            • Partager sur Facebook
            • Partager sur Twitter
              1 mars 2019 à 9:28:56

              >Je lis, et je comprends. Je ne reste pas buté.

              Pas pire aveugle que celui qui ne veut pas voir.

              PowerShell a été conçu pour étendre les .bat, DE BASE !!!

              Et vous comptez vous démerder comment avec les pipes ?

              :colere2::euh:

              >alors que la solution en batch fonctionne.

              Alors, pourquoi faire une usine à gaz avec ce code tout moisi ???

              Bon, vous voulez lancer "Vssadmin.exe", le plus simple, c'est de mettre le chemin absolu (avec des / et pas des \) en argument du constructeur de ProcessStartInfo. Si c'est bien un "programme console", il créera automatiquement sa console.

              Mettez les arguments ("list shadowstorage /on=C:\"^" dans le champ Arguments de votre objet de type ProcessStartInfo.

              Après, il reste le pipe, et là, relisez la documentation de de PowerShell et admettez que vous vous êtes complètement fourvoyé.

              Errare humanum est, perseverare diabolicum ;)

              • Partager sur Facebook
              • Partager sur Twitter
              Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

              Vssadmin et c#

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown