Определите физический размер мадам программно на OSX

С пустым массивом в качестве прямого входного конвейера, ничего не передается по конвейеру , потому что массив нумеруется , перечисляется , и поскольку перечислять нечего - пустой массив не имеет элементов - блок скрипта Where никогда не выполняется:

# The empty array is enumerated, and since there's nothing to enumerate,
# the Where[-Object] script block is never invoked.
@() | Where { 

С пустым массивом в качестве прямого входного конвейера, ничего не передается по конвейеру , потому что массив нумеруется , перечисляется , и поскольку перечислять нечего - пустой массив не имеет элементов - блок скрипта Where никогда не выполняется:

[110]

В отличие от этого, "[]" | ConvertFrom-Json создает пустой массив как один выходной объект вместо того, чтобы перечислять его (несуществующие) элементы, потому что ConvertFrom-Json по проекту не перечисляет элементы массивов, которые он выводит ; это эквивалентно: поведение

# Empty array is sent as a single object through the pipeline.
# The Where script block is invoked once and sees 

С пустым массивом в качестве прямого входного конвейера, ничего не передается по конвейеру , потому что массив нумеруется , перечисляется , и поскольку перечислять нечего - пустой массив не имеет элементов - блок скрипта Where никогда не выполняется:

[110]

В отличие от этого, "[]" | ConvertFrom-Json создает пустой массив как один выходной объект вместо того, чтобы перечислять его (несуществующие) элементы, потому что ConvertFrom-Json по проекту не перечисляет элементы массивов, которые он выводит ; это эквивалентно: поведение

[111]

ConvertFrom-Json удивительно в контексте PowerShell - командлеты обычно перечисляют несколько выходов - но [1175 ] имеет смысл в контексте анализа JSON ; в конце концов, информация была бы потеряна , если бы ConvertFrom-Json перечислил пустой массив, учитывая, что тогда вы не сможете отличить это от пустого ввода JSON ("" | ConvertFrom-Json).

Это напряжение обсуждается в этой проблеме GitHub .

Консенсус заключается в том, что оба варианта использования являются законными и что у пользователей должен быть выбор между двумя вариантами поведения - перечислением или нет - с помощью переключателя ]; Начиная с PowerShell Core 6.2.0, формальное решение не было принято, но если должна быть сохранена обратная совместимость, это должно быть поведение перечисления, которое является opt-in (например, -Enumerate) . [+1162]

Если перечисление желательно, пока - обходной путь - это принудительное перечисление , просто заключив вызов ConvertFrom-Json в (...) (который преобразует его в [ 1150] выражение , а выражения всегда перечисляют выходные данные команды при использовании в конвейере):

# (...) around the ConvertFrom-Json call forces enumeration of its output.
# The empty array has nothing to enumerate, so the Where script block is never invoked.
("[]" | ConvertFrom-Json) | Where { 

С пустым массивом в качестве прямого входного конвейера, ничего не передается по конвейеру , потому что массив нумеруется , перечисляется , и поскольку перечислять нечего - пустой массив не имеет элементов - блок скрипта Where никогда не выполняется:

[110]

В отличие от этого, "[]" | ConvertFrom-Json создает пустой массив как один выходной объект вместо того, чтобы перечислять его (несуществующие) элементы, потому что ConvertFrom-Json по проекту не перечисляет элементы массивов, которые он выводит ; это эквивалентно: поведение

[111]

ConvertFrom-Json удивительно в контексте PowerShell - командлеты обычно перечисляют несколько выходов - но [1175 ] имеет смысл в контексте анализа JSON ; в конце концов, информация была бы потеряна , если бы ConvertFrom-Json перечислил пустой массив, учитывая, что тогда вы не сможете отличить это от пустого ввода JSON ("" | ConvertFrom-Json).

Это напряжение обсуждается в этой проблеме GitHub .

Консенсус заключается в том, что оба варианта использования являются законными и что у пользователей должен быть выбор между двумя вариантами поведения - перечислением или нет - с помощью переключателя ]; Начиная с PowerShell Core 6.2.0, формальное решение не было принято, но если должна быть сохранена обратная совместимость, это должно быть поведение перечисления, которое является opt-in (например, -Enumerate) . [+1162]

Если перечисление желательно, пока - обходной путь - это принудительное перечисление , просто заключив вызов ConvertFrom-Json в (...) (который преобразует его в [ 1150] выражение , а выражения всегда перечисляют выходные данные команды при использовании в конвейере):

[112]

