2012-02-22 22 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'