在 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"
我想使用 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"