Question New-Item Elément existant

Plus d'informations
il y a 11 ans 1 mois #18944 par Pierre22
Bonjour,

Je débute avec PowerShell,

Je possède une textbox et un bouton Créer.
L'utilisateur rentre le nom d'un client et cela créer un dossier.

Cependant, je rencontre le message d'erreur suivant :

ERROR: New-Item : L'élément du nom spécifié \\192.168.1.1\Test\ existe déjà.

Voici le morceau du code qui pose soucis :

#Boutton Créer un nouveau Client

[code:1] $boutton_NouveauClient = new-object System.Windows.Forms.Button
$boutton_NouveauClient.Text = 'Créer un Nouveau Client'
$boutton_NouveauClient.Location = new-object System.Drawing.Size(200, 155)
$boutton_NouveauClient.size = new-object System.Drawing.Size(120, 30)
$Resultat_Textbox = [string]$TextBox_NouveauClient.text

# Chemin du repertoire reseau
$Chemin = \"\\192.168.1.1\Test\\"
$boutton_NouveauClient.add_Click({ New-Item -name $Resultat_Textbox -itemtype directory -Path $Chemin })

#
[/code:1]

QUand j'effectue un Test-path, il me retourne True
Si je remplace la variable $Resultat_TextBox alors il me créer le dossier.

Je n'arrive pas à trouver ce qui gêne.

Merci par avance

Pierre

Message édité par: Pierre22, à: 5/02/15 16:29<br><br>Message édité par: Pierre22, à: 5/02/15 16:29

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

Plus d'informations
il y a 11 ans 1 mois #18946 par Laurent Dardenne
Salut,
Pierre22 écrit:

Je n'arrive pas à trouver ce qui gêne.

Peut être un manque de contrôle de validité du nom :
[code:1]
$Chemin = \&quot;C:\Temp\\&quot;
New-Item -name '' -itemtype directory -Path $Chemin
[/code:1]<br><br>Message édité par: Laurent Dardenne, à: 5/02/15 16:38

Tutoriels PowerShell

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

Plus d'informations
il y a 11 ans 1 mois #18949 par Pierre22
Réponse de Pierre22 sur le sujet Re:New-Item Elément existant
Merci pour votre réponse.

J'entre bien une série de Lettre simple comme \&quot;Dossier\&quot; mais il refuse de prendre en compte le contenue de la variable.

Exemple :

[code:1]# Nouveau CLIENT
#
# TextBox
$TextBox_NouveauClient = new-object System.Windows.Forms.textbox
$TextBox_NouveauClient.Location = new-object System.Drawing.Size(220, 255)
$TextBox_NouveauClient.size = new-object System.Drawing.Size(120, 30)

#Boutton Créer un nouveau Client

$boutton_NouveauClient = new-object System.Windows.Forms.Button
$boutton_NouveauClient.Text = 'Créer un Nouveau Client'
$boutton_NouveauClient.Location = new-object System.Drawing.Size(200, 155)
$boutton_NouveauClient.size = new-object System.Drawing.Size(120, 30)
$Resultat_Textbox = [string]$TextBox_NouveauClient.text

# Chemin du repertoire reseau
$Chemin = \&quot;\\192.168.1.1\Test\\&quot;
$boutton_NouveauClient.add_Click({ New-Item -name $Resultat_Textbox -itemtype directory -Path $Chemin })[/code:1]

Si je remplace la variable $Resultat_Textbox par le nom Dossier alors il me créer bien un dossier nommée Dossier mais si j'entre dans ma TextBox : Laurent alors là il me créer pas le dossier nommée \&quot;Laurent\&quot; je sais pas si je suis précis dans mes explications.

Merci<br><br>Message édité par: Pierre22, à: 5/02/15 17:03

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

Plus d'informations
il y a 11 ans 1 mois #18952 par Laurent Dardenne
Pierre22 écrit:

je sais pas si je suis précis dans mes explications.

