gpt4 book ai didi

PowerShell DSC - 如何将配置参数传递给 ScriptResources?

转载 作者:行者123 更新时间:2023-12-03 10:20:47 25 4
gpt4 key购买 nike

我在尝试使用 PowerShell 所需状态配置脚本来配置内部应用程序时遇到了很多麻烦。问题的根源在于我似乎无法将我的配置数据传递到 ScriptResource(至少不是我尝试这样做的方式)。

我的脚本应该为我们的内部应用程序创建一个 config 文件夹,然后将一些设置写入文件:

configuration MyApp {
param (
[string[]] $ComputerName = $env:ComputerName
)
node $ComputerName {

File ConfigurationFolder {
Type = "Directory"
DestinationPath = $Node.ConfigFolder
Ensure = "Present"
}

Script ConfigurationFile {
SetScript = {
write-verbose "running ConfigurationFile.SetScript";
write-verbose "folder = $($Node.ConfigFolder)";
write-verbose "filename = $($Node.ConfigFile)";
[System.IO.File]::WriteAllText($Node.ConfigFile, "enabled=" + $Node.Enabled);
}
TestScript = {
write-verbose "running ConfigurationFile.TestScript";
write-verbose "folder = $($Node.ConfigFolder)";
write-verbose "filename = $($Node.ConfigFile)";
return (Test-Path $Node.ConfigFile);
}
GetScript = { @{Configured = (Test-Path $Node.ConfigFile)} }
DependsOn = "[File]ConfigurationFolder"
}

}
}

作为引用,我的配置数据如下所示:
$config = @{
AllNodes = @(
@{
NodeName = "*"
ConfigFolder = "C:\myapp\config"
ConfigFile = "C:\myapp\config\config.txt"
}
@{
NodeName = "ServerA"
Enabled = "true"
}
@{
NodeName = "ServerB"
Enabled = "false"
}
)
}

我正在应用以下 DSC:
$mof = MyApp -ConfigurationData $config;
Start-DscConfiguration MyApp –Wait –Verbose;

当我应用此配置时,它很高兴地创建了文件夹,但无法对配置文件执行任何操作。查看下面的输出,很明显这是因为 $Node 变量在 ConfigurationFile/TestScript 的范围内为空,但我不知道如何从该块中引用它。
LCM:  [ Start  Resource ]  [[Script]ConfigurationFile]
LCM: [ Start Test ] [[Script]ConfigurationFile]
[[Script]ConfigurationFile] running ConfigurationFile.TestScript
[[Script]ConfigurationFile] node is null = True
[[Script]ConfigurationFile] folder =
[[Script]ConfigurationFile] filename =
LCM: [ End Test ] [[Script]ConfigurationFile] in 0.4850 seconds.

我花了一整天的时间在网上搜索这个特定的问题,但是所有变量、参数和配置数据的示例都使用文件和注册表资源或其他非脚本资源,我已经在“ConfigurationFolder "阻止我的脚本。我遇到的问题是如何从像我的“ConfigurationFile”这样的脚本资源中引用配置数据。

我画了一个完整的空白,所以任何帮助将不胜感激。如果所有其他方法都失败了,我可能必须为每个服务器创建一个单独的“配置”脚本并对值进行硬编码,如果可能的话,我真的不想这样做。

干杯,

麦克风

最佳答案

ConfigurationData 仅在编译 MOF 文件时存在,在 DSC 引擎应用您的脚本时不存在。 Script 资源的 SetScript、GetScript 和 TestScript 属性实际上是字符串,而不是脚本块。

可以生成这些脚本字符串(已经扩展了 ConfigurationData 中的所有必需数据),但是您必须小心正确使用转义符、子表达式和引号。

我在原始 TechNet 主题 http://social.technet.microsoft.com/Forums/en-US/2eb97d67-f1fb-4857-8840-de9c4cb9cae0/dsc-configuration-data-for-script-resources?forum=winserverpowershell 上发布了一个简短的示例。

关于PowerShell DSC - 如何将配置参数传递给 ScriptResources?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23346901/

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