2017-08-12 91 views
1

我一直在使用Get-IniContent Powershell script written by Oliver Lipkau,它的工作非常出色,但是我正在处理的ini文件中有一个STAFF部分,其中包含数字键。Powershell .ini文件处理:使用数字键检索值

PS C:\Windows\System32\WindowsPowerShell\v1.0> $FileContent.STAFF 

Name       Value                           
----       -----                           
11        STFDUTY,CHAR,nvarchar,16,,NULL,,Duty roster                 
41        STFKEY3,CHAR,nvarchar,8,,NULL,,Analysis key 

如果我把这个关键字放在这样的单引号中;

Write-Output $FileContent.STAFF.'11'; 
Write-Output $FileContent.STAFF.'41'; 

我得到的值返回正常,但是我希望它,以建立一个SQL语句,而不是硬编码的钥匙,类似下面的自动化,但我不能完全似乎得到它工作;

$nFields = $FileContent.STAFF.FIELDS; 
for($x = 0; $x -le $nFields; $x++) 
{ Write-Output ("iteration: " + $x + " of " + $nFields); 
    $xString = ("'" + $x.ToString() + "'"); 
    Write-Output ($FileContent.STAFF.$xString); 
} 

似乎不使用单引号这里阅读哈希表(即使它是可以在PowerShell的助手),我的级联时没有返回,直接像一个数字作为第三段/参数。

正常字符串键似乎工作绝对正常,写输出是暂时的,而我建立脚本。

任何提示赞赏,谢谢!

回答

3

尝试使用字符串插值

Write-Output ($FileContent.STAFF."$x") 

或者,如果它确实是一个哈希表,你应该能够使用$table[key]语法

Write-Output ($FileContent.STAFF["$x"]) 
+0

天才!两者都很好,谢谢@Micah Hunsberger – rangi

4

使用Get-IniContentmyinifile.ini包含访问值:

[STAFF] 
11=STFDUTY,CHAR,nvarchar,16,,NULL,,Duty rosteR 
41=STFKEY3,CHAR,nvarchar,8,,NULL,,Analysis key 

我们可以使用的GetEnumerator()来遍历哈希表

$FileContent.STAFF.GetEnumerator() | ForEach-Object{ 
     $message = '{0}={1}' -f $_.key, $_.value 
     Write-Output $message 
} 

将返回:

11:STFDUTY,CHAR,nvarchar,16,,NULL,,Duty rosteR 
41:STFKEY3,CHAR,nvarchar,8,,NULL,,Analysis key 

鉴于同样的原理上面你可以存储在一个单独的变量中的每个键和值,只存储名称或只有关键,等等。

+0

谢谢@meue非常优雅,出色地工作..!任何知道如何使用我从来没有听说过的晦涩Powershell命令的人都会对它印象最深刻。很满意第一个答案,谢谢。 – rangi