假设我有一个产品要安装在非 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 代码,因为该代码在编译期间运行。我需要它在配置期间运行。
我该怎么做?
使用 Azure 自动化 DSC 拉取服务器,您无法真正做到这一点。正如您所提到的,DSC 文件的编译发生在自动化服务器上,它没有将要应用到的服务器的详细信息,因此无法将其考虑在内。在编译时,您将为安装发生,这就是将要使用的。与 Chef 或 Puppet 之类的工具相比,这就是 DSC Pull 服务器失败的地方,这些工具确实在客户端机器上拥有信息,并且可以在编译时使用这些信息。
使用自动化服务器并没有真正的解决方法,除了使用一致的驱动器号,然后在构建 Azure VM 时确保该驱动器配置为您想要的方式(SSD 与否)。
另一种选择是不使用自动化服务器,而是使用 Azure VM DSC 扩展将 DSC 文件推送到 VM 并应用。如果这样做,您将失去 DSC 集中管理和报告的所有好处,但您的 DSC 文件是在将要运行的服务器上编译的,因此可以考虑局部变量。有关 DSC 扩展的更多详细信息,请参见此处。