我有一个简单的问题。我一直在尝试使用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/