首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >powershell和diskpart

powershell和diskpart
EN

Stack Overflow用户
提问于 2010-07-13 00:30:52
回答 3查看 11.6K关注 0票数 4

简而言之,我有一个需要分配驱动器号的卷(使用diskpart)。现在的问题是音量不保持不变。您输入磁盘部分a do a "list volume“,具体的卷将是卷0,然后"exit”。再次输入,并再次执行"list volume“,这一次是第4卷。因此它继续。现在,如果这是由一个人完成的,这将不是一个问题,然而,这是一个自动任务,它将在Windows2003上“断开”卷,并在其他服务器上使用,并再次安装在Windows2003服务器上。

我正在尝试用powershell编写一个脚本,它将能够根据几个唯一的字段来识别卷。问题来了,我在用powershell解释diskpart的"list volume“命令的输出时遇到了麻烦。

下面的命令提供了我需要使用的输出,但是在我迷路之后。

代码语言:javascript
复制
cls
$dp = "list volume" | diskpart | ? { $_ -match "^  [^-]" }
$dp | format-table  -auto

这是它提供的输出,我要找的是第一卷。

代码语言:javascript
复制
  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            

有谁能帮我指个方向吗?我已经走投无路了。

EN

回答 3

Stack Overflow用户

发布于 2010-08-14 00:45:05

是的,我知道了!!

这就是答案。

使用VB脚本,我设法创建了一个脚本,它完成了我正在寻找的功能,然后我将其转换为Powershell,下面是该脚本。

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

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

代码语言:javascript
复制
# 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上的一篇帖子。

我希望这能帮助其他人

感谢大家的帮助!

票数 6
EN

Stack Overflow用户

发布于 2010-07-13 00:56:38

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

因此(假设您正在尝试设置一个没有盘符的卷的驱动器号),这应该是可行的:

代码语言:javascript
复制
$drive = gwmi Win32_Volume | where {$_.DriveLetter -eq ""}

$drive.DriveLetter = "X:"

$drive.Put()

如果您不确定驱动器,只需先查询它,并确保您只得到一个您想要的:

代码语言:javascript
复制
gwmi Win32_Volume | where {$_.DriveLetter -eq ""}
票数 2
EN

Stack Overflow用户

发布于 2010-07-13 01:25:28

是啊。这是diskpart的一个“特性”。

来自MS的建议(在您的案例中不是很有用)

  • 在您处理脚本时保持磁盘管理控制台(Diskmgmt.msc)运行。或者,在处理脚本时保持Diskpart.exe实用程序的一个实例在后台运行。执行此操作时,卷编号不应在Diskpart.exe应用工具实例之间更改。使用卷标信息而不是卷号来跟踪特定卷。

请参阅错误报告here.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3230277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档