On va faire avec :)
Comme je n'ai pas le code pour tester, un autre pb a vérifier est la portée de la variable.
Essaie en modifiant chaque occurrence de $Resultat_Textbox par $script:Resultat_Textbox

Tutoriels PowerShell

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

Plus d'informations
il y a 11 ans 1 mois #18958 par Pierre22
Réponse de Pierre22 sur le sujet Re:New-Item Elément existant
Bonjour,

Je débute et j'essai de comprendre en piochant à droite et à gauche mais dur dur..

Voici l'ensemble du code

[code:1]

function OnApplicationLoad {
#Note: This function is not called in Projects
#Note: This function runs before the form is created
#Note: To get the script directory in the Packager use: Split-Path $hostinvocation.MyCommand.path
#Note: To get the console output in the Packager (Windows Mode) use: $ConsoleOutput (Type: System.Collections.ArrayList)
#Important: Form controls cannot be accessed in this function
#TODO: Add modules and custom code to validate the application load

return $true #return true for success or false for failure
}


function OnApplicationExit {
#Note: This function is not called in Projects
#Note: This function runs after the form is closed
#TODO: Add custom code to clean up and unload modules when the application exits

$script:ExitCode = 0 #Set the exit code for the Packager
}



function OnApplicationLoad
{
#Note: This function is not called in Projects
#Note: This function runs before the form is created
#Note: To get the script directory in the Packager use: Split-Path $hostinvocation.MyCommand.path
#Note: To get the console output in the Packager (Windows Mode) use: $ConsoleOutput (Type: System.Collections.ArrayList)
#Important: Form controls cannot be accessed in this function
#TODO: Add modules and custom code to validate the application load

return $true #return true for success or false for failure
}


function OnApplicationExit
{
#Note: This function is not called in Projects
#Note: This function runs after the form is closed
#TODO: Add custom code to clean up and unload modules when the application exits

$script:ExitCode = 0 #Set the exit code for the Packager
}

$form1_Load = {
#TODO: Initialize Form Controls here

#TODO: Initialize Form Controls here
[void][System.Reflection.Assembly]::LoadWithPartialName(\&quot;System.windows.forms\&quot;«»)

$form = new-object Windows.Forms.form
$form.Size = new-object System.Drawing.Size @(480, 400)
$form.text = \&quot;Script Création d'affaire\&quot;

#Boutton Valider
$boutton_Valider = new-object System.Windows.Forms.Button
$boutton_Valider.Text = 'Valider'
$boutton_Valider.Location = new-object System.Drawing.Size(300, 155)
$boutton_Valider.size = new-object System.Drawing.Size(120, 30)
$boutton_Valider.add_Click({ $nom = $listbox.get_selecteditem(); $label2.text = \&quot;Reponse : \&quot; + $nom2 })


# Nouveau CLIENT
#
# La TextBox
$TextBox_NouveauClient = new-object System.Windows.Forms.textbox
$TextBox_NouveauClient.Location = new-object System.Drawing.Size(220, 255)
$TextBox_NouveauClient.size = new-object System.Drawing.Size(120, 30)

#Boutton Créer un nouveau Client
$boutton_NouveauClient = new-object System.Windows.Forms.Button
$boutton_NouveauClient.Text = 'Créer un Nouveau Client'
$boutton_NouveauClient.Location = new-object System.Drawing.Size(200, 155)
$boutton_NouveauClient.size = new-object System.Drawing.Size(120, 30)
#$Resultat_Textbox = [string]$TextBox_NouveauClient.text
$script:Resultat_Textbox = [string]$TextBox_NouveauClient.text

# Chemin du repertoire reseau
#J'ai l'impression qu'il veux pas récupérer le contenue de Resultat_Textbox.... Il me dit que l'élément existe déjà..ERROR: New-Item : L'élément du nom spécifié C:\Temp\ existe déjà.ERROR: + $boutton_NouveauClient.add_Click({ New-Item &lt;&lt;&lt;&lt; -name $script:Resultat_Textbox -itemtype directory -Path $Chemin })


$Chemin = \&quot;C:\Temp\\&quot;
$boutton_NouveauClient.add_Click({ New-Item -name $script:Resultat_Textbox -itemtype directory -Path $Chemin })

#
# Création des Répertoires à l'intérieur du client et selon le numéro d'affaire
#

$label_NouveauClient = New-Object System.Windows.Forms.Label
$label_NouveauClient.Text = 'Crée un compte Client'
$label_NouveauClient.Location = new-object System.Drawing.Size(2000, 255)
$label_NouveauClient.size = new-object System.Drawing.Size(180, 20)


$boutton1 = new-object System.Windows.Forms.Button
$boutton1.Text = 'Valggider'
$boutton1.Location = new-object System.Drawing.Size(550, 180)
$boutton1.size = new-object System.Drawing.Size(150, 80)


$label2 = New-Object System.Windows.Forms.Label
$label2.Location = new-object System.Drawing.Size(310, 220)
$label2.size = new-object System.Drawing.Size(180, 20)

$listbox = new-object System.Windows.Forms.ListBox


# Chemin du repertoire reseau
$Chemin = \&quot;C:\Temp\\&quot;


# Requete pour afficher les dossiers dans la listebox
$listrep = Get-ChildItem -Path $chemin -Name
foreach ($repertoire in $listrep)
{
[void]$listbox.Items.add($repertoire)
}


# Taille et dimmension de la listbox
$listbox.Location = new-object System.Drawing.Size(50, 75)
$listbox.size = new-object System.Drawing.Size(200, 200)



$form.Controls.Add($TextBox_Num_Aff)
$form.Controls.Add($boutton_NouveauClient)
$form.Controls.Add($TextBox_NouveauClient)
$form.Controls.Add($Label_NouveauClient)
$form.Controls.Add($boutton1)
$form.Controls.Add($boutton_Valider)
$form.Controls.Add($listbox)
$form.Controls.Add($label)
$form.Controls.Add($label2)
$form.Controls.Add($Label_Num_Aff)



$Form.Add_Shown({ $form.Activate() })
[void]$form.showdialog()
}[/code:1]

