Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Powershell и CLM

Ответить
Настройки темы
PowerShell - [решено] Powershell и CLM

Пользователь


Сообщения: 60
Благодарности: 1

Профиль | Отправить PM | Цитировать


Здравствуйте.
Необходимо в скрипте хранить таблицу, например

Код: Выделить весь код
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, включен по требованию ИБ.
Код: Выделить весь код
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 и не могу придумать как создать массив.
Прошу совета.

Отправлено: 09:26, 15-11-2018

 

Старожил


Сообщения: 245
Благодарности: 49

Профиль | Отправить PM | Цитировать


@densan
а просто хеши не пробовали ?
Код: Выделить весь код
$ExecutionContext.SessionState.LanguageMode = 'ConstrainedLanguage'

 $array = @()
 $array += @{'Name'='Microsoft Visual C++ 2005 Redistributable'; 'OSBits'='x86'; FileName='vcredist_x86_2005.exe'}
 write-output $array[0]['Name']

 Microsoft Visual C++ 2005 Redistributable

Отправлено: 09:37, 15-11-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$array += New-Object PSObject -Property @{Name='Microsoft Visual C++ 2005 Redistributable'; OSBits='x86'; FileName='vcredist_x86_2005.exe'}
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:47, 15-11-2018 | #3


Пользователь


Сообщения: 60
Благодарности: 1

Профиль | Отправить PM | Цитировать


Прошу прощения, не указал что массив делаю чтобы можно было отбирать по фильтру, например
Код: Выделить весь код
$array | where {$_.OSBits -eq 'x86'}
Name                                            OSBits FileName
----                                            ------ --------
Microsoft Visual C++ 2005 Redistributable       x86    vcredist_x86_2005.exe
Microsoft Visual C++ 2013 Redistributable (x86) x86    vcredist_x86_2013.exe
Microsoft Visual C++ 2017 Redistributable (x86) x86    vcredist_x86_2017.exe
Serguei Kouzmine, при использовании хэш-таблицы фильтровать не получится.

Kazun,
командой
Код: Выделить весь код
$array += New-Object PSObject -Property @{Name='Microsoft Visual C++ 2005 Redistributable'; OSBits='x86'; FileName='vcredist_x86_2005.exe'}
добавляется только один элемент, при добавлении второго - получаю ошибку
Код: Выделить весь код
$array = $null
$array += New-Object PSObject -Property @{Name='Microsoft Visual C++ 2005 Redistributable'; OSBits='x86'; FileName='vcredist_x86_2005.exe'}
$array += @{Name='Microsoft Visual C++ 2005 Redistributable'; OSBits='x86'; FileName='vcredist_x86_2005.exe-'}
Сбой вызова метода из-за отсутствия в [System.Management.Automation.PSObject] метода с именем "op_Addition".
строка:1 знак:1
+ $array += @{Name='Microsoft Visual C++ 2005 Redistributable'; OSBits= ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (op_Addition:String) [], RuntimeException
    + FullyQualifiedErrorId : MethodNotFound

Отправлено: 10:31, 15-11-2018 | #4


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$array = @()
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:38, 15-11-2018 | #5


Пользователь


Сообщения: 60
Благодарности: 1

Профиль | Отправить PM | Цитировать


Kazun, большое спасибо.
Так все работает как надо.
Код: Выделить весь код
$ExecutionContext.SessionState.LanguageMode
ConstrainedLanguage
$array = @()
$array += New-Object PSObject -Property @{Name='Microsoft Visual C++ 2005 Redistributable'; OSBits='x86'; FileName='vcredist_x86_2005.exe'}
$array += New-Object PSObject -Property @{Name='Microsoft Visual C++ 2005 Redistributable (x64)'; OSBits='x64'; FileName='vcredist_x64_2005.exe'}
$array

OSBits Name                                            FileName
------ ----                                            --------
x86    Microsoft Visual C++ 2005 Redistributable       vcredist_x86_2005.exe
x64    Microsoft Visual C++ 2005 Redistributable (x64) vcredist_x64_2005.exe


$array | where {$_.OSBits -eq 'x86'}

OSBits Name                                      FileName
------ ----                                      --------
x86    Microsoft Visual C++ 2005 Redistributable vcredist_x86_2005.exe

Отправлено: 10:50, 15-11-2018 | #6


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Цитата densan:
массив делаю чтобы можно было отбирать по фильтру, например
Код: Выделить весь код
$array | where {$_.OSBits -eq 'x86'}

Serguei Kouzmine, при использовании хэш-таблицы фильтровать не получится. »
Serguei Kouzmine не предлагал отказываться от массива, а предлагал заменить объект словарём (ассоциативным массивом). В таком случае меняется синтаксис фильтрации, только и всего:
Код: Выделить весь код
$array | where {$_['OSBits'] -eq 'x86'}

Отправлено: 12:41, 15-11-2018 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Powershell и CLM

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - powershell и snmp mcintosh55 Скриптовые языки администрирования Windows 1 13-12-2016 15:12
PowerShell - PowerShell bort-747 Скриптовые языки администрирования Windows 0 10-04-2012 11:29
PowerShell - PowerShell и Excel tarasov.evgeny Скриптовые языки администрирования Windows 11 15-11-2011 16:27
PowerShell - Powershell и Access tarasov.evgeny Скриптовые языки администрирования Windows 2 09-06-2011 17:06
Разное - PowerShell Butunin Klim Программирование и базы данных 1 31-07-2008 18:39




 
Переход