[英]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.