我正在尝试通过 Chef 自动设置驱动器。我的主厨客户声称 powershell_script 运行成功,但是实际上没有运行脚本的内容。我已经逐行进行,并且可以查明包含哪一行会导致这种行为 - 但是我不知道它为什么会发生,也不知道如何解决它。
这是代码的简化版本(我的 metadata.rb 中有所有适当的 require 语句):
powershell_script 'SetupTilesDrive' do
environment ({'driveLetter' => "G", 'drive' => "G:"})
code <<-EOF
if (Test-Path $env:drive) {
Write-Host Disk already exists
Exit 0
}
$offlineDisk = Get-Disk | Where-Object { $_.IsOffline -eq $true }
if ($offlineDisk -eq $null) {
Write-Host There is no offline disk; therefore, cannot systematically figure out which disk should be MAPDATA
Exit 1
}
$diskNumber = $offlineDisk[0].Number
Set-Disk -Number $diskNumber -IsOffline $false
Set-Disk -Number $diskNumber -IsReadonly $false
Clear-Disk $diskNumber -Confirm:$false
Initialize-Disk $diskNumber
# The following two lines cause this to break
New-Partition -DiskNumber $diskNumber -DriveLetter $env:driveLetter -UseMaximumSize
Format-Volume -DriveLetter $env:driveLetter -NewFileSystemLabel MAPDATA -confirm:$false
EOF
结尾
一旦我删除以下两行:
New-Partition -DiskNumber $diskNumber -DriveLetter $env:driveLetter -UseMaximumSize
Format-Volume -DriveLetter $env:driveLetter -NewFileSystemLabel MAPDATA -confirm:$false
该脚本将运行并执行相关步骤,但是我的驱动器设置尚未完成。
简单地尝试在调试中写入托管命令(单独),也不会打印出来(即下面的块)
powershell_script 'PrintThis' do
code <<-EOF
$diskNumber = 1
$env:driveLetter = "G"
Write-Host "New-Partition -DiskNumber $diskNumber -DriveLetter $env:driveLetter -UseMaximumSize"
EOF
end
有人有想法么?是否有一些我缺少需要转义的保留字符?
在脚本中使用“-not”运算符时,我也注意到了同样的行为。作为一般做法,我避免使用该运算符。