2016-09-22 133 views
0

我存儲了大量的依賴於其他變量的變量,這本身依賴於其他變量,就像這樣:訪問哈希表中的值相同的哈希表在PowerShell中

$soft_version = "5.8.2" 
$soft_filename = "somesoft-${soft_version}.exe" 
$soft_path = "/some/path/$soft_filename" 
$soft_call_args = "/S /forcerestart" 

而且我想存儲該哈希表,這樣我可以更方便地訪問這些值:所以我嘗試了以下

$soft = @{ 
version="5.8.2"; 
filename="somesoft-${soft.version}.exe" 
path="/some/path/$soft.filename" 
call_args = "/S /forcerestart" 
} 

所以,我可以訪問這樣的價值觀:

$soft.version 
$soft.filename 
$soft.path 
$soft.call_args 

但它似乎沒有工作,對應的鍵保持爲空:

$soft 

Name       Value                        
----       -----                        
filename      somesoft-.exe 
path       /some/path/ 
call_args      /S /forcerestart 
version      5.8.2 

有沒有一種方法,我可以訪問相同的哈希表內的哈希表的價值?感謝:-)

回答

1

嘗試在括號包裹,這對我的作品(PSVersion 5):

$soft = @{ 
version="5.8.2"; 
filename="somesoft-$($soft.version).exe" 
path="/some/path/$($soft.filename)" 
call_args = "/S /forcerestart" 
} 

結果

$soft 

Name       Value 
----       ----- 
filename      somesoft-5.8.2.exe 
path       /some/path/somesoft-5.8.2.exe 
call_args      /S /forcerestart 
version      5.8.2 
+0

這不是很清楚我的想法爲什麼需要這樣做,但它也指出我正在使用下劃線(_)而不是點(。)。非常感謝 ! –

+0

我的壞,它不起作用。您可能已嘗試多次,這會導致powershell註冊$ soft.version值。因此,當您引用$($ soft.version)時,powershell已經在內存中擁有整個$ soft哈希表。我不知道這對你是否清楚,但是嘗試打開一個新的ps會話,複製粘貼你的代碼並調用$ soft,你會看到。謝謝你嘗試! –

+0

你完全正確,阿德里安。我很確定,PS不支持遞歸聲明,因爲當var被賦值給另一個var時,var的值是未知的。 – Martin