Что касается того, что вы пытались : ваша попытка получить доступ к Свойство .Count и ваше использование @(...):

$y = ("[]" | ConvertFrom-Json) | Where { 

С пустым массивом в качестве прямого входного конвейера, ничего не передается по конвейеру , потому что массив нумеруется , перечисляется , и поскольку перечислять нечего - пустой массив не имеет элементов - блок скрипта Where никогда не выполняется:

[110]

В отличие от этого, "[]" | ConvertFrom-Json создает пустой массив как один выходной объект вместо того, чтобы перечислять его (несуществующие) элементы, потому что ConvertFrom-Json по проекту не перечисляет элементы массивов, которые он выводит ; это эквивалентно: поведение

[111]

ConvertFrom-Json удивительно в контексте PowerShell - командлеты обычно перечисляют несколько выходов - но [1175 ] имеет смысл в контексте анализа JSON ; в конце концов, информация была бы потеряна , если бы ConvertFrom-Json перечислил пустой массив, учитывая, что тогда вы не сможете отличить это от пустого ввода JSON ("" | ConvertFrom-Json).

Это напряжение обсуждается в этой проблеме GitHub .

Консенсус заключается в том, что оба варианта использования являются законными и что у пользователей должен быть выбор между двумя вариантами поведения - перечислением или нет - с помощью переключателя ]; Начиная с PowerShell Core 6.2.0, формальное решение не было принято, но если должна быть сохранена обратная совместимость, это должно быть поведение перечисления, которое является opt-in (например, -Enumerate) . [+1162]

Если перечисление желательно, пока - обходной путь - это принудительное перечисление , просто заключив вызов ConvertFrom-Json в (...) (который преобразует его в [ 1150] выражение , а выражения всегда перечисляют выходные данные команды при использовании в конвейере):

[112]

Что касается того, что вы пытались : ваша попытка получить доступ к Свойство .Count и ваше использование @(...):

[113]

С вызовом ConvertFrom-Json, заключенным в (...), ваша общая команда возвращает «ничто»: свободно говоря, $null, но, точнее, «массив-значение ноль», который является синглтоном [System.Management.Automation.Internal.AutomationNull]::Value, который указывает на отсутствие вывода команды. (В большинстве случаев последний обрабатывается так же, как $null, хотя, в частности, не используется в качестве входных данных конвейера.)

[System.Management.Automation.Internal.AutomationNull]::Value не имеет свойства .Count, поэтому с [ 1123] или выше, вы получите ошибку The property 'count' cannot be found on this object..

Оборачивая весь конвейер в @(...), оператор подвыражения массива, вы гарантируете обработку выходных данных как массива , который с помощью [null output со значением массива создает пустой массив - что имеет свойство .Count.

Обратите внимание, что вы должны иметь возможность вызывать .Count для $null и [System.Management.Automation.Internal.AutomationNull]::Value , учитывая, что PowerShell добавляет свойство .Count в каждый [ 1154] объект, если он еще не существует, включая скаляры, в похвальном стремлении унифицировать обработку коллекций и скаляров.

То есть с Set-StrictMode, установленным на -Off (по умолчанию) или на -Version 1, следующее работает и - разумно - возвращает 0:

# With Set-StrictMode set to -Off (the default) or -Version 1:

# $null sensibly has a count of 0.
PS> $null.Count
0

# So does the "array-valued null", [System.Management.Automation.Internal.AutomationNull]::Value 
# `. {}` is a simple way to produce it.
PS> (. {}).Count # `. {}` outputs 
0
[ 1170] То, что вышеупомянутое в настоящее время не не работает с Set-StrictMode -Version 2 или выше (по состоянию на PowerShell Core 6.2.0), следует считать ошибкой , как сообщалось в , в этом выпуске GitHub (не менее Джеффри Сновером).

.name -eq "Baz" } $y.Count # Fails with Set-StrictMode -Version 2 or higher

С вызовом ConvertFrom-Json, заключенным в (...), ваша общая команда возвращает «ничто»: свободно говоря, $null, но, точнее, «массив-значение ноль», который является синглтоном [System.Management.Automation.Internal.AutomationNull]::Value, который указывает на отсутствие вывода команды. (В большинстве случаев последний обрабатывается так же, как $null, хотя, в частности, не используется в качестве входных данных конвейера.)

[System.Management.Automation.Internal.AutomationNull]::Value не имеет свойства .Count, поэтому с [ 1123] или выше, вы получите ошибку The property 'count' cannot be found on this object..

