是否有可能从一个字符串获取System.Type然后将其应用于一个变量?如何动态设置PowerShell变量的类型?
以下是我试图转换,使其更安全(即不涉及调用一个字符串)功能:
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'。这将允许你的函数支持解析自定义类型,通过传递一个返回新属性值的scriptblock。如果你愿意,你也可以支持一些默认转换器,它可以根据名字查找。让我知道你是否希望我用样本写一个答案。 –
你的意思是'ParseLine {[Convert] :: ToDouble} + ComputerName'?至于现在,我使用'ParseLine($ Type,$ VariableName,$ ParseScript)'将函数定义映射到*,以便我可以为自定义对象执行以下操作:'ParseLine * Response {New-CustomObject $ CurrentLine}'。但是看到转换器的方法会很有趣:) – tkokasih
如果你给我一些解析样本行(以及样本行的预期输出),我会写出一个解析这些行的样本。请编辑问题以添加附加信息。 –