powershell - 我可以在自定义DSC资源中的get,set,test方法之间共享变量吗?

标签 powershell dsc

我有一个简单的问题。我一直在尝试使用Powershell DSC,并且创建了一个自定义资源来更改客户端计算机的CD驱动器号。

我当前的代码可以运行,但是我想看看它是否可以更高效。请参阅下面的代码:

enum Ensure 
{ 
    Absent 
   Present 
}

[DscResource()]
class ChangeCDDriveLetter {

[DscProperty(Key)]
[string]$RequiredCDDriveLetter
[DscProperty(NotConfigurable)]
[string]$CurrentCDDriveLetter
[DscProperty(NotConfigurable)]
[string]$CurrentCDVolume

[ChangeCDDriveLetter] Get() {

    $This.CurrentCDDriveLetter = $This.CheckCurrentDriveLetter()
    $This.CurrentCDVolume = $This.CheckCurrentVolume($This.CurrentCDDriveLetter)

    Return $This

}

[Void] Set(){

    $This.CurrentCDDriveLetter = $This.CheckCurrentDriveLetter()
    $This.CurrentCDVolume = $This.CheckCurrentVolume($This.CurrentCDDriveLetter)

    mountvol $This.CurrentCDDriveLetter /d
    mountvol $This.RequiredCDDriveLetter $This.CurrentCDVolume

}

[bool] Test(){

    $This.CurrentCDDriveLetter = $This.CheckCurrentDriveLetter()
    $This.CurrentCDVolume = $This.CheckCurrentVolume($This.CurrentCDDriveLetter)

    Write-Verbose ("Current CD drive letter is: " + $This.CurrentCDDriveLetter)

    if ($This.CurrentCDDriveLetter -ne $This.RequiredCDDriveLetter){

        Write-Verbose ("The CD drive letter should be: " + $This.RequiredCDDriveLetter)
        Write-Verbose ("Setting the CD drive letter to: " + $This.RequiredCDDriveLetter)
        Return $False
    }
    else { 

        Write-Verbose "This is the correct drive letter."
        Return $True 

    }     
}

[string] CheckCurrentDriveLetter(){

    $CurrentDriveLetter = (Get-WmiObject win32_logicaldisk -filter 'DriveType=5').DeviceID
    return $CurrentDriveLetter

}

[string] CheckCurrentVolume($DriveLetter){

    $Volume = (mountvol $DriveLetter /l).Trim()
    Return $Volume

}

}

我的问题是关于以下重复行:
$This.CurrentCDDriveLetter = $This.CheckCurrentDriveLetter()

如您所见,此信息收集在Set,Get和Test方法中。

是否可以一次收集此信息并在其他方法之间共享此信息?

因此,我将在Test方法中收集信息,并将此信息传递给Set方法?我想这样做实际上不会对当前资源产生太大影响,但是我仍然想知道是否有可能,因此我可以在将来的资源中使用它来使它们尽可能高效。

提前致谢!

亲切的问候,
鲍勃·史密恩克

最佳答案

您不应假定每次DSC运行资源时都将拥有相同的实例。因此,没有好的方法来使实例字段或实例属性在两次执行之间持久存在。

如果该值对于计算机是静态的,则可以尝试将其存储在静态字段中,但是同样不要假定方法的调用顺序。

关于powershell - 我可以在自定义DSC资源中的get,set,test方法之间共享变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40399903/

相关文章:

c# - 如何以编程方式或使用命令行程序更新现有 CA 模板的有效期

powershell - 使用 PowerShell 输出没有列标题的数据

powershell - DSC 脚本资源不读取环境变量

powershell - 在 Azure 自动化中编译包含 Get-NetAdapter 的 DSC 配置

windows - Powershell DSC Pull Server 抛出内部错误 - Microsoft.Isam.Esent.Interop not found

powershell - 如何使用 PowerShell Desired State Configuration 升级 Windows 服务

powershell - 在 PowerShell 中将 Hashtable 与 switch case 结合使用

powershell - dig (DNS Lookup) 在 Windows 上指定 DNS 服务器

powershell - 如何自动导入系统模块?

powershell - 执行 Start-DscConfiguration 时如何解决 "Cannot invoke the SendConfigurationApply method."?