Оборачивая весь конвейер в @(...), оператор подвыражения массива, вы гарантируете обработку выходных данных как массива , который с помощью [null output со значением массива создает пустой массив - что имеет свойство .Count.

Обратите внимание, что вы должны иметь возможность вызывать .Count для $null и [System.Management.Automation.Internal.AutomationNull]::Value , учитывая, что PowerShell добавляет свойство .Count в каждый [ 1154] объект, если он еще не существует, включая скаляры, в похвальном стремлении унифицировать обработку коллекций и скаляров.

То есть с Set-StrictMode, установленным на -Off (по умолчанию) или на -Version 1, следующее работает и - разумно - возвращает 0:

# With Set-StrictMode set to -Off (the default) or -Version 1:

# $null sensibly has a count of 0.
PS> $null.Count
0

# So does the "array-valued null", [System.Management.Automation.Internal.AutomationNull]::Value 
# `. {}` is a simple way to produce it.
PS> (. {}).Count # `. {}` outputs 
0
[ 1170] То, что вышеупомянутое в настоящее время не не работает с Set-StrictMode -Version 2 или выше (по состоянию на PowerShell Core 6.2.0), следует считать ошибкой , как сообщалось в , в этом выпуске GitHub (не менее Джеффри Сновером).

.name -eq "Baz" }


Что касается того, что вы пытались : ваша попытка получить доступ к Свойство .Count и ваше использование @(...):

$y = ("[]" | ConvertFrom-Json) | Where { 

С пустым массивом в качестве прямого входного конвейера, ничего не передается по конвейеру , потому что массив нумеруется , перечисляется , и поскольку перечислять нечего - пустой массив не имеет элементов - блок скрипта Where никогда не выполняется:

[110]

В отличие от этого, "[]" | ConvertFrom-Json создает пустой массив как один выходной объект вместо того, чтобы перечислять его (несуществующие) элементы, потому что ConvertFrom-Json по проекту не перечисляет элементы массивов, которые он выводит ; это эквивалентно: поведение

[111]

ConvertFrom-Json удивительно в контексте PowerShell - командлеты обычно перечисляют несколько выходов - но [1175 ] имеет смысл в контексте анализа JSON ; в конце концов, информация была бы потеряна , если бы ConvertFrom-Json перечислил пустой массив, учитывая, что тогда вы не сможете отличить это от пустого ввода JSON ("" | ConvertFrom-Json).

Это напряжение обсуждается в этой проблеме GitHub .

Консенсус заключается в том, что оба варианта использования являются законными и что у пользователей должен быть выбор между двумя вариантами поведения - перечислением или нет - с помощью переключателя ]; Начиная с PowerShell Core 6.2.0, формальное решение не было принято, но если должна быть сохранена обратная совместимость, это должно быть поведение перечисления, которое является opt-in (например, -Enumerate) . [+1162]

Если перечисление желательно, пока - обходной путь - это принудительное перечисление , просто заключив вызов ConvertFrom-Json в (...) (который преобразует его в [ 1150] выражение , а выражения всегда перечисляют выходные данные команды при использовании в конвейере):

[112]

Что касается того, что вы пытались : ваша попытка получить доступ к Свойство .Count и ваше использование @(...):

[113]

С вызовом ConvertFrom-Json, заключенным в (...), ваша общая команда возвращает «ничто»: свободно говоря, $null, но, точнее, «массив-значение ноль», который является синглтоном [System.Management.Automation.Internal.AutomationNull]::Value, который указывает на отсутствие вывода команды. (В большинстве случаев последний обрабатывается так же, как $null, хотя, в частности, не используется в качестве входных данных конвейера.)

[System.Management.Automation.Internal.AutomationNull]::Value не имеет свойства .Count, поэтому с [ 1123] или выше, вы получите ошибку The property 'count' cannot be found on this object..

