gpt4 book ai didi

powershell - 循环遍历哈希,或在 PowerShell 中使用数组

转载 作者:行者123 更新时间:2023-12-03 05:04:45 25 4
gpt4 key购买 nike

我正在使用这段(简化的)代码从 SQL Server 中提取一组表 BCP .

$OutputDirectory = 'c:\junk\'
$ServerOption = "-SServerName"
$TargetDatabase = "Content.dbo."

$ExtractTables = @(
"Page"
, "ChecklistItemCategory"
, "ChecklistItem"
)

for ($i=0; $i -le $ExtractTables.Length – 1; $i++) {
$InputFullTableName = "$TargetDatabase$($ExtractTables[$i])"
$OutputFullFileName = "$OutputDirectory$($ExtractTables[$i])"
bcp $InputFullTableName out $OutputFullFileName -T -c $ServerOption
}

它工作得很好,但现在有些表需要通过 View 提取,有些则不需要。所以我需要一个像这样的数据结构:

"Page"                      "vExtractPage"
, "ChecklistItemCategory" "ChecklistItemCategory"
, "ChecklistItem" "vExtractChecklistItem"

我正在查看哈希值,但没有找到有关如何循环哈希值的任何内容。在这里做什么才是正确的?也许只使用一个数组,但两个值都用空格分隔?

或者我错过了一些明显的东西?

最佳答案

对于脚本来说,速记不是首选;它的可读性较差。 %{} 运算符被视为简写。为了提高可读性和可重用性,应该如何在脚本中完成此操作:

变量设置

PS> $hash = @{
a = 1
b = 2
c = 3
}
PS> $hash

Name Value
---- -----
c 3
b 2
a 1

选项 1:GetEnumerator()

注:个人喜好;语法更容易阅读

GetEnumerator() 方法的执行方式如下:

foreach ($h in $hash.GetEnumerator()) {
Write-Host "$($h.Name): $($h.Value)"
}

输出:

c: 3
b: 2
a: 1

选项 2:按键

Keys 方法将按如下所示完成:

foreach ($h in $hash.Keys) {
Write-Host "${h}: $($hash.$h)"
}

输出:

c: 3
b: 2
a: 1

其他信息

对哈希表进行排序时要小心...

Sort-Object可以将其更改为数组:

PS> $hash.GetType()

IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Hashtable System.Object


PS> $hash = $hash.GetEnumerator() | Sort-Object Name
PS> $hash.GetType()

IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
<小时/>

This and other PowerShell looping are available on my blog.

关于powershell - 循环遍历哈希,或在 PowerShell 中使用数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9015138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com