2014-06-12 44 views
0

我试图通过厨师自动设置驱动器。我的厨师客户声称powershell_script成功运行,但是脚本的内容没有实际运行。我已经一行一行,并可以确定哪些行包括导致此行为 - 但我不知道为什么会发生,我也不知道要解决它。厨师powershell_script通过但实际上并没有运行脚本

下面是代码的简化版本(我都相应要求我metadata.rb语句):

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”操作符时也有相同的行为。作为一种惯例,我避免使用该操作符。

+0

如果使用普通变量代替环境变量会发生什么? – arco444

+0

为了简单起见,我尝试了对所有变量进行硬编码,但它仍然无效。粘贴PowerShell交互式控制台中的所有代码都会导致预期的行为。 – badazzhindu

回答

0

有一个隐藏的字符(在这种情况下,它是â)。我只是删除了违规行并重新输入。

相关问题