2012-02-22 4 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" 

в любом случае вам нужно запустить консоль как пользователь с правами администратора Rigth

+0

Отлично работает. – b3n

+0

Ever Happy Help. –

+0

Интересно. Хороший пример возврата к широкому спектру технологий, которые PowerShell склеивает вместе, когда у PowerShell нет очевидного способа выполнить задачу. –

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'