powershell和diskpart
简而言之,我有一个需要分配驱动器号的卷(使用diskpart)。现在的问题是,音量并没有保持不变。您输入磁盘a部分并执行“列出卷”,特定卷将是卷0,然后“退出”。再次输入并再次执行“列表卷”,这一次是第4卷。所以它继续着。 现在,如果这是由个人完成的,则不会成为问题,但这是一项自动任务,将“断开”windows 2003上的卷,并在其他服务器上使用,然后再次装载到windows 2003服务器上 我正在尝试在powershell中编写一个脚本,该脚本将能够根据几个唯一字段识别卷。问题在于我一直在用powershell解释diskpart的“list volume”命令的输出 下面的命令提供了我需要处理的输出,但在我丢失后,输出仍然存在powershell和diskpart,powershell,Powershell,简而言之,我有一个需要分配驱动器号的卷(使用diskpart)。现在的问题是,音量并没有保持不变。您输入磁盘a部分并执行“列出卷”,特定卷将是卷0,然后“退出”。再次输入并再次执行“列表卷”,这一次是第4卷。所以它继续着。 现在,如果这是由个人完成的,则不会成为问题,但这是一项自动任务,将“断开”windows 2003上的卷,并在其他服务器上使用,然后再次装载到windows 2003服务器上 我正在尝试在powershell中编写一个脚本,该脚本将能够根据几个唯一字段识别卷。问题在于我一直在
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
有谁能帮我找到正确的方向吗。我已束手无策。您可以使用Powershell和WMI设置驱动器号。除非您正在做其他事情,否则不应该需要diskpart(我不熟悉该工具) 因此(假设您试图设置一个没有盘符的卷的驱动器盘符),这应该可以工作:
$drive = gwmi Win32_Volume | where {$_.DriveLetter -eq ""}
$drive.DriveLetter = "X:"
$drive.Put()
如果您对该驱动器不确定,只需首先查询它,并确保您只获得了所需的驱动器:
gwmi Win32_Volume | where {$_.DriveLetter -eq ""}
是的。这是diskpart的一个“功能”
MS的建议(在您的案例中不是很有用)
- 保留磁盘管理控制台 (Diskmgmt.msc)在运行时 处理脚本。或者,举个例子 正在运行的Diskpart.exe实用程序的 在后台处理 脚本。执行此操作时,卷 数字不应随时间而变化 Diskpart.exe的实例 效用。使用卷标 信息而不是卷 用于跟踪特定卷的编号 请参阅错误报告
是的,我知道了强>
答案是这样的
使用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
}
从一个帖子开始
我希望这可能会帮助其他人
谢谢大家的帮助 您是否一直在寻找未分配驱动器号的卷?如果我对您要定位的卷的假设是错误的,请告诉我。同样的原则应该仍然有效,但只需要让WMI查询准确地查找您想要的内容。我假设PUT命令用于提交更改?问题是它给出了错误,我试图创建一个新对象和设置类型等,但它不会接受对Put方法的调用$PutOptions=New Object System.Management.PutOptions$PutOptions.Type=2$drive.Put($PutOptions)请告诉我我在哪里傻了。我能看看你的完整代码吗?您不需要使用任何put选项,只需向下查询该项,存储在变量中,对其进行更改,然后将其放置()下面是我尝试的两个选项以及每个选项的输出。我将分别发布每个(注释限制)选项1====script-----cls$drive=get wmiobject Win32|u Volume |其中{$..DeviceID-如“b0f012f6-82b1-11df-a41c-001f29e8f0be”}$drive.DriveLetter=“T:$drive.Put()输出------异常调用带有“0”参数的“Put”:“不受支持”在D:\transport\u actions\get\u vol\u id4.ps1:5 char:11+$drive.Put Option 2===script-----cls$drive=get wmiobject Win32\u Volume |其中{$\.DeviceID类似于“b0f012f6-82b1-11df-a41c-001f29e8f0be”}$drive.DriveLetter=“T:$PutOptions=New Object System.Management.PutOptions$PutOptions.Type=2$drive.Put($PutOptions)输出------调用带有“1”参数的“Put”时出现异常:在D:\transport\u actions\get\u vol\u id4.ps1:10 char:11+$drive.Put Belisaruis处出现“Unsupported parameter”,感谢您提供的信息。非常悲哀的是,不得不回到战术上,比如保持开放,试图保持vol no不变。在这种情况下,不可能保持打开状态。