PowerShell - Var внутри Format-Volume - PullRequest
       2

PowerShell - Var внутри Format-Volume

0 голосов
/ 30 октября 2018

Я действительно новичок в 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

Но, имея опыт программирования в Интернете, я действительно не знаю, как решить эту проблему. Ваша помощь очень ценится!

1 Ответ

0 голосов
/ 30 октября 2018

Документация для Format-Volume показывает требуемый формат для параметра DriveLetter как Char[].

Так что DriveLetter должна быть просто буквой диска G без следующего двоеточия G:, вы можете сделать это, просто выбрав только первый символ из $driveLetter:

-Driveletter $driveLetter[0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...