我在尝试让 PowerShell Desired State Configuration 脚本工作来配置内部应用程序时遇到了很多麻烦。问题的根源是我似乎无法将我的配置数据传递到 ScriptResource 中(至少不是我尝试这样做的方式)。
我的脚本应该为我们的内部应用程序创建一个配置文件夹,然后将一些设置写入文件:
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”。
我已经画了一个完整的空白,所以任何帮助将不胜感激。如果一切都失败了,我可能必须为每个服务器创建一个单独的“配置”脚本并对值进行硬编码,如果可能的话,我真的不想这样做。
干杯,
麦克风