none
lister un ensemble de disque numeroté RRS feed

  • Question

  • Bonjour à tous,

    Dans le cadre de la migration de mon entreprise de Windows XP a Windows 7, je dois créer un script pour automatiser la création de ressource partagé.

    Pour cela je cherche a lister les disques présent sur une série de serveur par des numéros. Voici déjà le début de ce que j'ai créer:

    ## Variables a definir
    
    # Serveur a auditer
    $SERVER_TOULOUSE= "SERVER01","SERVEUR02"
    $SERVER_CANNE= "SERVER101","SERVEUR102"
    # Exclusion de certaines disques (syntaxe du type \\serveur\lettre -
    $EXCLUSION_DISK="\\SERVEUR01\E|\\SERVEUR01\J|
    # Executable NetShareEnum.exe
    $NETSHAREENUM="D:\Outils\NetShareEnum\NetShareEnum.exe"
    
    # Chemin vers binaire icacls.exe
    $ICACLS="D:\Outils\icacls\icacls.exe"
    
    # Repertoire contenant les outils de Quota Server
    $REP_QUOTA="D:\outils\QS\"
    
    ## Fin des variables a finir
    
    # Repertoire temporaire
    $REP_TEMP= "D:\outils"
    
    # Se deplace dans un repertoire local car certains exe n'aiment pas les chemin UNC
    cd $REP_TEMP
    
    # Recuperation du nom de la ressource a creer
    # Fonction Lecture_ressource
    function Lecture_ressource {
    	Write-Host "Entrez le nom de la ressource a creer (sans espace et sans caractere speciaux) : "
    	read-host RESSOURCE
    }
    
    # On demande de l'utilisateur de dire si la ressource doit etre sur Toulouse ou canne
    
    Function choix_site() {
    Write-Host "1 - Toulouse"
    Write-Host "2 - Canne"
    	read-host site
        
      if (site = 1)
      { 
      ressource_toulouse
      }  
      write-host "Numero Invalide"
      choix_site
      
      function ressource_toulouse
      {
       #NUM a 0 pour l'incrementation des disques
    	$SERVER_DISK=""
    	$NUM=0
    $colDisks = get-wmiobject Win32_LogicalDisk -computername $SERVER_TOULOUSE -Filter “DriveType ='3'" | Where-Object -FilterScript {$_.Size -ne $null} | Where-Object -FilterScript {$_.DeviceID[0] -ne $EXCLUSION_DISK}
        }
    function ressource_canne
    {
    #NUM a 0 pour l'incrementation des disques
    	$SERVER_DISK=""
    	$NUM=0
    $colDisks = get-wmiobject Win32_LogicalDisk -computername $SERVER_CANNE -Filter “DriveType ='3'" | Where-Object -FilterScript {$_.Size -ne $null} | Where-Object -FilterScript {$_.DeviceID[0] -ne $EXCLUSION_DISK}
        }
        
    Mon soucis est que la fonction n’incrémente pas les disques qui trouve.Deplus mon niveau Powershell est encore au niveau débutant, mais j’apprends assez vite.

    mercredi 4 juin 2014 12:01

Toutes les réponses

  • Bonjour,

    je ne vois pas d'instruction d'incrémentation de la variable $Num.

    Quel résultat souhaites-tu obtenir et pour en faire quoi ?


    Beatus, qui prodest, quibus potest.


    mercredi 4 juin 2014 13:57
    Modérateur
  • le problème est que justement je sais pas comment incrémenter la variable. La programmation est tout nouveau pour moi.

    je tente d'avoir un résultat du genre:

    Serveur01:

    1 - Disque H: taille total :700GO ; Taille Occupé : 600 Go; % libre: 10%

    2 - Disque I: taille total :700GO ; Taille Occupé : 500 Go; % libre: 80%

    Serveur02

    3 - Disque H: taille total :700GO ; Taille Occupé : 600 Go; % libre: 10%

    4 - Disque I: taille total :700GO ; Taille Occupé : 600 Go; % libre: 10%

    5 - Disque J: taille total :700GO ; Taille Occupé : 600 Go; % libre: 10%

    Une fois que l'on entre le chiffre qui correspond je doit créer le dossier dans le disque en question puis lancer une commande pour créer un Quota.

    Une fois cela effectué, je doit proposer la création de groupe AD en lecture ou lecture/ecriture en me basant sur le nom de la ressource et pouvoir ajouter des utilisateurs a ces groupes via leur login. mais ça c'est une autre partie du script que je doit réfléchir pour plus tard


    • Modifié Yoan NOEL mercredi 4 juin 2014 15:13
    mercredi 4 juin 2014 14:14
  • La programmation est tout nouveau pour moi.

    C'est un problème, il me semble, au vu de ce que tu veux réaliser.

    Le traitement de récupération des données ne pose pas de problème particulier (hormis, pour moi, la méconnaissance des spécifications et des sites ciblés).

    En revanche la construction de ton IHM...

    Un exemple de récupération de basée sur une hashtable :

      function Get-Ressource {
        function Get-Disk {
         param (
           [parameter(Position=1,Mandatory=$true)]
           [ValidateSet("Toulouse", "Canne")]
          [string] $Site,
           
           [parameter(Position=2,Mandatory=$true)]
           [ValidateNotNullOrEmpty()]
          [string[]]$Server,
           
           [parameter(Position=3,Mandatory=$true)]
           [ValidateNotNullOrEmpty()]
          [string]$Exclude
         )
           $HD.$Site=@{}
           $Server|
           Foreach {
             Get-WmiObject Win32_LogicalDisk -computername $Server -Filter "DriveType ='3'" | 
              Where-Object { 
                $Name="\\$Server\$($_.DeviceID[0])"
                ($_.Size -ne $null) -and ( $Name -NotMatch $Exclude) 
              }|
              Foreach {
                $Current=$_
                $ServerName=$Current.__Server
                if (-not $HD.$Site.ContainsKey($ServerName))
                { $HD.$Site."$ServerName"=@{} }
                $DeviceID=$Current.DeviceID[0]
                $HD.$Site.$ServerName."$DeviceID"= Select-Object -InputObject $Current -Property FreeSpace,Size,Libre
              }
           }
        }#Get-Disk
        
        $HD=@{}
        $EXCLUSION_DISK="^\\\\SERVEUR01\\E$|^\\\\SERVEUR01\\J$"
        Get-Disk -Site Canne -Server $SERVER_TOULOUSE -Exclude $EXCLUSION_DISK
        Get-Disk -Site Toulouse -Server $SERVER_CANNE -Exclude $EXCLUSION_DISK  
        Write-Output $HD
      }#Get-Ressource   
               
      $Ressource=Get-Ressource
       #Navigation dans la structure de donnée
      $Ressource.Canne.SERVER01.C


    Beatus, qui prodest, quibus potest.

    mercredi 4 juin 2014 15:28
    Modérateur
  • Après quelques tests la structure de données basée sur une hashtable n'est pas appropriée pour la construction de l'IHM.

    Un peu de rétropédalage afin d'utiliser un tableau d'objet :

      function Get-Ressource {
        function Get-Disk {
         param (
           [parameter(Position=1,Mandatory=$true)]             
           [ValidateSet("Toulouse", "Canne")]
          [string] $Site,
           
           [parameter(Position=2,Mandatory=$true)]
           [ValidateNotNullOrEmpty()]
          [string[]]$Server,
           
           [parameter(Position=3,Mandatory=$true)]
           [ValidateNotNullOrEmpty()]
          [string]$Exclude
         )
          Function New-DiskInfos{
           #from : http://powershell-scripting.com/index.php?option=com_joomlaboard&Itemid=76&func=view&id=15995&catid=14#15995
          param(
                   [Parameter(Mandatory=$True,position=0)]
                  $Site,
                   [Parameter(Mandatory=$True,position=1)]
                  $ServerName,
                   [Parameter(Mandatory=$True,position=2)]
                  $Drive,
                   [Parameter(Mandatory=$True,position=3)]
                  $FreeSpace,
                   [Parameter(Mandatory=$True,position=4)]
                  $Size,
                   [Parameter(Mandatory=$True,position=5)]
                  $Libre
          )
            #Les paramétres liés définissent aussi les propriétés de l'objet
           $O=New-Object PSObject -Property $PSBoundParameters
          
           $O.PsObject.TypeNames.Insert(0,"DiskInfos")
           $O
          
          }# New-DiskInfos
          
           $Server|
           Foreach {
             Get-WmiObject Win32_LogicalDisk -computername $_ -Filter "DriveType ='3'" | 
              Where-Object { 
                $Name="\\$Server\$($_.DeviceID[0])"
                ($_.Size -ne $null) -and ( $Name -NotMatch $Exclude) 
              }|
              Foreach {
                $Current=$_
                $ServerName=$Current.__Server
                $DeviceID=$Current.DeviceID[0]
                $Percentage=[Math]::Round(($Current.FreeSpace/$Current.Size)*100)
                New-DiskInfos $Site $ServerName $DeviceID $Current.FreeSpace $Current.Size $Percentage
              }
           }
        }#Get-Disk
        
        $EXCLUSION_DISK="^\\\\SERVEUR01\\E$|^\\\\SERVEUR01\\J$"
        Get-Disk -Site Toulouse -Server $SERVER_TOULOUSE -Exclude $EXCLUSION_DISK
        Get-Disk -Site Canne -Server $SERVER_CANNE -Exclude $EXCLUSION_DISK
      }#Get-Ressource   
               
      $Ressource=Get-Ressource
       #Regroupement par site et nom de serveur
      $Ressource|Group site,servername

    Ensuite la construction du menu :

      $i=0
      $Choices=$Ressource|group site|
       Foreach {
         #Site
         Write-host "`r`n$($_.Name)" -fore green
          #Serveur
          $_.group|group ServerName|
          Foreach {
           $CurrentServer=$_.Name
           Write-host "`t $CurrentServer" -fore Yellow
            #Disque
           $_.Group|
            Foreach {
             $i++
             "$i - $CurrentServer- $_"
            }
          }
       }
      $Choices += "Q - Quitter"
      
      $selection = Menu $Choices "Quel disque ?"
      $selection -match '^(?<Index>\d{1,}|^Q)'>$null
      $reponse=$matches.Index
      Write-Host "Selection de : $Reponse"
      if ($Reponse -ne 'Q')
      { $Ressource[$Reponse] }

    A valider :-)



    Beatus, qui prodest, quibus potest.


    mercredi 4 juin 2014 18:02
    Modérateur