2012-02-22 15 views
2

私はいくつかのネットワークドライブをマウントしてから名前を変更しようとしています。しかし、私のPowershellスクリプトは、最初のドライブの名前が正しく変更された後に失敗しています。二つ目のために私はエラーを取得する:私は間違って何をやっているPowershellを使用してドライブラベルを変更するには?

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() 

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

私のスクリプトは次のようになりますか?

答えて

7

ラベルのためのこの使用comobjectのようにドライブしてみてください。あなたは

私が書いた
+0

素晴らしい、ありがとう。 – b3n

+0

これまでお世話になりました。 –

+0

興味深い。 PowerShell自体が、タスクを達成する明白な方法を持っていないときに、PowerShellが一緒に糊付けする幅広い技術に落ちる良い例です。 –

0

PowerShellスクリプト管理rigthを持つユーザーとしてコンソールを実行する必要がありますどのような場合でも

$a = New-Object -ComObject shell.application 

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

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' 
関連する問題