【问题标题】:Running Powershell Script via Chef - Invalid escape character syntax通过 Chef 运行 Powershell 脚本 - 转义字符语法无效
【发布时间】:2021-07-13 22:08:39
【问题描述】:

我有一个试图通过 chef 运行的 powershell 脚本。我正在使用 powershell 资源。我尝试了其他运行脚本的方法,但由于机器严格的访问控制,我只能使用 Chef powershell 资源。

我认为由于脚本中的这一特定行而导致运行失败:

$FileServerSharePath ='\\files.myshare.com\Public\SOFTWARE\mysoftware\LatestInstaller'

具体错误为:Invalid escape character syntax

这是我的食谱的示例:

powershell_script 'install-stuff' do
  code <<-EOH
    code stuff blah blah blah
  EOH
end

我尝试转义双反斜杠,但仍然出现错误。我不确定我还能尝试什么来克服这个错误。我不是 Windows 人,所以谢谢你的帮助。

更新: 我认为这可能是我的服务器配置的特定问题。

【问题讨论】:

  • 在常规 powershell 窗口中运行该行不会导致错误 - 我会尝试通过在非托管计算机中运行类似代码来确定导致错误的确切行。如果该行导致错误,则它是由厨师而不是由 powershell 引起的。
  • @LeeExothermix 直接在 Windows 中运行脚本不会产生任何错误,并且运行没有问题。所以,我尝试只是复制脚本并使用执行资源来运行脚本,但遇到了访问控制错误。
  • 你能添加一些你的厨师资源定义吗? Chef 要求在它正在处理的文本中对 \ 进行转义,因此 UNC 路径最终看起来像 '\\\\server\\share\\file'。您是从 powershell 调用脚本文件,还是将脚本内容作为命令输入到 powershell?
  • code 块中完全按照您的问题使用Powershell 命令对我来说没有产生任何错误。

标签: windows powershell chef-infra


【解决方案1】:

我测试了很多不同的方法来克服错误。似乎 Chef 不喜欢 Powershell 脚本资源中的任何反斜杠。我将脚本中的所有反斜杠都切换为正斜杠。在那之后我得到了一个不同的错误。我决定将我的 msi 移动到带有 chef 的机器上,然后使用 windows_packages 资源来安装 msi。

这是有效的:

powershell_script 'download_installer' do
  code <<-EOH
  $user_agent = '123456789useragent'
  $source = 'http://blah.mybucket.net.s3.amazonaws.com/path1/path2/installer_12345.msi'
  $destination = 'c:/Windows/Temp/installer_12345.msi'
  Invoke-WebRequest -Uri $source -OutFile $destination -UserAgent $user_agent
  EOH
end

windows_package "install_software" do
  installer_type :msi
  action :install
  source "c:/Windows/Temp/installer_12345.msi"
  options '/q VAR1=123456789 VAR2=abcdefgh VAR3=blah'
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多