簡體   English   中英

調用 vmscript diskextend 問題

[英]Invoke-vmscript diskextend issue

嘗試運行我的腳本時,我收到以下錯誤消息。

腳本:

$extenddisk= @"


 
$letter = Get-WmiObject -Class Win32_CDROMDrive | select -ExpandProperty Drive
Set-WmiInstance -InputObject ( Get-WmiObject -Class Win32_volume -Filter "DriveLetter = '$letter'" ) -Arguments @{DriveLetter='Z:'} 

$newdisk = @(get-disk | Where-Object partitionstyle -eq 'raw')

for($i = 0; $i -lt $newdisk.Count ; $i++)

{

 

  $disknum = $newdisk[$i].Number

  $dl = get-Disk $disknum |

  Initialize-Disk -PartitionStyle GPT -PassThru |

  New-Partition -AssignDriveLetter -UseMaximumSize

  Format-Volume -driveletter $dl.Driveletter -FileSystem NTFS -Confirm:$false

 

}

 

"@


Invoke-VMScript -ScriptText $extenddisk -VM $vm -GuestCredential $VMLocalCredential -ScriptType Powershell

錯誤:

WARNING: The version of VMware Tools on VM 'Hostname' is out of date and may cause Invoke-VMScript to work improperly.

 

 

 

 

 

ScriptOutput

-----------------------------------------------------------------------------------------------------------------------|  At line:9 char:27

|  + for( = 0;  -lt .Count ; ++)

|  +                           ~

|  Missing expression after unary operator '++'.

|      + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException

|      + FullyQualifiedErrorId : MissingExpressionAfterOperator

|  

| 

-----------------------------------------------------------------------------------------------------------------------

更新:

$extenddisk= @'


 
`$letter = Get-WmiObject -Class Win32_CDROMDrive | select -ExpandProperty Drive
Set-WmiInstance -InputObject ( Get-WmiObject -Class Win32_volume -Filter "DriveLetter = '`$letter'" ) -Arguments @{DriveLetter='Z:'}

[string[]] `$DiskArray = [char[]] (68..89)
`$DiskArrayIndex = 0

`$Disks = Get-Disk |  Where partitionstyle -eq 'raw' 

Foreach  (`$D in `$Disks) {
        `$D | Initialize-Disk -PartitionStyle GPT -PassThru | 
        New-Partition -DriveLetter `$DiskArray[`$DiskArrayIndex++] -AssignDriveLetter -UseMaximumSize | 
        Format-Volume -FileSystem NTFS -Confirm:`$false

        
}

 

'@


Invoke-VMScript -ScriptText $extenddisk -VM $row.ServerName -GuestCredential $VMLocalCredential -ScriptType Powershell

當您在此處的字符串中使用" (雙引號)時,PowerShell 將嘗試擴展其內容中的所有變量和封閉的子表達式。請改用' (單引號):

$extenddisk = @'
...
'@

我想在 Mathias 下發表我的評論,但我的名聲太小了……無論如何。 @Arbelac,Mathias 在這里是正確的。 您應該將此處的字符串更改為 @' '@ 它只會供您使用。 如果你在它進入invoke-vmscript中的VM之前在你身邊做一些“額外的東西”那就不好了,但在這種情況下,我看到你只是將stript傳遞給VM在里面執行,什么都沒有特殊的,因此不要使用 @" "@ 就像提到的那樣,所有 $stuff 都會被轉換為值,所以它會破壞你的腳本。 您只想將整個腳本傳遞給 VM,因此不需要 @" "@. 一切都應該工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM