powershell和diskpart

时间:2010-07-12 16:30:52

标签: powershell

简而言之,我有一个我需要为其分配驱动器号的卷(使用diskpart)。现在的问题在于音量不会保持不变。您输入磁盘部分a执行“列表卷”,特定卷将是卷0,然后“退出”。再次输入并再次执行“列表卷”,这次是第4卷。所以它继续。 现在,如果由一个人完成这不是问题,但这是一个自动化任务,它将“断开”Windows 2003上的卷并在其他服务器上使用并再次安装在Windows 2003服务器上。

我正在尝试在powershell中编写一个脚本,该脚本能够根据一些独特的字段识别卷。问题在于我用PowerShell解释了diskpart的“list volume”命令的输出。

以下命令提供了我需要使用的输出,但是在我丢失之后。

cls
$dp = "list volume" | diskpart | ? { $_ -match "^  [^-]" }
$dp | format-table  -auto

这是它提供的输出,我正在寻找的卷是第1卷。

  Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
  Volume 0     F                       DVD-ROM         0 B  Healthy            
  *Volume 1                             Partition    100 GB  Healthy*            
  Volume 2     E   DATA         NTFS   Partition    547 GB  Healthy            
  Volume 3     C   OS           NTFS   Partition     39 GB  Healthy    System  
  Volume 4     D   APPS         NTFS   Partition     98 GB  Healthy            

请允许任何人帮助我朝正确的方向前进。我正处于我的束缚之中。

3 个答案:

答案 0 :(得分:6)

是的,我明白了!

这是答案。
使用VB脚本我设法创建了一个完成我要求的脚本,然后我将其转换为Powershell,下面是脚本。

$drive = gwmi Win32_Volume | where {$_.DeviceID -like "*b0f012f6-82b1-11df-a41c-001f29e8f0be*"}
$drive.AddMountPoint("T:\")
$drive.DriveLetter = "T:"
$drive.Put_
$drive.Mount()

通过运行以下脚本获得的设备ID:

# get volumes on this system
$volumes = get-wmiobject Win32_Volume
# display volume info
# There are {0} volumes on this system, as follows: " -f ($volumes.length)
# Iterate through volumes and display information
foreach ($vol in $volumes) {
    "Volume: {0}" -f ++$i
    "============================="
    $vol | Format-List Access,Automount,Availability,BlockSize,BootVolume,Capacity,Caption,Compressed,ConfigManagerErrorCode,ConfigManagerUserConfig,CreationClassName,Description,DeviceID,DirtyBitSet,DriveLetter,DriveType,ErrorCleared,ErrorDescription,ErrorMethodology,FileSystem,FreeSpace,IndexingEnabled,InstallDate,Label,LastErrorCode,MaximumFileNameLength,Name,NumberOfBlocks,PageFilePresent,PNPDeviceID,PowerManagementCapabilities,PowerManagementSupported,Purpose,QuotasEnabled,QuotasIncomplete,QuotasRebuilding,SerialNumber,Status,StatusInfo,SupportsDiskQuotas,SupportsFileBasedCompression,SystemCreationClassName,SystemName,SystemVolume
}

来自msdn on the class Win32_Volume上的帖子。

我希望这可能对别人有所帮助

感谢所有帮助过的人!

答案 1 :(得分:2)

您可以使用Powershell和WMI来设置驱动器号。除非你正在做其他事情(我不熟悉那个工具),否则不需要diskpart。

所以(假设你试图设置一个没有字母的卷的驱动器号)这应该有效:

$drive = gwmi Win32_Volume | where {$_.DriveLetter -eq ""}

$drive.DriveLetter = "X:"

$drive.Put()

如果您不确定驱动器,请先查询它并确保您只获得所需的驱动器:

gwmi Win32_Volume | where {$_.DriveLetter -eq ""}

答案 2 :(得分:1)

是的。这是diskpart的“功能”。

来自MS的建议(在您的情况下不是很有用)

  • 保留磁盘管理控制台 (Diskmgmt.msc)正在运行 流程脚本。或者,保留一个实例 正在运行的Diskpart.exe实用程序 在你处理的背景中 脚本。当你这样做时,音量 数字之间不应该改变 Diskpart.exe的实例 效用。使用卷标签 信息而不是音量 用于跟踪特定卷的数字。

    请参阅错误报告here