2015-05-06 52 views
0

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

回答

2

你可以試試下面的方法用於獲取驅動器的信息:

$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) 
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) 
-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預計,這種格局會打破你的腳本第一天開始...它是什麼專業人士稱之爲「惡意代碼」

+0

你發現你的腳本將刪除每個安裝網絡驅動器如果有多個? – Paul

+0

當然。這正是所問的。 – specializt

+0

真的嗎? op是說他必須按名稱找到驅動器,所以我認爲他不僅僅想刪除所有的東西 – Paul