Оборачивая весь конвейер в @(...), оператор подвыражения массива, вы гарантируете обработку выходных данных как массива , который с помощью [null output со значением массива создает пустой массив - что имеет свойство .Count.

Обратите внимание, что вы должны иметь возможность вызывать .Count для $null и [System.Management.Automation.Internal.AutomationNull]::Value , учитывая, что PowerShell добавляет свойство .Count в каждый [ 1154] объект, если он еще не существует, включая скаляры, в похвальном стремлении унифицировать обработку коллекций и скаляров.

То есть с Set-StrictMode, установленным на -Off (по умолчанию) или на -Version 1, следующее работает и - разумно - возвращает 0:

# With Set-StrictMode set to -Off (the default) or -Version 1:

# $null sensibly has a count of 0.
PS> $null.Count
0

# So does the "array-valued null", [System.Management.Automation.Internal.AutomationNull]::Value 
# `. {}` is a simple way to produce it.
PS> (. {}).Count # `. {}` outputs 
0
[ 1170] То, что вышеупомянутое в настоящее время не не работает с Set-StrictMode -Version 2 или выше (по состоянию на PowerShell Core 6.2.0), следует считать ошибкой , как сообщалось в , в этом выпуске GitHub (не менее Джеффри Сновером).

.name -eq "Baz" } $y.Count # Fails with Set-StrictMode -Version 2 or higher

С вызовом ConvertFrom-Json, заключенным в (...), ваша общая команда возвращает «ничто»: свободно говоря, $null, но, точнее, «массив-значение ноль», который является синглтоном [System.Management.Automation.Internal.AutomationNull]::Value, который указывает на отсутствие вывода команды. (В большинстве случаев последний обрабатывается так же, как $null, хотя, в частности, не используется в качестве входных данных конвейера.)

[System.Management.Automation.Internal.AutomationNull]::Value не имеет свойства .Count, поэтому с [ 1123] или выше, вы получите ошибку The property 'count' cannot be found on this object..

