当我遇到能够动态地将参数传递给DSC资源的问题时,我正在研究复合资源,并想知道是否还有另一种方法可以解决这个问题。
基本上,我有一个数组(下面),每个所需的文件共享包含一个PSObject。每个PSObject都具有用作我的DSC资源的参数的属性(在本例中为cLocalFileShare社区资源)。
问题是,并非所有这些对象都定义了所有参数。例如,我的部分广告资源没有分配给ReadAccess
权限的任何用户/群组,但在我的ForEach
循环(下方)中,正在传递$null
值对于实际资源,因为没有定义此权限,这会导致资源在尝试为用户ReadAccess
设置$null
权限时出错。
我的问题是,我如何解决这个问题 - 对于这个资源和其他人?
所以,这里的数组包含每个文件共享的PSObject。
$MyConfig = @(
@{
Path = 'D:\Shares\Accounting'
Name = 'Accounting'
Ensure = 'Present'
ChangeAccess = 'AccountingAdmins'
ReadAccess = 'AccountingInterns,FinanceDepartment'
}
@{
Path = 'D:\Shares\Software'
Name = 'Software$'
Ensure = 'Present'
ReadAccess = 'DomainUsers'
}
)
现在,在实际的DSC配置中......
configuration {
ForEach ($ShareProperties in $MyConfig) {
# Each resource is named after the Path specified, but with the colon replaced as that's not valid character for the resource name
cLocalFileShare $ShareProperties.Path.Replace(':','__') {
Path = $ShareProperties.Path
Name = $ShareProperties.Name
Ensure = $ShareProperties.Ensure
ChangeAccess = $ShareProperties.ChangeAccess
ReadAccess = $ShareProperties.ReadAccess
}
}
}
答案 0 :(得分:0)
不是最优雅的解决方案。但是你可以在ForEach循环中使用条件部分。
{{1}}