densan
15-11-2018, 09:26
Здравствуйте.
Необходимо в скрипте хранить таблицу, например
Name OSBits FileName
---- ------ --------
Microsoft Visual C++ 2005 Redistributable x86 vcredist_x86_2005.exe
Microsoft Visual C++ 2005 Redistributable (x64) x64 vcredist_x64_2005.exe
Microsoft Visual C++ 2013 Redistributable (x64) x64 vcredist_x64_2013.exe
Microsoft Visual C++ 2013 Redistributable (x86) x86 vcredist_x86_2013.exe
Microsoft Visual C++ 2017 Redistributable (x64) x64 vcredist_x64_2017.exe
Microsoft Visual C++ 2017 Redistributable (x86) x86 vcredist_x86_2017.exe
Задаю её:
$array = @()
$array += [PSCustomObject]@{Name='Microsoft Visual C++ 2005 Redistributable'; OSBits='x86'; FileName='vcredist_x86_2005.exe'}
$array += [PSCustomObject]@{Name='Microsoft Visual C++ 2005 Redistributable (x64)'; OSBits='x64'; FileName='vcredist_x64_2005.exe'}
$array += [PSCustomObject]@{Name='Microsoft Visual C++ 2013 Redistributable (x64)'; OSBits='x64'; FileName='vcredist_x64_2013.exe'}
$array += [PSCustomObject]@{Name='Microsoft Visual C++ 2013 Redistributable (x86)'; OSBits='x86'; FileName='vcredist_x86_2013.exe'}
$array += [PSCustomObject]@{Name='Microsoft Visual C++ 2017 Redistributable (x64)'; OSBits='x64'; FileName='vcredist_x64_2017.exe'}
$array += [PSCustomObject]@{Name='Microsoft Visual C++ 2017 Redistributable (x86)'; OSBits='x86'; FileName='vcredist_x86_2017.exe'}
Но на большом количестве ПК используется CLM (https://blogs.msdn.microsoft.com/powershell/2017/11/02/powershell-constrained-language-mode/), включен по требованию ИБ.
PS C:\> $ExecutionContext.SessionState.LanguageMode
ConstrainedLanguage
И при заполнении массива получаю ошибку:
PS C:\> $array = @()
PS C:\> $array += [PSCustomObject]@{Name='Microsoft Visual C++ 2005 Redistributable'; OSBits='x86'; FileName='vcredist_x86_2005.exe'}
Не удается преобразовать значение в тип "System.Management.Automation.LanguagePrimitives+InternalPSCustomObject". В этом языковом режиме поддерживаются только основные типы.
строка:1 знак:1
+ $array += [PSCustomObject]@{Name='Microsoft Visual C++ 2005 Redistrib ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [], RuntimeException
+ FullyQualifiedErrorId : ConversionSupportedOnlyToCoreTypes
Читаю документацию по CLM и не могу придумать как создать массив.
Прошу совета.
Необходимо в скрипте хранить таблицу, например
Name OSBits FileName
---- ------ --------
Microsoft Visual C++ 2005 Redistributable x86 vcredist_x86_2005.exe
Microsoft Visual C++ 2005 Redistributable (x64) x64 vcredist_x64_2005.exe
Microsoft Visual C++ 2013 Redistributable (x64) x64 vcredist_x64_2013.exe
Microsoft Visual C++ 2013 Redistributable (x86) x86 vcredist_x86_2013.exe
Microsoft Visual C++ 2017 Redistributable (x64) x64 vcredist_x64_2017.exe
Microsoft Visual C++ 2017 Redistributable (x86) x86 vcredist_x86_2017.exe
Задаю её:
$array = @()
$array += [PSCustomObject]@{Name='Microsoft Visual C++ 2005 Redistributable'; OSBits='x86'; FileName='vcredist_x86_2005.exe'}
$array += [PSCustomObject]@{Name='Microsoft Visual C++ 2005 Redistributable (x64)'; OSBits='x64'; FileName='vcredist_x64_2005.exe'}
$array += [PSCustomObject]@{Name='Microsoft Visual C++ 2013 Redistributable (x64)'; OSBits='x64'; FileName='vcredist_x64_2013.exe'}
$array += [PSCustomObject]@{Name='Microsoft Visual C++ 2013 Redistributable (x86)'; OSBits='x86'; FileName='vcredist_x86_2013.exe'}
$array += [PSCustomObject]@{Name='Microsoft Visual C++ 2017 Redistributable (x64)'; OSBits='x64'; FileName='vcredist_x64_2017.exe'}
$array += [PSCustomObject]@{Name='Microsoft Visual C++ 2017 Redistributable (x86)'; OSBits='x86'; FileName='vcredist_x86_2017.exe'}
Но на большом количестве ПК используется CLM (https://blogs.msdn.microsoft.com/powershell/2017/11/02/powershell-constrained-language-mode/), включен по требованию ИБ.
PS C:\> $ExecutionContext.SessionState.LanguageMode
ConstrainedLanguage
И при заполнении массива получаю ошибку:
PS C:\> $array = @()
PS C:\> $array += [PSCustomObject]@{Name='Microsoft Visual C++ 2005 Redistributable'; OSBits='x86'; FileName='vcredist_x86_2005.exe'}
Не удается преобразовать значение в тип "System.Management.Automation.LanguagePrimitives+InternalPSCustomObject". В этом языковом режиме поддерживаются только основные типы.
строка:1 знак:1
+ $array += [PSCustomObject]@{Name='Microsoft Visual C++ 2005 Redistrib ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [], RuntimeException
+ FullyQualifiedErrorId : ConversionSupportedOnlyToCoreTypes
Читаю документацию по CLM и не могу придумать как создать массив.
Прошу совета.