Question [Résolu]choisir le répertoire à analyser

Plus d'informations
il y a 10 ans 11 mois #19899 par Axel
bonjour, alors mon code consiste à détecter les doublons, je lance le bout de programme depuis ma console suivant le répertoire ou je suis, et j'aimerais donc dans mon programme faire une sorte de question qui s'affiche exemple :

Indiquez le répertoire ou vous voulez analyser les fichiers : \"C:\temp\\"

puis le prog analyse

comme ça je peux lancer le prog depuis la console sans avoir à changer de répertoire à chaque fois

voici mon code :

[code:1]#conversion KiloOctet
$taille = 10kb

#recherche des fichiers par rapport à la taille
$files = gci * -recurse -force |
where-object {$_.length -gt $taille}

#création
$doublons = $files |
sort-object length |
group-object length |
where-object {$_.count -gt 1}

function Clear-KeyboardBuffer {
while ($Host.UI.RawUI.KeyAvailable)
{ $null = $Host.UI.RawUI.ReadKey(\"NoEcho,IncludeKeyDown,IncludeKeyUp\"«»)}
}

function YesNo{
param(
$Caption,
$Message,
[ValidateSet(\"Yes\",\"No\"«»)]
$DefaultChoice=\"No\"
)
Clear-KeyboardBuffer
$Yes = New-Object System.Management.Automation.Host.ChoiceDescription \"&Yes\"
$No = New-Object System.Management.Automation.Host.ChoiceDescription \"&No\"
$Choices = [System.Management.Automation.Host.ChoiceDescription[]]($Yes,$No)
$Host.UI.PromptForChoice($Caption,$Message,$Choices,([byte]($DefaultChoice -eq \"no\"«»)))
}

function Get-FileHash {
[CmdletBinding()]
Param(
[Parameter(Position=0,Mandatory=$true, ValueFromPipelineByPropertyName=$true,ValueFromPipeline=$True)]
[Alias(\"PSPath\",\"FullName\"«»)]
[string[]]$Path,
[Parameter(Position=1)]
[ValidateSet(\"MD5\"«»)]
[string[]]$Algorithm = \"MD5\"
)
Process {
ForEach ($item in $Path) {
$item = (Resolve-Path $item).ProviderPath
If (-Not ([uri]$item).IsAbsoluteUri) {
Write-Verbose (\"{0} is not a full path, using current directory: {1}\" -f $item,$pwd)
$item = (Join-Path $pwd ($item -replace \"\.\\\",\"\"«»))
}
If(Test-Path $item -Type Container) {
Write-Warning (\"Cannot calculate hash for directory: {0}\" -f $item)
Return
}
$object = New-Object PSObject -Property @{
Path = $item
}
#Ouverture \"stream\"
$stream = ([IO.StreamReader]$item).BaseStream
foreach ($Type in $Algorithm) {
[string]$hash = -join ([Security.Cryptography.HashAlgorithm]::Create( $Type ).ComputeHash( $stream ) |
ForEach {\"{0:«»x0}\" -f $_ })
$null = $stream.Seek(0,0)
$object = Add-Member -InputObject $Object -MemberType NoteProperty -Name $Type -Value $Hash -PassThru
}
$object.pstypenames.insert(0,'System.IO.FileInfo.Hash')
#Sortie du Hash et du chemin
Write-Output $object

#Fermeture \"stream\"
$stream.Close()
}
}
}

function new-rapport {
param($fichier)
#construit un nouvel objet à partir d'un objet fichier
#par défaut le résultat est émis dans le pipeline
select-object -inputobject $fichier -property 'Fullname','Length','MD5'
}

#affichage
#boucle sur la collection principale
$rapport = $doublons |
foreach-object {
#boucle sur la collection group de chaque doublon
$_.group |
foreach-object {
#boucle sur la collection de fichiers de chaque group

new-rapport -fichier $_

}#file
}#group

$i = 0
#calcul le nombre de fichiers trouvés
$rapport | foreach {
$i = $i + 1
}

$Yes = 0
$No = 1
$Choice = $No

if ($i -gt 1)
{
$Choice = YesNo -message \"`n$i fichier(s) trouvé(s), voulez-vous afficher leur MD5 ?\"
}
else
{
write-host \"`nIl n'y a pas de doublon`n\"
}

if ($Choice -eq $Yes)
{
$rapport | Get-FileHash
$Choice = YesNo -message \"`nVoulez-vous exporter les informations ?\"
if ($Choice -eq $Yes)
{
$rapport | Get-FileHash | export-csv C:\Temp\RapportFiles.csv
write-host \"Les informations ont été exportés dans le répertoire C:\Temp\ sous le nom de RapportFiles.csv\"
}
}[/code:1]<br><br>Message édité par: Harcide, à: 4/06/15 16:31

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 11 mois #19900 par Axel
Réponse de Axel sur le sujet Re:choisir le répertoire à analyser
grâce à laurent dardenne, j'utilise le principe de question/réponse oui/non mais je ne sais pas du tout comment mis prendre pour répondre à une question ou justement on ne peut pas répondre oui ou non

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 11 mois #19920 par Axel
Réponse de Axel sur le sujet Re:choisir le répertoire à analyser
résolu avec read-host j'imagine B)

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 11 mois #19921 par xyz
Réponse de xyz sur le sujet Re:choisir le répertoire à analyser
Je t'ai indiqué une autre approche ici , cf. sélectionner un répertoire.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 11 mois #19922 par Axel
Réponse de Axel sur le sujet Re:choisir le répertoire à analyser
oui merci

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.043 secondes
Propulsé par Kunena