2012-02-22 21 views
2

我正在嘗試安裝幾個網絡驅動器,然後重命名它們。但是,我的Powershell腳本失敗後,第一個驅動器重命名罰款。對於第二個我得到一個錯誤:如何使用Powershell更改驅動器標籤?

Exception calling "Put" with "0" argument(s): "" 
At C:\Users\ben\Documents\mapdrives.ps1:12 char:11 
+ $disk.Put <<<<() 
+ CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
+ FullyQualifiedErrorId : DotNetMethodException 

我的劇本是這樣的:

cls 
$Username = "" 
$Password = "" 
$net = New-Object -com WScript.Network; 

$Drive = "M:" 
$UNC = "\\server01\bin$" 
$net.mapnetworkdrive($Drive, $Unc, $false, $Username, $Password) 
$disk = Get-WmiObject "Win32_LogicalDisk WHERE DeviceID='M:'" 
if (-not $disk) { return } 
$disk.VolumeName = "server1_bin" 
$disk.Put() 

$Drive = "N:" 
$UNC = "\\server01\data$" 
$net.mapnetworkdrive($Drive, $Unc, $false, $Username, $Password) 
$disk = Get-WmiObject "Win32_LogicalDisk WHERE DeviceID='N:'" 
if (-not $disk) { return } 
$disk.VolumeName = "server1_data" 
$disk.Put() 

我在做什麼錯?

回答

7

嘗試像這樣使用comobject的標籤驅動:

$a = New-Object -ComObject shell.application 

$a.NameSpace("M:\").self.name = "server1_bin" 

在任何情況下,你需要運行控制檯與管理分辯用戶

+0

很好,謝謝。 – b3n 2012-02-22 13:16:13

+0

曾經很樂意幫忙。 – 2012-02-22 13:19:26

+0

有趣。當PowerShell本身沒有一個明顯的方法來完成任務時,迴歸到PowerShell粘合在一起的各種技術的好例子。 – 2012-02-22 18:44:09

0

我已經寫了PowerShell腳本

function ChangeDriveLabel([string]$driveletter,[string]$newlabel) 
{  
    $disk = Get-WmiObject -Class win32_volume -Filter "DriveLetter = '$driveletter'" 

    Set-WmiInstance -input $disk -Arguments @{ Label=$newlabel} 

} 

ChangeDriveLabel -driveletter 'e:' -newlabel 'DBLOG'