代码之家  ›  专栏  ›  技术社区  ›  Nick H.

厨师-Powershell输出

  •  6
  • Nick H.  · 技术社区  · 8 年前

    我最近升级到了Windows 10,在运行刀命令时发现了一个非常奇怪/烦人的问题。

    当我在powershell控制台中运行此命令时:

    $nodes = knife node list
    

    的价值 $nodes $null 并且我的所有节点都列在控制台窗口中,而不是被捕获并存储在 $个节点 变量当我从Powershell ISE运行相同的命令时,它会按预期运行 $个节点 包含我的节点列表。

    我试过几种不同的方法,结果都一样。。。

    $nodes = & knife node list
    $nodes = Invoke-Expression -Command 'knife node list'
    $nodes = $(Invoke-Expression -Command 'knife node list')
    $nodes = & knife node list 2>&1
    $nodes = & knife node list 3>&1
    $nodes = & knife node list 4>&1
    

    我的powershell控制台会话无法捕获ruby解释器的输出,但powershellise会话可以!?

    Name                           Value
    ----                           -----
    PSVersion                      5.0.10586.122
    PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
    BuildVersion                   10.0.10586.122
    CLRVersion                     4.0.30319.42000
    WSManStackVersion              3.0
    PSRemotingProtocolVersion      2.3
    SerializationVersion           1.1.0.1
    

    尝试使用和不使用厨师powershell模块: Import-Module Chef 同样的结果。

    PS C:\Users\nhudacin> chef -v
    Chef Development Kit Version: 0.12.0
    chef-client version: 12.8.1
    berks version: 4.3.0
    kitchen version: 1.6.0
    

    现在是关键…我只想使用ISE来完成它,但是这个命令:

    $nodes = knife exec -E 'b = Time.now.to_i;a = (b - (336*60*60)).to_i;printf "%-40s %-23s\n", "Name", "Last Check-In";search(:node, "ohai_time:[0 TO #{a}]") { |n| checkIn = Time.at(n["ohai_time"]).strftime("%F %R"); printf "%-40s %-23s\n", n.name, checkIn;}'
    

    在powershell控制台中运行良好,返回过去14天内未签入的节点列表。当我在ISE中运行它时,它不会返回一个节点(尽管我知道至少有10个节点符合这个标准)。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Brandon Olin    8 年前

    尝试删除作为ChefDK的一部分安装的chef模块。这就是我解决这个问题的原因。

    Remove-Module chef
    

    https://github.com/chef/chef/issues/4045