Get-ChildItem
- для извлечения всех или поднабора элементов из контейнера. Обратите внимание, что он выводит объект со свойствами Name
и Value
(подставляя Path
в качестве другого длинного значения переменной среды) ...
PS> gci env:Path
Name Value
---- -----
Path C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\WINDO...
Get-Item
дает тот же результат ...
PS> gi env:Path
Name Value
---- -----
Path C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\WINDO...
В любом случае, получаемый объект является DictionaryEntry
...
PS> gi env:Path | Get-Member
TypeName: System.Collections.DictionaryEntry
Name MemberType Definition
---- ---------- ----------
Name AliasProperty Name = Key
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
PSDrive NoteProperty PSDriveInfo PSDrive=Env
PSIsContainer NoteProperty bool PSIsContainer=False
PSPath NoteProperty string PSPath=Microsoft.PowerShell.Core\Environment::path
PSProvider NoteProperty ProviderInfo PSProvider=Microsoft.PowerShell.Core\Environment
Key Property System.Object Key {get;set;}
Value Property System.Object Value {get;set;}
... и когда вы передадите его на ConvertTo-Json
, он будет включать в себя все виды нежелательных свойства этого класса.
Короче, не используйте ConvertTo-Json
для этого. Поскольку вы точно знаете нужный элемент, просто извлеките его напрямую , используя переменный синтаксис ...
PS> $env:Path
C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;...
Эквивалентный код с использованием . NET API будет be ...
PS> [Environment]::GetEnvironmentVariable('Path')
C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;...
Если вы действительно хотите использовать командлет Get-*Item
, вам просто нужно указать, что это свойство Value
, которое вы хотите использовать с помощью синтаксиса свойства ...
PS> (gi env:Path).Value
C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;...
... или Select-Object
...
PS> gi env:Path | Select-Object -ExpandProperty 'Value'
C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;...
Все вышеперечисленные команды будут выводить только [String]
, содержащий все значения этой переменной среды. Я вставил конечные эллипсы, так как показывать мое полное значение Path
здесь бесполезно; на практике эти команды будут выводить всю переменную среды без усечения.