Это действительно зависит от того, какие приложения вы хотите разработать. Для большинства целей C # и .NET полностью подходят. Тем не менее, есть определенные виды приложений, которым нужно как можно меньше зависимостей (вспоминаются расширения оболочки), которые непрактичны для приложений .NET. Для тех, кому нужен Win32.
Как всегда, стоит иметь хотя бы базовые знания о Win32, даже если вы используете .NET для большей части своей работы.
Измените первую строку кода на
$results = @(myQuery)
Это всегда будет возвращать массив. См. эту запись в блоге для получения дополнительных сведений.
Меня это тоже укусило. Нет умных идей о том, как исправить $ results.Count
, но foreach можно исправить, переключившись на конвейер.
$scalar = 1
$list = (1,2)
$list | % { $_ }
печатает 1 2
$scalar | % { $_ }
отпечатка 1
На самом деле foreach работает нормально. Все виды использования foreach (ключевое слово foreach, командлет Foreach-Object и псевдонимы Foreach-Object «foreach» и «%») имеют одинаковое поведение при «заключении» рассматриваемого объекта в массив, если это необходимо. Таким образом, любое использование foreach будет работать как со скалярными значениями, так и со значениями массивов.
К сожалению, это означает, что они также работают со значениями NULL. Скажем, да:
$x = $null
foreach ($y in $x) {Write-Host "Hello world 1"}
$x | Foreach-Object {Write-Host "Hello world 2"}
Я получу
"Hello world 1"
"Hello world 2"
из этого.