Chef - Powershell输出

时间:2016-04-05 14:42:20

标签: windows powershell chef

我最近升级到Windows 10,并且在运行knife命令时我注意到一个非常奇怪/恼人的问题。

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

$nodes = knife node list

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

我尝试了几种变体,都有相同的结果......

$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解释器的输出但PowerShell ise会话可以发生什么??

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 个答案:

答案 0 :(得分:1)

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

git pull

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