Powershell/批处理网络映射驱动器

Powershell/批处理网络映射驱动器,powershell,batch-file,mapped-drive,Powershell,Batch File,Mapped Drive,我想要一个powershell/批处理脚本,该脚本将驱动器映射到一个免费信件上。或者测试字母,然后映射到一个免费的字母上 我相信还有比这更容易的事 $tab = @() $tab = @('A:', 'B:', 'C:', 'D:', 'E:', 'F:', 'G:', 'H:', 'I:', 'J:', 'K:', 'L:', 'M:', 'N:', 'O,:', 'P:', 'Q:', 'R:', 'S:', 'T:', 'U:', 'V:', 'W' ,'X:', 'Y:', 'Z')

我想要一个powershell/批处理脚本,该脚本将驱动器映射到一个免费信件上。或者测试字母,然后映射到一个免费的字母上

我相信还有比这更容易的事

$tab = @()

$tab = @('A:', 'B:', 'C:', 'D:', 'E:', 'F:', 'G:', 'H:', 'I:', 'J:', 'K:', 'L:', 'M:', 'N:', 'O,:', 'P:', 'Q:', 'R:', 'S:', 'T:', 'U:', 'V:', 'W' ,'X:', 'Y:', 'Z')

for($i = 0;$i -lt 26;$i++){

    if(net use $tab[$i] > $null){
        Write-Host $tab[$i] "`tExists"
    }
    else{
        Write-Host $tab[$i] "`tDoesn't exist"
    }
}
我需要我的PS脚本在.bat脚本中编写一些东西。因此,1)在我的PS脚本中找到自由字母,然后像这样将其写入.bat脚本

$freeletter |输出文件-附加…

或者2)my.bat脚本执行类似的操作:

Is G: free ?
   No Is H: free ?
        Yes : Map It -> $mapdrive_1 = "H:"
              Is I: free ?
                    No  Is J: Free ?
                              Yes : Map it -> $mapdrive_2 = "J:"

#Once it's done I got my ONLY 2 mapped drives
$mapdrive_1
$mapdrive_2

#then i can do
net use $mapdrive_1 "my\path1"
net use $mapdrive_2 "my\path1"
start robocopy $mapdrive_1 $mapdrive_2 /options
net use $mapdrive_1 /DELETE
net use $mapdrive_2 /DELETE

net use $mapdrive_1 "my\path2"
net use $mapdrive_2 "my\path2"
start robocopy $mapdrive_1 $mapdrive_2 /options
net use $mapdrive_1 /DELETE
net use $mapdrive_2 /DELETE
希望你明白我的意思:)

问候,


尼科。

这将输出所有的自由字母,然后您可以通过管道选择对象只获得第一个:

ls function:[a-z]: -name | where {-not (get-psdrive $_[0] -ea 0)}

这将输出所有自由字母,然后您可以通过管道选择对象以仅获取第一个:

ls function:[a-z]: -name | where {-not (get-psdrive $_[0] -ea 0)}
使用我在上一篇文章中使用的驱动器别名会使驱动器号变得无关紧要,如果由于某种原因驱动器号发生变化,这一点尤其方便


使用我在上一篇文章中使用的驱动器别名会使驱动器号变得无关紧要,如果由于某种原因驱动器号发生变化,这一点尤其方便。

这真是难以置信:D真是令人印象深刻!我刚刚找到了另一个解决方案,但是比你的^^^^要长得多,
Get PSDrive |?{$\u.Root-eq$drive+“:\”}
如果($list.Root-ne$drive+“:\”)和我的错误,我必须成批执行,因为批脚本将作为最后一个执行。一位同事告诉我,
net use*\my\path1/PERSISTENT:NO
将映射一个没有字母的驱动器,我将能够使用
net use*\my\path1/delete删除它
您能确认吗?:)谢谢@ShayLevy给你的聪明回答Nico。在*的情况下,我们会为你选择一个字母,但它不一定是第一个可用的字母。是的,如果我只是删除*它会安装一个临时驱动器,没有任何字母。非常感谢@Shaylevyth这真是难以置信:D真的令人印象深刻!我刚刚找到了另一个解决方案,但是比你的^^^^要长得多,
Get PSDrive |?{$\u.Root-eq$drive+“:\”}
如果($list.Root-ne$drive+“:\”)和我的错误,我必须成批执行,因为批脚本将作为最后一个执行。一位同事告诉我,
net use*\my\path1/PERSISTENT:NO
将映射一个没有字母的驱动器,我将能够使用
net use*\my\path1/delete删除它
您能确认吗?:)谢谢@ShayLevy给你的聪明回答Nico。在*的情况下,我们会为你选择一个字母,但它不一定是第一个可用的字母。是的,如果我只是删除*它会安装一个临时驱动器,没有任何字母。非常感谢@shaylevywhith cmd.exe,您可以使用net use
\\servername\share
这将使用第一个免费字母为您映射网络驱动器。Popd随后将删除它。使用cmd.exe,您可以使用net use
\\servername\share
这将使用第一个空闲字母为您映射网络驱动器。Popd将在之后移除它。