Résolu Rendre des champs obligatoires

Plus d'informations
il y a 1 mois 1 semaine - il y a 1 mois 4 jours #33931 par Matthieu
Bonjour,
Toujours dans le développement de mon application de télédistribution, j'essaie de rendre les champs $textboxMachineName et $textboxFilePath obligatoires mais j'ai une erreur...
# Importation de la librairie
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

# Création de l'objet de formulaire
$form = New-Object System.Windows.Forms.Form
$form.Text = "Télédistribution"
$form.Size = New-Object System.Drawing.Size(600,230)
$form.StartPosition = "CenterScreen"

# Champ pour saisir le nom de la machine
$labelMachineName = New-Object System.Windows.Forms.Label
$labelMachineName.Text = "Nom de la machine ou adresse IP (*) :"
$labelMachineName.Location = New-Object System.Drawing.Point(10,20)
$labelMachineName.AutoSize="$true"
$form.Controls.Add($labelMachineName)

$textboxMachineName = New-Object System.Windows.Forms.TextBox
$textboxMachineName.Location = New-Object System.Drawing.Point(210,15)
$textboxMachineName.Width=360
$form.Controls.Add($textboxMachineName)

# Bouton pour parcourir et sélectionner le fichier MSI
$labelFilePath = New-Object System.Windows.Forms.Label
$labelFilePath.Text = "Fichier MSI (*) :"
$labelFilePath.Location = New-Object System.Drawing.Point(10,50)
$labelFilePath.AutoSize="$true"
$form.Controls.Add($labelFilePath)

$buttonBrowse = New-Object System.Windows.Forms.Button
$buttonBrowse.Text = "Parcourir"
$buttonBrowse.Location = New-Object System.Drawing.Point(210,45)
$buttonBrowse.Add_Click({
    $openFileDialog = New-Object System.Windows.Forms.OpenFileDialog
    $openFileDialog.Filter = "Fichiers MSI (*.msi)|*.msi|Tous les fichiers (*.*)|*.*"
    $openFileDialog.Title = "Sélectionnez un fichier MSI"

    if ($openFileDialog.ShowDialog() -eq 'OK') {
        $textboxFilePath.Text = $openFileDialog.FileName
    }
})
$form.Controls.Add($buttonBrowse)

$textboxFilePath = New-Object System.Windows.Forms.TextBox
$textboxFilePath.Location = New-Object System.Drawing.Point(210,75)
$textboxFilePath.Width=360
$textboxFilePath.ReadOnly = $true
$form.Controls.Add($textboxFilePath)

# Champ pour saisir des arguments du fichier MSI
$labelArgumentsMSI = New-Object System.Windows.Forms.Label
$labelArgumentsMSI.Text = "Arguments du fichier MSI:"
$labelArgumentsMSI.Location = New-Object System.Drawing.Point(10,110)
$labelArgumentsMSI.AutoSize="$True"
$form.Controls.Add($labelArgumentsMSI)

$textboxArgumentsMSI = New-Object System.Windows.Forms.TextBox
$textboxArgumentsMSI.Location = New-Object System.Drawing.Point(210,105)
$textboxArgumentsMSI.Width=360
$form.Controls.Add($textboxArgumentsMSI)

# Fonction pour la validation des champs
function ValiderChamps {
    if ($textboxMachineName.Text -eq "" -or $textboxFilePath.Text -eq "") {
        [System.Windows.Forms.MessageBox]::Show("Veuillez remplir tous les champs obligatoires.", "Erreur", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error)
    } else {

    }
}

# Bouton OK pour valider et fermer le formulaire
$buttonOK = New-Object System.Windows.Forms.Button
$buttonOK.Text = "Lancer la télédistribution"
$buttonOK.Location = New-Object System.Drawing.Point(410,145)
$buttonOK.AutoSize="$true"
$buttonOK.Add_Click({
    $Script:RemoteComputer = $textboxMachineName.Text
    $Script:FilePath = $textboxFilePath.Text
    $Script:argumentsMSI = $textboxArgumentsMSI.Text
    $form.Close()
    ValiderChamp
})
$form.Controls.Add($buttonOK)



# Affichage du formulaire
$form.ShowDialog() | Out-Null