Оборачивая весь конвейер в @(...), оператор подвыражения массива, вы гарантируете обработку выходных данных как массива , который с помощью [null output со значением массива создает пустой массив - что имеет свойство .Count.

Обратите внимание, что вы должны иметь возможность вызывать .Count для $null и [System.Management.Automation.Internal.AutomationNull]::Value , учитывая, что PowerShell добавляет свойство .Count в каждый [ 1154] объект, если он еще не существует, включая скаляры, в похвальном стремлении унифицировать обработку коллекций и скаляров.

То есть с Set-StrictMode, установленным на -Off (по умолчанию) или на -Version 1, следующее работает и - разумно - возвращает 0:

# With Set-StrictMode set to -Off (the default) or -Version 1:

# $null sensibly has a count of 0.
PS> $null.Count
0

# So does the "array-valued null", [System.Management.Automation.Internal.AutomationNull]::Value 
# `. {}` is a simple way to produce it.
PS> (. {}).Count # `. {}` outputs 
0
[ 1170] То, что вышеупомянутое в настоящее время не не работает с Set-StrictMode -Version 2 или выше (по состоянию на PowerShell Core 6.2.0), следует считать ошибкой , как сообщалось в , в этом выпуске GitHub (не менее Джеффри Сновером).

as that empty array. Write-Output -NoEnumerate @() | Where {

С пустым массивом в качестве прямого входного конвейера, ничего не передается по конвейеру , потому что массив нумеруется , перечисляется , и поскольку перечислять нечего - пустой массив не имеет элементов - блок скрипта Where никогда не выполняется:

[110]

В отличие от этого, "[]" | ConvertFrom-Json создает пустой массив как один выходной объект вместо того, чтобы перечислять его (несуществующие) элементы, потому что ConvertFrom-Json по проекту не перечисляет элементы массивов, которые он выводит ; это эквивалентно: поведение

[111]

ConvertFrom-Json удивительно в контексте PowerShell - командлеты обычно перечисляют несколько выходов - но [1175 ] имеет смысл в контексте анализа JSON ; в конце концов, информация была бы потеряна , если бы ConvertFrom-Json перечислил пустой массив, учитывая, что тогда вы не сможете отличить это от пустого ввода JSON ("" | ConvertFrom-Json).

Это напряжение обсуждается в этой проблеме GitHub .

Консенсус заключается в том, что оба варианта использования являются законными и что у пользователей должен быть выбор между двумя вариантами поведения - перечислением или нет - с помощью переключателя ]; Начиная с PowerShell Core 6.2.0, формальное решение не было принято, но если должна быть сохранена обратная совместимость, это должно быть поведение перечисления, которое является opt-in (например, -Enumerate) . [+1162]

Если перечисление желательно, пока - обходной путь - это принудительное перечисление , просто заключив вызов ConvertFrom-Json в (...) (который преобразует его в [ 1150] выражение , а выражения всегда перечисляют выходные данные команды при использовании в конвейере):

# (...) around the ConvertFrom-Json call forces enumeration of its output.
# The empty array has nothing to enumerate, so the Where script block is never invoked.
("[]" | ConvertFrom-Json) | Where { 

С пустым массивом в качестве прямого входного конвейера, ничего не передается по конвейеру , потому что массив нумеруется , перечисляется , и поскольку перечислять нечего - пустой массив не имеет элементов - блок скрипта Where никогда не выполняется:

[110]

В отличие от этого, "[]" | ConvertFrom-Json создает пустой массив как один выходной объект вместо того, чтобы перечислять его (несуществующие) элементы, потому что ConvertFrom-Json по проекту не перечисляет элементы массивов, которые он выводит ; это эквивалентно: поведение

[111]

ConvertFrom-Json удивительно в контексте PowerShell - командлеты обычно перечисляют несколько выходов - но [1175 ] имеет смысл в контексте анализа JSON ; в конце концов, информация была бы потеряна , если бы ConvertFrom-Json перечислил пустой массив, учитывая, что тогда вы не сможете отличить это от пустого ввода JSON ("" | ConvertFrom-Json).

Это напряжение обсуждается в этой проблеме GitHub .

Консенсус заключается в том, что оба варианта использования являются законными и что у пользователей должен быть выбор между двумя вариантами поведения - перечислением или нет - с помощью переключателя ]; Начиная с PowerShell Core 6.2.0, формальное решение не было принято, но если должна быть сохранена обратная совместимость, это должно быть поведение перечисления, которое является opt-in (например, -Enumerate) . [+1162]

Если перечисление желательно, пока - обходной путь - это принудительное перечисление , просто заключив вызов ConvertFrom-Json в (...) (который преобразует его в [ 1150] выражение , а выражения всегда перечисляют выходные данные команды при использовании в конвейере):

[112]

Что касается того, что вы пытались : ваша попытка получить доступ к Свойство .Count и ваше использование @(...):

$y = ("[]" | ConvertFrom-Json) | Where { 

С пустым массивом в качестве прямого входного конвейера, ничего не передается по конвейеру , потому что массив нумеруется , перечисляется , и поскольку перечислять нечего - пустой массив не имеет элементов - блок скрипта Where никогда не выполняется:

[110]

В отличие от этого, "[]" | ConvertFrom-Json создает пустой массив как один выходной объект вместо того, чтобы перечислять его (несуществующие) элементы, потому что ConvertFrom-Json по проекту не перечисляет элементы массивов, которые он выводит ; это эквивалентно: поведение

[111]

ConvertFrom-Json удивительно в контексте PowerShell - командлеты обычно перечисляют несколько выходов - но [1175 ] имеет смысл в контексте анализа JSON ; в конце концов, информация была бы потеряна , если бы ConvertFrom-Json перечислил пустой массив, учитывая, что тогда вы не сможете отличить это от пустого ввода JSON ("" | ConvertFrom-Json).

Это напряжение обсуждается в этой проблеме GitHub .

Консенсус заключается в том, что оба варианта использования являются законными и что у пользователей должен быть выбор между двумя вариантами поведения - перечислением или нет - с помощью переключателя ]; Начиная с PowerShell Core 6.2.0, формальное решение не было принято, но если должна быть сохранена обратная совместимость, это должно быть поведение перечисления, которое является opt-in (например, -Enumerate) . [+1162]

Если перечисление желательно, пока - обходной путь - это принудительное перечисление , просто заключив вызов ConvertFrom-Json в (...) (который преобразует его в [ 1150] выражение , а выражения всегда перечисляют выходные данные команды при использовании в конвейере):

[112]

Что касается того, что вы пытались : ваша попытка получить доступ к Свойство .Count и ваше использование @(...):

[113]

С вызовом ConvertFrom-Json, заключенным в (...), ваша общая команда возвращает «ничто»: свободно говоря, $null, но, точнее, «массив-значение ноль», который является синглтоном [System.Management.Automation.Internal.AutomationNull]::Value, который указывает на отсутствие вывода команды. (В большинстве случаев последний обрабатывается так же, как $null, хотя, в частности, не используется в качестве входных данных конвейера.)

[System.Management.Automation.Internal.AutomationNull]::Value не имеет свойства .Count, поэтому с [ 1123] или выше, вы получите ошибку The property 'count' cannot be found on this object..

Оборачивая весь конвейер в @(...), оператор подвыражения массива, вы гарантируете обработку выходных данных как массива , который с помощью [null output со значением массива создает пустой массив - что имеет свойство .Count.

Обратите внимание, что вы должны иметь возможность вызывать .Count для $null и [System.Management.Automation.Internal.AutomationNull]::Value , учитывая, что PowerShell добавляет свойство .Count в каждый [ 1154] объект, если он еще не существует, включая скаляры, в похвальном стремлении унифицировать обработку коллекций и скаляров.

То есть с Set-StrictMode, установленным на -Off (по умолчанию) или на -Version 1, следующее работает и - разумно - возвращает 0:

# With Set-StrictMode set to -Off (the default) or -Version 1:

# $null sensibly has a count of 0.
PS> $null.Count
0

# So does the "array-valued null", [System.Management.Automation.Internal.AutomationNull]::Value 
# `. {}` is a simple way to produce it.
PS> (. {}).Count # `. {}` outputs 
0
[ 1170] То, что вышеупомянутое в настоящее время не не работает с Set-StrictMode -Version 2 или выше (по состоянию на PowerShell Core 6.2.0), следует считать ошибкой , как сообщалось в , в этом выпуске GitHub (не менее Джеффри Сновером).

.name -eq "Baz" } $y.Count # Fails with Set-StrictMode -Version 2 or higher

С вызовом ConvertFrom-Json, заключенным в (...), ваша общая команда возвращает «ничто»: свободно говоря, $null, но, точнее, «массив-значение ноль», который является синглтоном [System.Management.Automation.Internal.AutomationNull]::Value, который указывает на отсутствие вывода команды. (В большинстве случаев последний обрабатывается так же, как $null, хотя, в частности, не используется в качестве входных данных конвейера.)

[System.Management.Automation.Internal.AutomationNull]::Value не имеет свойства .Count, поэтому с [ 1123] или выше, вы получите ошибку The property 'count' cannot be found on this object..

Оборачивая весь конвейер в @(...), оператор подвыражения массива, вы гарантируете обработку выходных данных как массива , который с помощью [null output со значением массива создает пустой массив - что имеет свойство .Count.

Обратите внимание, что вы должны иметь возможность вызывать .Count для $null и [System.Management.Automation.Internal.AutomationNull]::Value , учитывая, что PowerShell добавляет свойство .Count в каждый [ 1154] объект, если он еще не существует, включая скаляры, в похвальном стремлении унифицировать обработку коллекций и скаляров.

То есть с Set-StrictMode, установленным на -Off (по умолчанию) или на -Version 1, следующее работает и - разумно - возвращает 0:

# With Set-StrictMode set to -Off (the default) or -Version 1:

# $null sensibly has a count of 0.
PS> $null.Count
0

# So does the "array-valued null", [System.Management.Automation.Internal.AutomationNull]::Value 
# `. {}` is a simple way to produce it.
PS> (. {}).Count # `. {}` outputs 
0
[ 1170] То, что вышеупомянутое в настоящее время не не работает с Set-StrictMode -Version 2 или выше (по состоянию на PowerShell Core 6.2.0), следует считать ошибкой , как сообщалось в , в этом выпуске GitHub (не менее Джеффри Сновером).

.name -eq "Baz" }


Что касается того, что вы пытались : ваша попытка получить доступ к Свойство .Count и ваше использование @(...):

$y = ("[]" | ConvertFrom-Json) | Where { 

С пустым массивом в качестве прямого входного конвейера, ничего не передается по конвейеру , потому что массив нумеруется , перечисляется , и поскольку перечислять нечего - пустой массив не имеет элементов - блок скрипта Where никогда не выполняется:

[110]

В отличие от этого, "[]" | ConvertFrom-Json создает пустой массив как один выходной объект вместо того, чтобы перечислять его (несуществующие) элементы, потому что ConvertFrom-Json по проекту не перечисляет элементы массивов, которые он выводит ; это эквивалентно: поведение

[111]

ConvertFrom-Json удивительно в контексте PowerShell - командлеты обычно перечисляют несколько выходов - но [1175 ] имеет смысл в контексте анализа JSON ; в конце концов, информация была бы потеряна , если бы ConvertFrom-Json перечислил пустой массив, учитывая, что тогда вы не сможете отличить это от пустого ввода JSON ("" | ConvertFrom-Json).

Это напряжение обсуждается в этой проблеме GitHub .

Консенсус заключается в том, что оба варианта использования являются законными и что у пользователей должен быть выбор между двумя вариантами поведения - перечислением или нет - с помощью переключателя ]; Начиная с PowerShell Core 6.2.0, формальное решение не было принято, но если должна быть сохранена обратная совместимость, это должно быть поведение перечисления, которое является opt-in (например, -Enumerate) . [+1162]

Если перечисление желательно, пока - обходной путь - это принудительное перечисление , просто заключив вызов ConvertFrom-Json в (...) (который преобразует его в [ 1150] выражение , а выражения всегда перечисляют выходные данные команды при использовании в конвейере):

[112]

Что касается того, что вы пытались : ваша попытка получить доступ к Свойство .Count и ваше использование @(...):

[113]

С вызовом ConvertFrom-Json, заключенным в (...), ваша общая команда возвращает «ничто»: свободно говоря, $null, но, точнее, «массив-значение ноль», который является синглтоном [System.Management.Automation.Internal.AutomationNull]::Value, который указывает на отсутствие вывода команды. (В большинстве случаев последний обрабатывается так же, как $null, хотя, в частности, не используется в качестве входных данных конвейера.)

[System.Management.Automation.Internal.AutomationNull]::Value не имеет свойства .Count, поэтому с [ 1123] или выше, вы получите ошибку The property 'count' cannot be found on this object..

Оборачивая весь конвейер в @(...), оператор подвыражения массива, вы гарантируете обработку выходных данных как массива , который с помощью [null output со значением массива создает пустой массив - что имеет свойство .Count.

Обратите внимание, что вы должны иметь возможность вызывать .Count для $null и [System.Management.Automation.Internal.AutomationNull]::Value , учитывая, что PowerShell добавляет свойство .Count в каждый [ 1154] объект, если он еще не существует, включая скаляры, в похвальном стремлении унифицировать обработку коллекций и скаляров.

То есть с Set-StrictMode, установленным на -Off (по умолчанию) или на -Version 1, следующее работает и - разумно - возвращает 0:

# With Set-StrictMode set to -Off (the default) or -Version 1:

# $null sensibly has a count of 0.
PS> $null.Count
0

# So does the "array-valued null", [System.Management.Automation.Internal.AutomationNull]::Value 
# `. {}` is a simple way to produce it.
PS> (. {}).Count # `. {}` outputs 
0
[ 1170] То, что вышеупомянутое в настоящее время не не работает с Set-StrictMode -Version 2 или выше (по состоянию на PowerShell Core 6.2.0), следует считать ошибкой , как сообщалось в , в этом выпуске GitHub (не менее Джеффри Сновером).

.name -eq "Baz" } $y.Count # Fails with Set-StrictMode -Version 2 or higher

С вызовом ConvertFrom-Json, заключенным в (...), ваша общая команда возвращает «ничто»: свободно говоря, $null, но, точнее, «массив-значение ноль», который является синглтоном [System.Management.Automation.Internal.AutomationNull]::Value, который указывает на отсутствие вывода команды. (В большинстве случаев последний обрабатывается так же, как $null, хотя, в частности, не используется в качестве входных данных конвейера.)

[System.Management.Automation.Internal.AutomationNull]::Value не имеет свойства .Count, поэтому с [ 1123] или выше, вы получите ошибку The property 'count' cannot be found on this object..

Оборачивая весь конвейер в @(...), оператор подвыражения массива, вы гарантируете обработку выходных данных как массива , который с помощью [null output со значением массива создает пустой массив - что имеет свойство .Count.

Обратите внимание, что вы должны иметь возможность вызывать .Count для $null и [System.Management.Automation.Internal.AutomationNull]::Value , учитывая, что PowerShell добавляет свойство .Count в каждый [ 1154] объект, если он еще не существует, включая скаляры, в похвальном стремлении унифицировать обработку коллекций и скаляров.

То есть с Set-StrictMode, установленным на -Off (по умолчанию) или на -Version 1, следующее работает и - разумно - возвращает 0:

# With Set-StrictMode set to -Off (the default) or -Version 1:

# $null sensibly has a count of 0.
PS> $null.Count
0

# So does the "array-valued null", [System.Management.Automation.Internal.AutomationNull]::Value 
# `. {}` is a simple way to produce it.
PS> (. {}).Count # `. {}` outputs 
0
[ 1170] То, что вышеупомянутое в настоящее время не не работает с Set-StrictMode -Version 2 или выше (по состоянию на PowerShell Core 6.2.0), следует считать ошибкой , как сообщалось в , в этом выпуске GitHub (не менее Джеффри Сновером).

.name -eq "Baz" }

ConvertFrom-Json удивительно в контексте PowerShell - командлеты обычно перечисляют несколько выходов - но [1175 ] имеет смысл в контексте анализа JSON ; в конце концов, информация была бы потеряна , если бы ConvertFrom-Json перечислил пустой массив, учитывая, что тогда вы не сможете отличить это от пустого ввода JSON ("" | ConvertFrom-Json).

Это напряжение обсуждается в этой проблеме GitHub .

Консенсус заключается в том, что оба варианта использования являются законными и что у пользователей должен быть выбор между двумя вариантами поведения - перечислением или нет - с помощью переключателя ]; Начиная с PowerShell Core 6.2.0, формальное решение не было принято, но если должна быть сохранена обратная совместимость, это должно быть поведение перечисления, которое является opt-in (например, -Enumerate) . [+1162]

