Powershell 错误“值无法在系统管理自动化 LanguagePrimitives+InternalPSCustomObject 类型中转换”

问题描述 投票:0回答:1

我正在尝试使用 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文件。

windows powershell txt
1个回答
0
投票

错误消息意味着您的 会话在

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
# ...
© www.soinside.com 2019 - 2024. All rights reserved.