Pour l'instant, je regarde pas la mise en forme, je cherche juste à faire marché et comprendre.

Merci

Message édité par: Pierre22, à: 6/02/15 10:37

Message édité par: Pierre22, à: 6/02/15 10:42

Message édité par: Pierre22, à: 6/02/15 10:43

Message édité par: Pierre22, à: 6/02/15 10:43

Message édité par: Pierre22, à: 6/02/15 10:44

Message édité par: Pierre22, à: 6/02/15 10:45

Message édité par: Pierre22, à: 6/02/15 10:47

Message édité par: Pierre22, à: 6/02/15 10:48<br><br>Message édité par: Pierre22, à: 6/02/15 10:49

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

Plus d'informations
il y a 11 ans 1 mois #18959 par Laurent Dardenne
Pierre22 écrit:

Je débute et j'essai de comprendre en piochant à droite et à gauche mais dur dur..

Dans ce cas test chaque élément simplement, ensuite implémente le dans ton script final.
Là ton IHM est en vrac et manque de contrôles :pinch:
J'ai l'impression que tu la codes sans Designer...

Une solution :
[code:1]
$boutton_NouveauClient.size = new-object System.Drawing.Size(120, 30)

# Chemin du repertoire reseau
$Chemin = \&quot;C:\Temp\\&quot;

Function OnClick_btnNouveauClient {
$script:Resultat_Textbox = [string]$TextBox_NouveauClient.text
#$DebugPreference='Continue'
#Write-Debug $TextBox_NouveauClient.Text
New-Item -name $TextBox_NouveauClient.Text -itemtype directory -Path $Chemin
}
$boutton_NouveauClient.add_Click( {OnClick_btnNouveauClient})
[/code:1]
La variable $script:Resultat_Textbox est accessible dans le script et en fin d'exécution du scriptbloc.

La fonction permet d'organiser le code et de la modifier sans toucher au reste du script.

Tutoriels PowerShell

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

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