Помимо пропуска foreach, GetInvalidFileNameChars () выводит char,
[System.IO.Path]::GetInvalidFileNameChars() | foreach { $_.gettype() }
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Char System.ValueType
True True Char System.ValueType
, и этот метод tostring ('x2') предназначен для целых чисел (или байтов).
(1).tostring('x2')
01
Вы можете получить определения, оставив скобки.Второй - тот, который вы пытаетесь запустить.
(1).tostring
OverloadDefinitions
-------------------
string ToString()
string ToString(string format)
string ToString(System.IFormatProvider provider)
string ToString(string format, System.IFormatProvider provider)
string IConvertible.ToString(System.IFormatProvider provider)
string IFormattable.ToString(string format, System.IFormatProvider formatProvider)
Итак (поскольку .tostring имеет более высокий приоритет, чем [int], нам нужны дополнительные скобки) (я в osx, так что естьтолько 2 результата.)
[System.IO.Path]::GetInvalidFileNameChars() | foreach { ([int]$_).tostring('x2') }
00
2f
Если вам нужен format-hex, обновите ваш powershell.
То же самое с последним.Этот метод предназначен для целых чисел:
ForEach ($c in [System.IO.Path]::GetInvalidFileNameChars()) {
echo ([int]$c).ToString("X2") }
Int32.ToString метод: https://docs.microsoft.com/en-us/dotnet/api/system.int32.tostring?view=netframework-4.8#System_Int32_ToString_System_String_