gpt4 book ai didi

windows - 扩展 Chef Windows Cookbook...DISM 限制

转载 作者:可可西里 更新时间:2023-11-01 10:24:01 27 4
gpt4 key购买 nike

我正在尝试使用 Chef 在 WinServer 2012 上安装 .NET 3.5 框架。

然而,ms_dotnet35 说明书不支持 WinServer 2012。

所以我复制了它在说明书中用于安装的代码 ( from here )(请原谅格式):

if platform?('windows')
unless File.exists?('C:/Windows/Microsoft.NET/Framework/v3.5')
windows_feature 'NetFx3' do
action :install
end
end

else Chef::Log.warn('Microsoft Framework .NET 3.5 can only be installed on the Windows platform.')
end

但是,有一个障碍。当 Chef 运行时,“windows_feature”传递以下命令行:

C:\Windows\sysnative\dism.exe /online /enable-feature /featurename:NetFx3 /norestart

事实证明,在 WinServer 2012 上,您需要传递“/all”参数,否则您将收到“可能未启用所需的父功能”。异常(from here)

现在我正在查看 Windows 说明书 (from here) 中“windows_feature”的代码:

def install_feature(name)
# return code 3010 is valid, it indicates a reboot is required
shell_out!("#{dism} /online /enable-feature /featurename:#{@new_resource.feature_name} /norestart", {:returns => [0,42,127,3010]})
end

..我们在哪里找到对 DISM 的实际调用。

我推荐的扩展方法是什么?我是否应该只复制 shell_out 调用并破解 DISM 行以使其工作?

我是 Chef 新手,希望遵循最佳实践/正确范例。我不明白为什么 windows_feature 的当前实现不提供输入可选参数(如“/all”)的方法。

最佳答案

我最终在一本新 Recipe 中创建了一个新 Recipe 来处理在 Windows Server 2012 上安装 .Net Framework 3.5。

我能够通过下载 eval ISO from here 找到所需的文件(因为我没有安装盘,我在 Azure 上) .

安装 ISO 后,我压缩了整个 ..\Sources\sxs 文件夹。

我的一个执行命令是这样的:

execute "install_net35" do
command "C:/Windows/sysnative/dism.exe /online /enable-feature /all /featurename:NetFx3 /norestart /limitaccess /source:C:/tempdirectory/sxs"

...其中“C:/tempdirectory/sxs”是解压缩的文件。

我还将执行包装在 Windows Server 2012 的检查中:

if win_version.windows_server_2012? || win_version.windows_server_2012_r2?

..并检查框架是否已经安装(以确保幂等性):

unless File.exists?('C:/Windows/Microsoft.NET/Framework/v3.5')

关于windows - 扩展 Chef Windows Cookbook...DISM 限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23143520/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com