我有一個簡單的問題。我一直在使用Powershell DSC進行實驗,並創建了一個自定義資源來更改客戶端計算機的CD驅動器號。我可以在自定義DSC資源中的get,set和測試方法之間共享變量嗎?
我目前的代碼工作,但我想看看它可以更有效。見我下面的代碼:
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方法?我想這樣做對目前的資源並沒有太大的影響,但我仍然想知道這是否可行,以便我可以在未來的資源中使用它,使它們儘可能高效。
在此先感謝!
親切的問候, 鮑勃Smienk