Если перечисление желательно, пока - обходной путь - это принудительное перечисление , просто заключив вызов ConvertFrom-Json в (...) (который преобразует его в [ 1150] выражение , а выражения всегда перечисляют выходные данные команды при использовании в конвейере):

# (...) around the ConvertFrom-Json call forces enumeration of its output.
# The empty array has nothing to enumerate, so the Where script block is never invoked.
("[]" | ConvertFrom-Json) | Where { 

С пустым массивом в качестве прямого входного конвейера, ничего не передается по конвейеру , потому что массив нумеруется , перечисляется , и поскольку перечислять нечего - пустой массив не имеет элементов - блок скрипта Where никогда не выполняется:

[110]

В отличие от этого, "[]" | ConvertFrom-Json создает пустой массив как один выходной объект вместо того, чтобы перечислять его (несуществующие) элементы, потому что ConvertFrom-Json по проекту не перечисляет элементы массивов, которые он выводит ; это эквивалентно: поведение

[111]

ConvertFrom-Json удивительно в контексте PowerShell - командлеты обычно перечисляют несколько выходов - но [1175 ] имеет смысл в контексте анализа JSON ; в конце концов, информация была бы потеряна , если бы ConvertFrom-Json перечислил пустой массив, учитывая, что тогда вы не сможете отличить это от пустого ввода JSON ("" | ConvertFrom-Json).

Это напряжение обсуждается в этой проблеме GitHub .

Консенсус заключается в том, что оба варианта использования являются законными и что у пользователей должен быть выбор между двумя вариантами поведения - перечислением или нет - с помощью переключателя ]; Начиная с PowerShell Core 6.2.0, формальное решение не было принято, но если должна быть сохранена обратная совместимость, это должно быть поведение перечисления, которое является opt-in (например, -Enumerate) . [+1162]

