【发布时间】:2014-04-13 11:54:22
【问题描述】:
是否可以从字符串中获取 System.Type,然后将其应用于变量?
以下是我尝试转换以使其更安全的函数(即不涉及调用字符串):
Function ParseLine($Type, $VariableName, $Value){
Invoke-Expression "[$Type] `$$VariableName = $Value"
}
我查看了New-Variable和Set-Variable,但是定义中并没有与排版相关的参数。
我预计会出现如下所示的内容,但我找不到参数 Type 或等效参数:
Function ParseLine($Type, $VariableName, $Value){
New-Variable -Name $VariableName -Value $Value -Type ([type] $Type)
}
上下文:我正在尝试创建一个简单的解析器定义,如下所示:
$ResponseLogFormat = New-InputFormat {
ParseLine -Type int -VariableName RecordLength
RepeatedSection -RepeatCount $RecordLength {
ParseLine string +ComputerName
ParseLine double +AverageResponse
}
}
$ResponseLogFormat.Parse( $FilePath )
【问题讨论】:
-
与其尝试设置变量类型,或许您应该考虑确保数据是您想要的类型?例如,您可以确保您的 ParseLine 函数采用转换器函数而不是字符串,因此对于 double,它将是
ParseLine [Convert]::ToDouble +ComputerName。这将允许您的函数也支持解析自定义类型,方法是传入一个返回新属性值的脚本块。您也可以支持一些默认转换器,如果您愿意,它可以根据名称进行查找。如果您希望我用示例写答案,请告诉我。 -
你的意思是
ParseLine {[Convert]::ToDouble} +ComputerName?就目前而言,我正在使用像ParseLine($Type,$VariableName,$ParseScript)这样的函数定义,其中'anytype' 映射到*,这样我就可以对自定义对象执行以下操作:ParseLine * Response {New-CustomObject $CurrentLine}。但是看到转换器方法会很有趣:) -
如果您给我一些示例行来解析(以及示例行的预期输出),我将编写一个解析这些行的示例。请编辑问题以添加其他信息。
标签: powershell