# Vérifier si la liste des TrustedHosts existe
if (-not (Test-Path WSMan:\localhost\Client\TrustedHosts)) {
    # Si elle n'existe pas, la créer avec la machine $Script:RemoteComputer
    Set-Item WSMan:\localhost\Client\TrustedHosts -Value $Script:RemoteComputer -Force
} else {
    # Si elle existe, vérifier si elle est vide
    $currentTrustedHosts = (Get-Item WSMan:\localhost\Client\TrustedHosts).Value
    if (-not $currentTrustedHosts) {
        # Si elle est vide, ajouter la machine $Script:RemoteComputer
        Set-Item WSMan:\localhost\Client\TrustedHosts -Value $Script:RemoteComputer -Force
    } else {
        # Si elle n'est pas vide, vérifier si la machine $Script:RemoteComputer existe
        $hostsArray = $currentTrustedHosts -split ','
        if ($Script:RemoteComputer -notin $hostsArray) {
            # Si elle n'existe pas, ajouter la machine $Script:RemoteComputer à la suite des autres machines
            $newTrustedHosts = $currentTrustedHosts + "," + $Script:RemoteComputer
            Set-Item WSMan:\localhost\Client\TrustedHosts -Value $newTrustedHosts -Force
        }
        # Si elle existe, ne rien faire
    }
}


# Déclaration des détails du poste distant
$RemoteFolderPath = "\\$Script:RemoteComputer\c`$\Temp\"

# Vérifier si le dossier de destination existe, sinon le créer
if (-not (Test-Path $RemoteFolderPath -PathType Container)) {
    New-Item -Path $RemoteFolderPath -ItemType Directory | Out-Null
    Write-Host "Le dossier $RemoteFolderPath a été créé."
} else {
    Write-Host "Le dossier $RemoteFolderPath existe déjà."
}

# Copie du fichier à l'emplacement du poste distant
Copy-Item -Path $FilePath -Destination $RemoteFolderPath

# Suppression du site dans les TrustedHosts de WinRM
$listeTrustedHosts = (Get-Item WSMan:\localhost\Client\TrustedHosts).Value
$listeMiseAJour = $listeTrustedHosts -replace "$Script:RemoteComputer,", "" -replace ",$Script:RemoteComputer", "" -replace "$Script:RemoteComputer", ""
Set-Item WSMan:\localhost\Client\TrustedHosts -Value $listeMiseAJour -Force

Set-Item : WinRM ne peut pas traiter la demande de configuration. Le modèle de nom d’hôte n’est pas valide: «» Les modèles de noms d’hôte doivent contenir un ou plusieurs modèles. Un modèle 
ne peut contenir qu’un seul caractère générique («*»). Le modèle spécial «<local>» peut être utilisé pour indiquer tous les noms d’hôtes ne comportant pas un «.». Pour approuver tous les 
hôtes, utilisez «*» comme seul modèle. 
Au caractère Ligne:107 : 13
+             Set-Item WSMan:\localhost\Client\TrustedHosts -Value $new ...
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: ((: ) [Set-Item], InvalidOperationException
    + FullyQualifiedErrorId : System.InvalidOperationException,Microsoft.PowerShell.Commands.SetItemCommand
 
New-Item : Le chemin d'accès n'a pas une forme conforme.
Au caractère Ligne:119 : 5
+     New-Item -Path $RemoteFolderPath -ItemType Directory | Out-Null
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument : (\\\c$\Temp\:String) [New-Item], ArgumentException
    + FullyQualifiedErrorId : CreateDirectoryArgumentError,Microsoft.PowerShell.Commands.NewItemCommand
 
Le dossier \\\c$\Temp\ a été créé.
Copy-Item : Impossible de lier l'argument au paramètre « Path », car il s'agit d'une chaîne vide.
Au caractère Ligne:126 : 17
+ Copy-Item -Path $FilePath -Destination $RemoteFolderPath
+                 ~~~~~~~~~
    + CategoryInfo          : InvalidData : ((: ) [Copy-Item], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.PowerShell.Commands.CopyItemCommand
Dernière édition: il y a 1 mois 4 jours par Matthieu.

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

Plus d'informations
il y a 1 mois 5 jours #33959 par Fabien
Réponse de Fabien sur le sujet Rendre des champs obligatoires
Bonjour Matthieu,

Pour rendre obligation un texte dans une Textbox, tu peux dire que tant que les deux textbox sont vides, tu ne pourras pas cliquer sur le bouton.
Pour faire ça, il faut ajouter ça à ton script : 
#Désactivation du bouton
$buttonOK.Enabled = $False

#Action au changement de Texte
$textboxMachineName.add_TextChanged({

    #Si les deux Textbox sont vides, ne pas activer le bouton OK, sinon l'activer
    If($textboxMachineName.Text -eq '' -or $textboxFilePath.Text -eq '' ){
         $buttonOK.Enabled = $False
      }else{
          $buttonOK.Enabled = $true
      }
   })


#Action au changement de Texte
$textboxFilePath.add_TextChanged({
    
    #Si les deux Textbox sont vides, ne pas activer le bouton OK, sinon l'activer
    If($textboxFilePath.Text -eq '' -or $textboxMachineName.Text -eq ''){
         $buttonOK.Enabled = $False
      }else{
          $buttonOK.Enabled = $true
      }
   })

Fabien
Les utilisateur(s) suivant ont remercié: Matthieu

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

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