Main Area and Open Discussion > General Software Discussion
Simple network drivemapping utility
4wd:
UPDATED:
* Displays error message from NET command
* Can skip mappings by setting map# to empty string in .ini
* Clears an error message if no password was entered but then is entered (didn't before)
OK, a little Powershell implementation that's specific to the original request:
MapDrive:
Simple network drivemapping utility
Result:
Simple network drivemapping utility
If there's an error:
Simple network drivemapping utility
INSTALLATION:
Extract the archive to a folder.
Edit the MapDrives.ini for your drive mappings, the format is:
map#=<drive letter with : eg. E:>
unc#=\\server\path
Where # = zero based numbering for each pair of map/unc items
eg.
map0=
unc0=
map1=
unc1=
map2=
unc2=
etc, etc
See the included MapDrives.ini for an example.
NOTE: The first occurance of map/unc is special in that the username is added to the UNC path for the complete path, ie.
If the Username used for logging on is fred and the .ini contains:
map0=Y:
unc0=\\server01\users
Then drive Y: will be mapped to \\server01\users\fred
If you don't want this function, leave the map# parameter empty in the .ini file - leaving it empty will cause the script to skip that mapping entry, eg.
map0=
unc0=\\server01\users
It relies on the net.exe command for the drive mappings so Admin privileges might be required, (don't know - I only have single user Admin systems).
EXECUTION:
Double-click the included shortcut icon.
NOTE: It will remove ALL current drive mappings before creating the new ones.
DISCLAIMER: It works for me.
MapDrives.ps1
--- Code: PowerShell ---If($PSVersionTable.PSVersion.Major -lt 3) { (new-object -ComObject wscript.shell).Popup("Script requires Powershell V3",0,"OK") Exit} # Read MapDrives.ini fileGet-Content "MapDrives.ini" | foreach-object -begin {$h=@{}} -process { $k = [regex]::split($_,'='); ` if(($k[0].CompareTo("") -ne 0) -and ($k[0].StartsWith("[") -ne $True)) { $h.Add($k[0], $k[1]) } } Function Load-Dialog { Param( [Parameter(Mandatory=$True,Position=1)] [string]$XamlPath ) [xml]$Global:xmlWPF = Get-Content -Path $XamlPath #Add WPF and Windows Forms assemblies try{ Add-Type -AssemblyName PresentationCore,PresentationFramework,WindowsBase,system.windows.forms } catch { Throw "Failed to load Windows Presentation Framework assemblies." } #Create the XAML reader using a new XML node reader $Global:xamGUI = [Windows.Markup.XamlReader]::Load((new-object System.Xml.XmlNodeReader $xmlWPF)) #Create hooks to each named object in the XAML $xmlWPF.SelectNodes("//*[@Name]") | %{ Set-Variable -Name ($_.Name) -Value $xamGUI.FindName($_.Name) -Scope Global }} Function Remove-Maps {# Get all currently mapped drives $maps = (New-Object -Com WScript.Network).EnumNetworkDrives() $maps.Count() if ($maps.Count() -gt 0) { $Tb_Output.Text = "Remove mapped drives: "# Remove all current mappings for ($i = 0; $i -lt $maps.Count() - 1; $i = $i + 2) { (New-Object -Com WScript.Network).RemoveNetworkDrive($maps.Item($i)) } $Tb_Output.AppendText("Done`r") } else { $Tb_Output.Text = "No existing mapped drives`r" }} Function Map-Drives { for ($i = 0; $i -lt [Math]::Truncate($h.Count / 2); $i++) { $t1 = "map" + $i $t2 = "unc" + $i if ($h.Get_Item($t1) -ne "") { if ($i -eq 0) { $root = $h.Get_Item($t2) + "\" + $user } else { $root = $h.Get_Item($t2) } $Tb_Output.AppendText("Mapping " + $h.Get_Item($t1)) $cmd = "use " + $h.Get_Item($t1) + " " + $root + " " + $pass + " /user:" + $user $errfile = $env:TEMP + "\MapDrive.txt" $result = Start-Process -FilePath "net.exe" -ArgumentList $cmd -Wait -PassThru -WindowStyle Hidden -RedirectStandardError $errfile if ($result.ExitCode -ne 0) { Write-Host $result.StandardError Write-Host $result.StandardOutput $Tb_Output.AppendText(" Failed`r") $errtxt = Get-Content -Path $errfile $Tb_Output.AppendText("[" + $errtxt[2] + "]`r") Remove-Item $errfile -Force } else { $Tb_Output.AppendText(" Done`r") } } }} #Required to load the XAML form and create the PowerShell VariablesLoad-Dialog -XamlPath '.\MapDrives.xaml' #EVENT Handlers$Bt_Map.add_Click({ $Tb_Output.Clear() $global:user = "" $global:pass = "" if ($Tb_Username.Text -ne "") { $user = $Tb_Username.Text } if ($Pb_Password.Password -ne "") { $pass = $Pb_Password.Password } if (($user.Length -ne 0) -and ($pass.Length -ne 0)) { Remove-Maps Start-Sleep -Milliseconds 500 Map-Drives $Tb_Output.AppendText("Complete`r") } else { $Tb_Output.Text = ("Missing Username or Password`r") }}) $Tb_Username.Add_TextChanged({ $Tb_Output.Clear()}) $Pb_Password.Add_KeyDown({ $Tb_Output.Clear()}) #Launch the window$xamGUI.ShowDialog() | out-null
MapDrives.ini
--- Code: Text ---[General]map0=R:unc0=\\10.0.50.1\usersmap1=Y:unc1=\\10.0.50.1\Datamap2=X:unc2=\\10.1.51.12\itsmemap3=unc3=\\server01\clients
MapDrives.xaml (the interface definition)
--- Code: Text ---<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MapDrives" Height="217" Width="354" ResizeMode="NoResize"> <Grid> <TextBox Name="Tb_Username" HorizontalAlignment="Left" Height="23" Margin="87,17,0,0" VerticalAlignment="Top" Width="140" ToolTip="Enter your username" MaxLines="1"/> <Label Name="Lb_Username" Content="Username:" Margin="14,14,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" Width="68"/> <Label Name="Lb_password" Content="Password:" HorizontalAlignment="Left" Margin="14,42,0,0" VerticalAlignment="Top" Width="68"/> <PasswordBox Name="Pb_Password" ToolTip="Enter your password" HorizontalAlignment="Left" Margin="87,45,0,0" VerticalAlignment="Top" Width="140" Height="23"/> <Button Name="Bt_Map" Content="Map Drives" HorizontalAlignment="Left" Margin="232,30,0,0" VerticalAlignment="Top" Width="75"/> <TextBox Name="Tb_Output" HorizontalAlignment="Left" Height="101" Margin="87,73,0,0" VerticalAlignment="Top" Width="240" IsReadOnly="True" IsUndoEnabled="False" MaxLines="20" TextWrapping="Wrap" VerticalScrollBarVisibility="Auto"/> <Label Name="Lb_Output" Content="Output:" HorizontalAlignment="Left" Margin="14,109,0,0" VerticalAlignment="Top" Width="68"/> </Grid></Window>
Navigation
[0] Message Index
[*] Previous page
Go to full version