在 PowerShell 中按名称获取网络驱动器号

Get network drive letter by name in PowerShell

我想使用 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'
    }

您可以尝试以下方法获取硬盘信息:

$Drive = Get-WmiObject -Class Win32_mappedLogicalDisk `
         -filter "ProviderName='\\192.168.2.117\Blabla'"
$Drive.Name

$Drive.Name 将成为允许您执行以下操作的驱动器号:

$net = $(New-Object -comobject WScript.Network)
$net.RemoveNetworkDrive($Drive.Name,$true)

我建议使用 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)

实际 解决方案是 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 路径或其他东西。

顺便说一句:不要在需要 boolean 的地方使用 1,这种范式总有一天会破坏您的脚本……这就是专业人士所说的 "bad code"