0

我正在尝试通过 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”运算符时,我也注意到了同样的行为。作为一般做法,我避免使用该运算符。

4

1 回答 1

0

有一个隐藏字符(在本例中为 â)。我只是删除了有问题的行并重新输入。

于 2014-06-23T13:16:31.220 回答