假设我有一个产品,我想将其安装在非 SSD 驱动器上(如果存在)。否则,我希望将其安装在驱动器 C 上。
例如,以下配置应该在默认位置安装 Sql Server 2016:
Configuration DevWorkstation
{
Import-DscResource –ModuleName PSDesiredStateConfiguration
Import-DscResource -ModuleName SqlServerDsc
node localhost
{
WindowsFeature 'NetFramework45'
{
Name = 'NET-Framework-45-Core'
Ensure = 'Present'
}
SqlSetup 'InstallDefaultInstance'
{
InstanceName = 'MSSQLSERVER'
Features = 'SQLENGINE,SSMS'
SQLCollation = 'SQL_Latin1_General_CP1_CI_AS'
SourcePath = '\\fileserver\installs\en_sql_server_2016_developer_with_service_pack_1_x64_dvd_9548071'
SQLSysAdminAccounts = @('Administrators')
DependsOn = '[WindowsFeature]NetFramework45'
}
}
}
不过,我想先检查是否存在非 SSD 驱动器,如果存在,则将其安装在那里。
据我了解,我无法使用 Powershell 代码,因为该代码在编译期间运行。我需要它在配置期间运行。
我该怎么做?
答案1
使用 Azure Automation DSC Pull 服务器实际上无法做到这一点。正如您所提到的,DSC 文件的编译发生在自动化服务器上,并且它没有要应用到的服务器的详细信息,因此无法将其考虑在内。在编译时,您将提供一个驱动器以进行安装,这就是将要使用的驱动器。这就是 DSC Pull 服务器与 Chef 或 Puppet 等相比的不足之处,这些工具确实有关于客户端计算机的信息,并且可以在编译时使用这些信息。
除了使用一致的驱动器号并在构建 Azure VM 时确保此驱动器按照您想要的方式配置(是否为 SSD)之外,使用自动化服务器实际上没有其他解决方法。
另一种选择是,您可以使用 Azure VM DSC 扩展将 DSC 文件推送到 VM 并应用,而不是使用自动化服务器。如果这样做,您将失去 DSC 集中管理和报告的所有好处,但您的 DSC 文件是在将要运行的服务器上编译的,因此可以考虑本地变量。请参阅这里有关 DSC 扩展的更多详细信息。