Auteur de questions
lister un ensemble de disque numeroté

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.
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.
- Modifié Dardenne LaurentMVP, Moderator mercredi 4 juin 2014 14:07 coquille
-
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
-
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.
-
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.
- Modifié Dardenne LaurentMVP, Moderator jeudi 5 juin 2014 09:57 Coquille