命令gci env:ApiSecret | ConvertTo-Json
用于return长字符串,这是Twitter的API秘密,该字符串将被截断而没有使用JSON的管道。
但是,JSON相当垃圾。
是否有一种“金锁”方法来获取冗长的字符串值而没有多余的细节?
(不幸的是,gci env:
截断了密钥)
答案 0 :(得分:2)
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
。由于您知道所需的确切项目,因此只需直接using variable syntax ...
PS> $env:Path
C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;...
使用the .NET API的等效代码为...
PS> [Environment]::GetEnvironmentVariable('Path')
C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;...
如果您真的想使用Get-*Item
cmdlet,则只需使用属性语法指定它是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
值没有用;实际上,这些命令将不截断地输出整个环境变量。
答案 1 :(得分:1)
您的声明不会删除任何内容。但是,出于控制台显示的目的,它会截断您在控制台中查看的输出。
如果将结果分配给变量或管道文件,则不会截断任何内容。
因此,我对您的问题的假设是,您希望在控制台中查看结果,而控制台不会在此处截断您的内容。
为此,您可以自己将结果写入主机。 这是一个简单的示例。
$envvars = gci env:
$Max = ($envvars.name| Measure-Object -Property length -Maximum).Maximum + 3
$envvars | % {Write-Host $_.name.padright($Max,' ') -ForegroundColor Cyan -NoNewline;Write-Host $_.value}
结果-如您所见,路径变量值不再被截断。
答案 2 :(得分:1)
完整检查环境变量的值 的最简单方法是使用
$env:<varName>
({{3} })语法,在您的情况下,其含义是:$env:ApiSecret
(如果变量名包含特殊字符,请在$
中将{...}
后面的所有内容括起来;例如{{1} })
这样,环境变量的值(总是 strings )长于终端(控制台)的宽度,只需在随后的行上继续。
演示:
${env:ApiSecret(1)}
80个字符。宽终端,您将看到如下输出:
# Simulate a long value (200 chars.)
$env:ApiSecret = 'x' * 199 + '!'
# Output the long value
$env:ApiSecret
如果您确实想使用xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx!
(或Get-Item
,在这种情况下的作用相同),则有两种选择:
Get-ChildItem