我正在尝试使用 powershell 读取 txt 文件,仅读取某些字符
$TxtFilePath = "C:\Users\myname\mycode\mydata.txt"
$TxtData = Get-Content $TxtFilePath | ForEach-Object {
# Ensure the line is long enough before extracting substrings
$Line = $_.PadRight(138) # Pad the line to ensure it has at least 138 characters
$entry = @{
LastName = $Line.Substring(18, 40).Trim()
FirstName = $Line.Substring(58, 40).Trim()
Birthdate = $Line.Substring(128, 10).Trim()
}
[PSCustomObject]$entry
}
第 N 到第 N 个字符是对应值的空格(虽然有时例如名称只有 5 个字符,但第 18-58 个字符是为姓氏准备的)。 当我运行该代码时,错误是 ”“” 该值无法转换为类型“System.Management.Automation.LanguagePrimitives+InternalPSCustomObject”。此语言模式仅支持核心类型。 ”“”
它指的是这一行“”“[PSCustomObject]$entry”“” 希望有任何线索
我确实希望它能按照规则读取txt文件。
错误消息意味着您的 会话在
ConstrainedLanguage
模式下运行(请参阅 about_Language_Modes 帮助主题)。
但是,错误消息表明存在 bug,存在于 Windows PowerShell 以及自 v7.5.0 起的 PowerShell (Core) 7 中:您应该能够使用
[pscustomobject]
强制转换以在约束语言模式下构造实例,鉴于此模式支持类型本身(又名 [psobject]
):
解决方法:
New-Object
而不是强制转换来构建 [pscustomobject]
实例:
# ...
$entry = [ordered] @{
LastName = $Line.Substring(18, 40).Trim()
FirstName = $Line.Substring(58, 40).Trim()
Birthdate = $Line.Substring(128, 10).Trim()
}
New-Object pscustomobject -Property $entry
# ...