$ OFS - разделитель выходного поля . Удобный способ указать, как элементы массива разделяются при визуализации в строку:
PS> $OFS = ', '
PS> "$(1..5)"
1, 2, 3, 4, 5
PS> $OFS = ';'
PS> "$(1..5)"
1;2;3;4;5
PS> $OFS = $null # set back to default
PS> "$(1..5)"
1 2 3 4 5
Всегда гарантируем, что вы получите результат массива . Рассмотрим этот код:
PS> $files = dir *.iMayNotExist
PS> $files.length
$ файлы в этом случае могут быть $ null, скалярным значением или массивом значений. $ files.length не даст вам количество файлов, найденных для $ null или для одного файла. В случае одного файла вы получите размер файла !! Всякий раз, когда я не уверен, какой объем данных я получу, я всегда заключаю команду в подвыражение массива следующим образом:
PS> $files = @(dir *.iMayNotExist)
PS> $files.length # always returns number of files in array
Тогда $ files всегда будет массивом. Он может быть пустым или содержать только один элемент, но будет массивом. Это значительно упрощает рассуждения с результатом.
Поддержка ковариации массива:
PS> $arr = '127.0.0.1','192.168.1.100','192.168.1.101'
PS> $ips = [system.net.ipaddress[]]$arr
PS> $ips | ft IPAddressToString, AddressFamily -auto
IPAddressToString AddressFamily
----------------- -------------
127.0.0.1 InterNetwork
192.168.1.100 InterNetwork
192.168.1.101 InterNetwork
Сравнение массивов с помощью Compare-Object :
PS> $preamble = [System.Text.Encoding]::UTF8.GetPreamble()
PS> $preamble | foreach {"0x{0:X2}" -f $_}
0xEF
0xBB
0xBF
PS> $fileHeader = Get-Content Utf8File.txt -Enc byte -Total 3
PS> $fileheader | foreach {"0x{0:X2}" -f $_}
0xEF
0xBB
0xBF
PS> @(Compare-Object $preamble $fileHeader -sync 0).Length -eq 0
True
Если хотите узнать больше, посмотрите мою бесплатную электронную книгу - Effective PowerShell .