在PowerShell

时间:2015-05-06 14:38:01

标签: powershell network-drive

我想使用PowerShell脚本从系统中删除网络驱动器。

我需要按名称查找驱动器,因为命令$net.RemoveNetworkDrive('P:',1)需要驱动器号。

是否有命令在PowerShell中查找网络驱动器号?

我的剧本:

$Drive = "\\192.168.2.117\Blabla"
echo $Drive
cls
    if (((New-Object -Com WScript.Network).EnumNetworkDrives() | Where-Object {$_ -eq $Drive})) 
    {
       echo 'found Drive'
       #$net = $(New-Object -comobject WScript.Network)
       #$net.RemoveNetworkDrive('P:',1)
    } 
    else
    {
        echo 'Drive not there'
    }

3 个答案:

答案 0 :(得分:3)

< p>您可以尝试使用以下方法获取驱动器信息:< / p> < pre class =" lang-psh prettyprint-override">< code> $ Drive = Get-WmiObject -Class Win32_mappedLogicalDisk`          -filter" ProviderName =' \\\\ 192.168.2.117 \\ Blabla'" $ Drive.Name < /代码>< /预> &LT p为H.;<代码> $ Drive.Name< /代码>将成为驱动器号,应该允许您执行以下操作:< / p> < pre class =" lang-psh prettyprint-override">< code> $ net = $(New-Object -comobject WScript.Network) $ net.RemoveNetworkDrive($ Drive.Name,$真) < /代码>< /预>

答案 1 :(得分:1)

我建议使用Get-PSDrive而不是COM对象。

以下代码应该有效:

#get drive by root (note that we use "displayroot" for the comparison, "root" contains the driveletter)
Get-PSDrive | where {$_.DisplayRoot -eq "\\192.168.2.117\BlaBla"} | Remove-PSDrive

或者如果你必须使用ComObject删除驱动器,你可以执行以下操作:

$driveletter = (Get-PSDrive | where {$_.DisplayRoot -eq "\\192.168.2.117\BlaBla"}).root
$net.RemoveNetworkDrive($driveletter,$True)

答案 2 :(得分:-1)

实际解决方案是Win32_LogicalDisk和您的PS cmdlet的组合:

$net = $(New-Object -comobject WScript.Network)

foreach($driveLetter in Get-WMIObject -query "Select * From Win32_LogicalDisk Where DriveType = 4" | Select-Object DeviceID)
{
    #$net.RemoveNetworkDrive($driveLetter, $True)
    echo $driveLetter
}

这将仅删除网络驱动器,不需要任何奇怪的UNC路径或其他东西。

顺便说一句:不要使用1,预计会有boolean,这种范式有一天会破坏你的脚本......专业人士称之为&#34;糟糕的代码&#34; < / em>的