question

Miguel-PSNewbie123 avatar image
0 Votes"
Miguel-PSNewbie123 asked MotoX80 answered

If the folder exist, show the following message

Hello Everyone,
I have one question. I don't understand what I am doing wrong, I wrote the following script to tell me if the folder exists to show a message, but it is now showing it.

 If (Test-Path -path ($LabServer + $CaseName) -PathType Container){
                 Add-Type -AssemblyName System.Windows.Forms
                 [System.Windows.Forms.MessageBox]::Show('Folder name exists, please enter a new name')

The script is supposed to create multiple folders in a specific location. I want to check if the folder name (Case Name) already exists, and if it does, do not create the folder with the same name, but the script continues and creates the folder and sub-folders.

Here is the full script.
Thank you for all your help

 # Load required assemblies
 [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
    
 # Drawing form and controls
 $CreateFolder = New-Object System.Windows.Forms.Form
     $CreateFolder.Text = "Create Multiple Custodian Folders"
     $CreateFolder.Size = New-Object System.Drawing.Size(350,415)
     $CreateFolder.FormBorderStyle = "FixedDialog"
     $CreateFolder.TopMost = $true
     $CreateFolder.MaximizeBox = $false
     $CreateFolder.MinimizeBox = $false
     $CreateFolder.ControlBox = $true
     $CreateFolder.StartPosition = "CenterScreen"
     $CreateFolder.Font = "Segoe UI"
    
    
 #======================== CASE NAME ========================#
 # adding a label to my form
 $label_message = New-Object System.Windows.Forms.Label
     $label_message.Location = New-Object System.Drawing.Size(20,8)
     $label_message.Size = New-Object System.Drawing.Size(100,15)
     $label_message.Text = "Case Name"
     $CreateFolder.Controls.Add($label_message)    
 # CaseName    
     $CaseName = New-Object System.Windows.Forms.TextBox
     $CaseName.Location = New-Object System.Drawing.Size(20,30)
     $CaseName.Size = New-Object System.Drawing.Size(300,25)
     $CaseName.ScrollBars = "Vertical"
     $CreateFolder.Controls.Add($CaseName)
    
    
 #======================== DROPBOX ========================#
 $label_messageCombobox = New-Object System.Windows.Forms.Label
     $label_messageCombobox.Location = New-Object System.Drawing.Size(20,60)
     $label_messageCombobox.Size = New-Object System.Drawing.Size(100,15)
     $label_messageCombobox.Text = "Pick a Server"
     $CreateFolder.Controls.Add($label_messageCombobox)    
    
 $DropdownBox = New-Object System.Windows.Forms.ComboBox
     $DropdownBox.Location = New-Object System.Drawing.Size(20,80)
     $DropdownBox.Size = New-Object System.Drawing.Size(300,15)
     $DropdownBox.Height = 200
     $Dropdownbox.DropDownStyle = "DropDownList"
     $CreateFolder.Controls.Add($DropdownBox)
        
     $Servers = @("Lab Machine 40","Lab Machine 45","Lab Machine 50","Lab Machine 55")
    
    
     foreach($Server in $Servers){
         $DropdownBox.Items.Add($Server) | Out-Null
     }
 #======================== FUNCTION TO GET SERVER ========================#
 Function Get-Server(){
     $SelectedServer = $DropdownBox.SelectedItem.ToString()
    
     if($SelectedServer -eq "Lab Machine 50") {
         $Script:LabServer = Set-Location "\\Server50\K$" -PassThru
     }
     elseif($SelectedServer -eq "Lab Machine 55") {
         $Script:LabServer = Set-Location "\\Server55\K$" -PassThru
     }
     elseif($SelectedServer -eq "Lab Machine 40") {
         $Script:LabServer = Set-Location "\\Server40\K$" -PassThru
     }
     elseif($SelectedServer -eq "Lab Machine 45") {
         $Script:LabServer = Set-Location "\\Server45\K$" -PassThru
     }
 }
    
 #======================== INPUTBOX ========================#
 $label_message2 = New-Object System.Windows.Forms.Label
     $label_message2.Location = New-Object System.Drawing.Size(20,110)
     $label_message2.Size = New-Object System.Drawing.Size(100,15)
     $label_message2.Text = "Custodian Names"
     $CreateFolder.Controls.Add($label_message2)    
        
 # Inputbox    
     $Inputbox = New-Object System.Windows.Forms.TextBox
     $Inputbox.Multiline = $True;
     $Inputbox.Location = New-Object System.Drawing.Size(20,130)
     $Inputbox.Size = New-Object System.Drawing.Size(300,200)
     $Inputbox.ScrollBars = "Vertical"
     $CreateFolder.Controls.Add($Inputbox)
    
  #======================== BUTTON ========================#   
 # add a button ti create folder
 $button_ClickMe = New-Object System.Windows.Forms.Button
     $button_ClickMe.Location = New-Object System.Drawing.Size(45,340)
     $button_ClickMe.Size = New-Object System.Drawing.Size(240,32)
     $button_ClickMe.TextAlign = "MiddleCenter"
     $button_ClickMe.Text = "Create Folders"
     $button_ClickMe.Add_Click({
        
     #$FolderExist =  $LabServer.Text + $CaseName.Text
    
     If ($CaseName.TextLength -eq 0){
         Add-Type -AssemblyName System.Windows.Forms
         [System.Windows.Forms.MessageBox]::Show('Please Enter a Case Name')
     }
     else {
         If (Test-Path -path ($LabServer + $CaseName) -PathType Container){
             Add-Type -AssemblyName System.Windows.Forms
             [System.Windows.Forms.MessageBox]::Show('Folder name exists, please enter a new name')
         }
         else {
             if ($Inputbox.TextLength -eq 0){
                 Add-Type -AssemblyName System.Windows.Forms
                 [System.Windows.Forms.MessageBox]::Show('Please enter 1 custodian name')
             }
             else {
                 Get-Server
                 Set-Location $LabServer
                 New-Item $CaseName.Text -type directory 
                 Start-Sleep -Seconds 5
                 Set-Location ($LabServer.Text + $CaseName.Text)
                 ForEach ($Folder in $Inputbox.lines) {
                     New-Item $Folder -type directory
                 }
                  Add-Type -AssemblyName System.Windows.Forms
                  [System.Windows.Forms.MessageBox]::Show('Folders were created')
                  [System.Windows.Forms.Application]::Exit()
                           
             }
         }
     }
    
  })
         
     $CreateFolder.Controls.Add($button_ClickMe)
    
 # show form
 $CreateFolder.Add_Shown({$CreateFolder.Activate()})
 [void] $CreateFolder.ShowDialog()




windows-server-powershell
5 |1600 characters needed characters left characters exceeded

Up to 10 attachments (including images) can be used with a maximum of 3.0 MiB each and 30.0 MiB total.

1 Answer

MotoX80 avatar image
0 Votes"
MotoX80 answered

If I got this right, casename is a textbox.

   $CaseName = New-Object System.Windows.Forms.TextBox

And labserver is a location.

  $Script:LabServer = Set-Location "\\Server50\K$" -PassThru

I get an error when try your code.

Method invocation failed because [System.Management.Automation.PathInfo] does not contain a method named 'op_Addition'.
At line:6 char:1
+ Test-Path -path ($LabServer + $CaseName) -PathType Container
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (op_Addition:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound


You can use Get-member to view methods and properties.

 "----casename----"
 $CaseName | Get-Member 
 "----labserver----"
 $LabServer | Get-Member

I got it working like this.

 $LabServer = Set-Location "c:\temp" -PassThru
 $CaseName = New-Object System.Windows.Forms.TextBox
 $CaseName.Text   = "foo2"
 "Testing {0}" -f ($LabServer.path + "\" + $CaseName.Text)
 Test-Path -path ($LabServer.path + "\" + $CaseName.Text) -PathType Container 








5 |1600 characters needed characters left characters exceeded

Up to 10 attachments (including images) can be used with a maximum of 3.0 MiB each and 30.0 MiB total.