How to use a variable with New-PSDrive?

1.2k views Asked by At

I'm writing a small script to map and rename netword drives. I wanted to use variables (user input) in drive letter, but for some reason the script won't accept anything but static drive letters. Please help

$button_click_2 = { Remove-PSDrive -Name K -Force
                    New-PSDrive -Name $textBox -PSProvider FileSystem -Root "\\192.168.0.10\GRY" -Persist -Scope Global
                    $shell = New-Object -ComObject Shell.Application
                    $letter = -join($textBox,":")
                    $shell.NameSpace("$letter").Self.Name = "Test Oliego 3"
                    }


$textBox = New-Object System.Windows.Forms.TextBox
$textBox.Location = New-Object System.Drawing.Point(10,40)
$textBox.Size = New-Object System.Drawing.Size(240,20)
$form.Controls.Add($textBox)

$test_button = New-Object System.Windows.Forms.Button
$test_button.Location = New-Object System.Drawing.Size(200,420)
$test_button.Size = New-Object System.Drawing.Size (170,23)
$test_button.Text = "Mapowanie Dysku Sieciowego"
$test_button.Add_Click($button_click_2)

$form.Controls.AddRange(@($test_button,$textBox))

Error messeges as below

New-PSDrive : Cannot process the drive name because the drive name contains one or more of the following characters that are not valid: ; ~ / \ . : At C:\Users\Axel\Desktop\TESTY\Szmery Bajery.ps1:9 char:21 + ... New-PSDrive -Name $textBox -PSProvider FileSystem -Root " ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [New-PSDrive], PSArgumentException + FullyQualifiedErrorId : Argument,Microsoft.PowerShell.Commands.NewPSDriveCommand

The property 'Name' cannot be found on this object. Verify that the property exists and can be set.
At C:\Users\Axel\Desktop\TESTY\Szmery Bajery.ps1:12 char:21
+ ...               $shell.NameSpace("$letter").Self.Name = "Test Oliego 3"
+                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : PropertyNotFound
2

There are 2 answers

0
Nawad-sama On BEST ANSWER

For those inetrested. This is what I came Up with, and it works like a charm

$button_click_2 = { $letter = -join($textBox.Text,":")
                    Invoke-Expression "C:\Windows\System32\net.exe use $letter \\PATH /persistent:yes"            
                    $shell = New-Object -ComObject Shell.Application
                    $shell.NameSpace("$letter").Self.Name = "Test Oliego 3"
                    }
3
Karolina Ochlik On

Persistent drives MUST be named with letter.

-Name parameter is described: Specifies a name for the new drive. For persistent mapped network drives, use a drive letter. For temporary PowerShell drives, you aren't limited to drive letters, use any valid string.

Check -Persist parameter here https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/new-psdrive?view=powershell-5.1#parameters