Что не так с моим оператором?

Я пытаюсь изменить пути виртуальных машин всех моих VMS, чтобы переместить их в другую точку монтирования:

$oldmount = "C:\RAID-5"
$newmount = "D:"

$drives = Get-VM | Get-VMHardDiskDrive
foreach ($drive in $drives)
{
    $path = $drive.path
    $path -replace $oldmount, $newmount     # just show what the new path will look like
}

Если я запускаю приведенный выше скрипт, я получаю груз этих ошибок:

The regular expression pattern C:\RAID-5 is not valid.
At C:\Users\mark\Documents\ChangeAllVMDrives.ps1:8 char:5
+     $path -replace $oldmount, $newmount
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (C:\RAID-5:String) [], RuntimeException
    + FullyQualifiedErrorId : InvalidRegularExpression

Что я делаю неправильно?

1 ответ

Решение

-replace использует регулярные выражения, поэтому вы должны избежать его, используя [regex]::Escape():

# ....
 $path -replace [regex]::Escape($oldmount), $newmount     # just show what the new path will look like

Или вы можете использовать метод класса .net string Replace():

$path.Replace($oldmount, $newmount)
Другие вопросы по тегам