【问题标题】:PowerShell - Var inside Format-VolumePowerShell - 格式卷内的变量
【发布时间】:2019-04-03 11:13:17
【问题描述】:

我对 PowerShell 真的很陌生。我正在尝试制作一个脚本来检测新连接的 USB 驱动器并使用新名称和 NTFS 文件系统对其进行格式化。

我收到一个错误,问题似乎是 Format-Volume 中的驱动器名称

我在这里使用了答案https://superuser.com/questions/219401/starting-scheduled-task-by-detecting-connection-of-usb-device中的大部分脚本

#Requires -version 2.0
Register-WmiEvent -Class win32_VolumeChangeEvent -SourceIdentifier volumeChange
write-host (get-date -format s) " Beginning script..."
do{
$newEvent = Wait-Event -SourceIdentifier volumeChange
$eventType = $newEvent.SourceEventArgs.NewEvent.EventType
$eventTypeName = switch($eventType)
{
1 {"Configuration changed"}
2 {"Device arrival"}
3 {"Device removal"}
4 {"docking"}
}
write-host (get-date -format s) " Event detected = " $eventTypeName
if ($eventType -eq 2)
{
$driveLetter = $newEvent.SourceEventArgs.NewEvent.DriveName
$driveLabel = ([wmi]"Win32_LogicalDisk='$driveLetter'").VolumeName
write-host (get-date -format s) " Drive name = " $driveLetter
write-host (get-date -format s) " Drive label = " $driveLabel
Format-Volume -Driveletter "$driveLetter" -NewFileSystemLabel "test" -FileSystem NTFS -Confirm:$false

[media.SystemSounds]::("Hand").play()
}
Remove-Event -SourceIdentifier volumeChange
} while (1-eq1) #Loop until next event
Unregister-Event -SourceIdentifier volumeChange

我得到的错误:

2018-10-30T12:45:02  Beginning script...
2018-10-30T12:45:03  Event detected =  Device removal
2018-10-30T12:45:05  Event detected =  Device arrival
2018-10-30T12:45:05  Drive name =  G:
2018-10-30T12:45:05  Drive label =  blabla
Format-Volume : No MSFT_Volume objects found with property 'DriveLetter' equal to ':'.  Verify the value of the property and retry.
At C:\Users\myuser\Desktop\formater.ps1:23 char:1
+ Format-Volume -Driveletter "$driveLetter" -NewFileSystemLabel "test"  ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (::Char) [Format-Volume], CimJobException
    + FullyQualifiedErrorId : CmdletizationQuery_NotFound_DriveLetter,Format-Volume

我试过了:

-Driveletter "$driveLetter"
-Driveletter $driveLetter
-Driveletter ""$driveLetter

但是我有网络编码的背景,我真的不知道如何解决这个问题。非常感谢您的帮助!

【问题讨论】:

  • 根据Get-Help Format-Volume,DriveLetter 参数只需要一个 .. DriveLetter,没有冒号。所以使用-Driveletter $driveLetter[0]

标签: powershell


【解决方案1】:

Format-Volume 的文档将 DriveLetter 参数所需的格式显示为 Char[]

所以DriveLetter 应该只是驱动器号G 没有下面的冒号G:,您只需从$driveLetter 中选择第一个字符即可:

-Driveletter $driveLetter[0]

【讨论】:

  • 非常感谢!!...这可行,但是在使用 NTFS 时出现错误。适用于 FAT32 或 exFAT 等其他格式...你知道为什么吗?
  • 不太确定,我使用 exFAT,因为在可移动驱动器上不需要任何 NTFS 功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-16
  • 1970-01-01
  • 2015-06-15
  • 2021-10-24
  • 1970-01-01
相关资源
最近更新 更多