chef powershell命令不起作用

时间:2018-04-19 21:20:53

标签: ruby powershell chef quoting

我正在尝试获取ACL并解析到数组reg_perms,代码在没有Where-Object{($_.IdentityReference -eq "BUILTIN\Users")

的情况下正常工作
command ='powershell "(Get-Acl \'HKLM:\SOFTWARE\\Microsoft\Windows NT\CurrentVersion\Winlogon\').Access | Where-Object{($_.IdentityReference -eq "BUILTIN\Users")} | Format-List RegistryRights,AccessControlType,IdentityReference"'

    data = ::Mixlib::ShellOut.new(command).run_command.stdout.strip.gsub(/\r\n?/, "\n")
    reg_perms = data.split("\n\n").each_with_object([]) do |set, arr|
      arr << set.split("\n").map do |f|
        f.split(':').collect(&:strip)
      end.to_h
    end

2 个答案:

答案 0 :(得分:0)

您对整个字符串使用单引号:'。然后,当您的字符串被双引号括起时,BUILTIN\Users字符串周围的双引号不会被转义,这意味着您需要绕过""BUILTIN\Users"" powershell方式的双引号或使用单引号{{1并以红宝石的方式逃脱它们。

这应该有效:

\'BUILTIN\Users\'

答案 1 :(得分:0)

您尝试在整个双引号命令字符串中嵌入"BUILTIN\Users" - 双引号字符串 - 您将传递给PowerShell可执行文件(powershell "..."),无效,因为在带引号的字符串中嵌入相同类型的引号需要转义

PowerShell,当通过其CLI(powershell.exe)从外部调用它时,需要嵌入式 "字符。被\" - 转义(即使使用PowerShell- 内部`""")。 [1]

由于您在Ruby(Chef)端(command = '...')上使用 - 进行操作,因此转义内部嵌入式{{1} chars。 PowerShell "就足够了。

因此,请将\"替换为-eq "BUILTIN\Users";即:

-eq \"BUILTIN\Users\"

或者 - 假设您引用的字符串的内容文字您可以使用在PowerShell命令中引用command ='powershell "(Get-Acl \'HKLM:\SOFTWARE\\Microsoft\Windows NT\CurrentVersion\Winlogon\').Access | Where-Object{($_.IdentityReference -eq \"BUILTIN\Users\")} | Format-List RegistryRights,AccessControlType,IdentityReference"' ;但是,在这种情况下,因为在Ruby方面,您使用单引号作为整体命令,您需要将嵌入式BUILTIN\Users实例转义为 Ruby的' 的好处

因此,请将\'替换为-eq "BUILTIN\Users";即:

-eq \'BUILTIN\Users\'

[1]从command ='powershell "(Get-Acl \'HKLM:\SOFTWARE\\Microsoft\Windows NT\CurrentVersion\Winlogon\').Access | Where-Object{($_.IdentityReference -eq \'BUILTIN\Users\')} | Format-List RegistryRights,AccessControlType,IdentityReference"' 调用PowerShell CLI时 - 无论是从命令提示符,批处理文件还是通过Chef / Ruby - 将文字cmd.exe转义为{{1} 有时候,但并不总是有效(试试) "直接来自""命令提示符。) 相反,powershell -Command "'Nat ""King"" Cole'" - 逃避是安全的选择 cmd.exe - 转义,这是典型 PowerShell- 内部\"内转义`"的方式,从不适用于这种情况。