Powershell New-Object: не удается найти тип [System.Net.Http.Httpclient] внутри класса в качестве члена [дубликат]

Используйте цикл while ...

var i=0, item, items = ['one','two','three'];
while(item = items[i++]){
    console.log(item);
}

logs: «один», «два», «три»

. И для обратного порядка еще более эффективный loop

var items = ['one','two','three'], i = items.length;
while(i--){
    console.log(items[i]);
}

logs: 'three', 'two', 'one'

Или классический цикл for

var items = ['one','two','three']
for(var i=0, l = items.length; i < l; i++){
    console.log(items[i]);
}

: «один», «два», «три»

Ссылка: http://www.sitepoint.com/google-closure-how-not-to-write-javascript/

5
задан Dakota Lorance 6 January 2016 в 16:24
поделиться

2 ответа

Каждый скрипт PowerShell полностью разбирается до того, как будет выполнен первый оператор в скрипте. Неразрешимый токен имени типа внутри определения класса считается ошибкой синтаксического анализа. Чтобы решить вашу проблему, вам необходимо загрузить свои типы до того, как будет проанализировано определение класса, поэтому определение класса должно быть в отдельном файле. Например:

Main.ps1:

Add-Type -AssemblyName System.Printing
Add-Type -AssemblyName ReachFramework

. $PSScriptRoot\Class.ps1

Class.ps1:

using namespace System.Management
using namespace System.Printing

Class PrinterObject
{
    [string]$Name
    [PrintServer]$Server
    [PrintQueue]$Queue
    [PrintTicket]$Ticket
    [ManagementObject]$Unit
    [bool]$IsDefault
}

Другая возможность была бы вставлять Class.ps1 в виде строки и используйте Invoke-Expression для его выполнения. Это задержит парсинг определения класса до времени, в котором доступны типы.

Add-Type -AssemblyName System.Printing
Add-Type -AssemblyName ReachFramework

Invoke-Expression @‘
    using namespace System.Management
    using namespace System.Printing

    Class PrinterObject
    {
        [string]$Name
        [PrintServer]$Server
        [PrintQueue]$Queue
        [PrintTicket]$Ticket
        [ManagementObject]$Unit
        [bool]$IsDefault
    }
’@
10
ответ дан PetSerAl 24 August 2018 в 18:54
поделиться

В дополнение Полезный ответ PetSerAl :

using assembly должен быть правильным решением, но его использование при время разбора еще не реализовано с Windows PowerShell v5.1 / PowerShell Core v6.1, поскольку для него требуется дополнительная работа , чтобы избежать возможности для нежелательного выполнения произвольных код, когда сборка загружена.

Реализация этой функции была освещена зеленым цветом в этой проблеме GitHub , и необходимая работа отслеживается как часть этой проблемы .

0
ответ дан mklement0 24 August 2018 в 18:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: