Можно ли присвоить строковое значение переменной другого типа, учитывая, что тип данных заранее неизвестен? Например, в приведенном ниже примере как обновить значения хеша $values
без изменения их типов данных:
$values = @{
"Boolean" = $true
"Int" = 5
"DateTime"= (Get-Date)
"Array" = @("A", "B", "C")
}
$stringValues = @{
"Boolean" = 'false'
"Int" = '10'
"DateTime"= '2019-01-02 14:45:59.146'
"Array" = '@("X", "Y", "Z")'
}
"INITIAL VALUES:"
foreach ($key in $values.Keys) {
($key + " = " + $values[$key] + " (" + $values[$key].GetType().FullName + ")")
}
"`nUPDATING..."
foreach ($key in $stringValues.Keys) {
$values[$key] = $stringValues[$key]
}
"`nUPDATED VALUES:"
foreach ($key in $values.Keys) {
($key + " = " + $values[$key] + " (" + $values[$key].GetType().FullName + ")")
}
ВЫВОД:
INITIAL VALUES:
DateTime = 04/23/2019 16:54:13 (System.DateTime)
Array = A B C (System.Object[])
Boolean = True (System.Boolean)
Int = 5 (System.Int32)
UPDATING...
UPDATED VALUES:
DateTime = 2019-01-02 14:45:59.146 (System.String)
Array = @("X", "Y", "Z") (System.String)
Boolean = false (System.String)
Int = 10 (System.String)
Мне нужно, чтобы обновленные значения соответствовали исходным типам данных, а не просто конвертировались в System.String
.
Я гибок в отношении содержания строк. Например. строка, содержащая логическое значение false
, может быть $false
/ false
/ [boolean]false
/ [boolean]$false
/ и т. д., или строка, содержащая массив, может использовать другое форматирование (в основном, все, что проще для преобразования строки в правильный тип данных).
По сути, я хочу имитировать то, что делает командлет ConvertFrom-Json
, когда он устанавливает свойство объекта из строки JSON, только в моем случае у меня нет структуры JSON.
(В случае, если кому-то интересно, что я пытаюсь сделать: я пытаюсь добавить анализатор INI-файлов в мой модуль ConfigFile , и нет, я не могу просто использовать хеш для возврата настроек INI ; Мне нужно загрузить значения в соответствующие PSVariable
s, и чтобы это работало, мне нужно преобразовать строки в соответствующие типы данных.)