添加到对象的列上的表达式收到错误散列文字不完整
Expression on Column Addition To Object Receives Error Hash Literal Incomplete
为什么我可以在脚本块外执行命令,但不能在脚本块内执行?
我的最终目标是根据预定义的类别对目录列表进行排序。该代码从目录列表中创建一个动态对象并添加两列。创建的第一列是根据名称派生的类别,基于第一列的第二列是用于稍后排序的索引。
实际错误
The hash literal was incomplete.
At line:0 char:0
独立工作代码
$importance = "Hierarchy", "Item", "UPC", "Color", "Price"
$importance.IndexOf('UPC') # returns 2
失败代码
总体任务是列出目录,最终按$importance
对列表进行排序。通过创建动态列,它将在名为 Index
.
的新列上进行排序(未显示)
$match = "UPC|Item|Color|Price|Hierarchy"
gci $incrementalTargetDir `
| Select-Object Name, @{label="Category"; Expression= {[regex]::match($_.BaseName, $match).Groups[0].Value}} `
| Select-Object Name, @{label="Index"; Expression= { $importance.IndexOf($_.Category) }
第二次失败Select-Object
首先select成功returns这个数据:
Name Category
---- --------
ColorStyleSize.txt Color
Item.txt Item
FieldProductHierarchy.txt Hierarchy
UPC.txt UPC
PriceAdjust.txt Price
还尝试添加范围 script:
,结果相同:
…. Expression= { $script:importance.IndexOf($_.Category)
通过 运行将此代码作为脚本,我能够重现该问题。第二个 Select-Object
中的散列 table 缺少结束 }
会引发此错误。添加缺失的 }
后,我就可以 运行 毫无问题地编写代码了。
另一种方法是使用 foreach 循环和自定义对象输出。如果不想排除 non-matched 项,可以删除 if
语句。
$incrementalTargetDir = 'Drive:\Folder1\Folder2'
$importance = "Hierarchy", "Item", "UPC", "Color", "Price"
$match = "UPC|Item|Color|Price|Hierarchy"
foreach ($file in (Get-ChildItem $incrementalTargetDir)) {
$Category = $null
$Category = [regex]::match($file.BaseName, $match).Groups[0].Value
if ($Category) {
[pscustomobject]@{
Name = $file.Name
Category = $Category
Index = $importance.IndexOf($Category)
}
}
}
为什么我可以在脚本块外执行命令,但不能在脚本块内执行?
我的最终目标是根据预定义的类别对目录列表进行排序。该代码从目录列表中创建一个动态对象并添加两列。创建的第一列是根据名称派生的类别,基于第一列的第二列是用于稍后排序的索引。
实际错误
The hash literal was incomplete.
At line:0 char:0
独立工作代码
$importance = "Hierarchy", "Item", "UPC", "Color", "Price"
$importance.IndexOf('UPC') # returns 2
失败代码
总体任务是列出目录,最终按$importance
对列表进行排序。通过创建动态列,它将在名为 Index
.
$match = "UPC|Item|Color|Price|Hierarchy"
gci $incrementalTargetDir `
| Select-Object Name, @{label="Category"; Expression= {[regex]::match($_.BaseName, $match).Groups[0].Value}} `
| Select-Object Name, @{label="Index"; Expression= { $importance.IndexOf($_.Category) }
第二次失败Select-Object
首先select成功returns这个数据:
Name Category
---- --------
ColorStyleSize.txt Color
Item.txt Item
FieldProductHierarchy.txt Hierarchy
UPC.txt UPC
PriceAdjust.txt Price
还尝试添加范围 script:
,结果相同:
…. Expression= { $script:importance.IndexOf($_.Category)
通过 运行将此代码作为脚本,我能够重现该问题。第二个 Select-Object
中的散列 table 缺少结束 }
会引发此错误。添加缺失的 }
后,我就可以 运行 毫无问题地编写代码了。
另一种方法是使用 foreach 循环和自定义对象输出。如果不想排除 non-matched 项,可以删除 if
语句。
$incrementalTargetDir = 'Drive:\Folder1\Folder2'
$importance = "Hierarchy", "Item", "UPC", "Color", "Price"
$match = "UPC|Item|Color|Price|Hierarchy"
foreach ($file in (Get-ChildItem $incrementalTargetDir)) {
$Category = $null
$Category = [regex]::match($file.BaseName, $match).Groups[0].Value
if ($Category) {
[pscustomobject]@{
Name = $file.Name
Category = $Category
Index = $importance.IndexOf($Category)
}
}
}