ネットワークドライブを接続するとマイコンピュータにアイコンが表示されますがボリュームラベルは通常UNCが表示されます
1 |
PS C:\> (New-Object -ComObject WScript.Network).MapNetworkDrive("Z:","\\freenas.rootlinks.net\data",$true) |
このボリュームラベルをPowershellで変更する方法です
まず見つけたのがここです
Hey, Scripting Guy! Blog
Change Drive Letters and Labels via a Simple PowerShell Command
http://blogs.technet.com/b/heyscriptingguy/archive/2011/03/14/change-drive-letters-and-labels-via-a-simple-powershell-command.aspx
Win32_Volume WMI classを利用して変更する方法ですがローカルドライブに対してのみ有効でネットワークドライブはダメでした
またこの方法はPowershellを管理者権限で動作させる必要があります
1 2 3 4 5 |
PS C:\> gwmi win32_volume -Filter "DriveLetter = 'C:'" __GENUS : 2 __CLASS : Win32_Volume (snip) |
ネットワークドライブは表示されない
1 |
PS C:\> gwmi win32_volume -Filter "DriveLetter = 'Z:'" |
Win32_Volume WMI classの一部の機能を提供するWin32_LogicalDisk WMI classを利用する方法です。このClassはVolumeNameの変更はできますが、ドライブレターとインデックスの有効化はできません
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
PS C:\> gwmi Win32_LogicalDisk -Filter "DeviceID = 'C:'" DeviceID : C: DriveType : 3 ProviderName : FreeSpace : 150144757760 Size : 239949836288 VolumeName : PS C:\> gwmi Win32_LogicalDisk -Filter "DeviceID = 'Z:'" DeviceID : Z: DriveType : 4 ProviderName : \\freenas.rootlinks.net\data FreeSpace : 65108887552 Size : 309997613056 VolumeName : data |
この方法を試してみると、やはり管理者権限が必要なためにputでエラーになってしまいました
実際の運用では管理者権限が無くても変更出来る方法が必要です
1 2 3 4 5 6 7 8 |
PS C:\> (gwmi Win32_LogicalDisk -Filter "DeviceID = 'Z:'").VolumeName = "data(FreeNAS)" PS C:\> (gwmi Win32_LogicalDisk -Filter "DeviceID = 'Z:'").put() "0" 個の引数を指定して "Put" を呼び出し中に例外が発生しました: "" 発生場所 行:1 文字:55 + (gwmi Win32_LogicalDisk -Filter "DeviceID = 'Z:'").put <<<< () + CategoryInfo : NotSpecified: (:) []、MethodInvocationException + FullyQualifiedErrorId : DotNetMethodException |
世界中を探しまわったところ下記の情報を見つけました
How to change drive label using Powershell?
http://stackoverflow.com/questions/9395153/how-to-change-drive-label-using-powershell
ComObjectを利用する方法です
Try Like this using comobject for label a drive:
$a = New-Object -ComObject shell.application
$a.NameSpace( “M:\” ).self.name = “server1_bin”
in any case you need run the console as a user with administrative rigth
実際に試してみました
1 |
PS C:\> (New-Object -ComObject shell.application).NameSpace( "Z:\" ).self.name = "data(FreeNAS)" |
コマンドを入力した時点で即座に値が反映されました
また場合によっては管理者権限が必要とありますが、ネットワークドライブはプロファイルなので必要無いと思います
ちなみにレジストリは下記になります
1 2 3 4 |
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\##freenas.rootlinks.net#data] "_CommentFromDesktopINI"="" "_LabelFromDesktopINI"="" "_LabelFromReg"="data(FreeNAS)" |
Thank you. C.B. You are great.
http://stackoverflow.com/users/520612/c-b