Если перечисление желательно, пока - обходной путь - это принудительное перечисление , просто заключив вызов ConvertFrom-Json в (...) (который преобразует его в [ 1150] выражение , а выражения всегда перечисляют выходные данные команды при использовании в конвейере):

[112]

Что касается того, что вы пытались : ваша попытка получить доступ к Свойство .Count и ваше использование @(...):

$y = ("[]" | ConvertFrom-Json) | Where { 

С пустым массивом в качестве прямого входного конвейера, ничего не передается по конвейеру , потому что массив нумеруется , перечисляется , и поскольку перечислять нечего - пустой массив не имеет элементов - блок скрипта Where никогда не выполняется:

[110]

В отличие от этого, "[]" | ConvertFrom-Json создает пустой массив как один выходной объект вместо того, чтобы перечислять его (несуществующие) элементы, потому что ConvertFrom-Json по проекту не перечисляет элементы массивов, которые он выводит ; эт

7
задан 24 February 2009 в 21:43
поделиться

3 ответа

Вы пытались гуглить?

Это, кажется, ответ: http://lists.apple.com/archives/scitech/2005/Aug/msg00004.html

sysctl () действительно работает, просто необходимо выбрать hw.memsize вместо hw.physmem. hw.memsize, даст Вам uint64_t, таким образом, проблема номера 32 битов.

5
ответ дан 6 December 2019 в 08:45
поделиться

Ответ - использовать sysctl для получения hw.memsize, как было предложено в предыдущем ответе. Вот реальный код для этого:

#include <sys/types.h>
#include <sys/sysctl.h>

...

    int mib[2];
    int64_t physical_memory;
    size_t length;

    // Get the Physical memory size
    mib[0] = CTL_HW;
    mib[1] = HW_MEMSIZE;
    length = sizeof(int64_t);
    sysctl(mib, 2, &physical_memory, &length, NULL, 0);
12
ответ дан 6 December 2019 в 08:45
поделиться
Другие вопросы по тегам:

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