支持所有版本。
通常Powershell中的.Net 类型我们都使用缩略格式。
PS> [System.Management.Automation.LanguagePrimitives]::ConvertTypeNameToPSTypeName("System.String") [string] PS> [System.Management.Automation.LanguagePrimitives]::ConvertTypeNameToPSTypeName("System.Int32") [int] PS> [System.Management.Automation.LanguagePrimitives]::ConvertTypeNameToPSTypeName("System.Management.ManagementObject") [wmi] PS> [System.Management.Automation.LanguagePrimitives]::ConvertTypeNameToPSTypeName("System.DirectoryServices.DirectoryEntry") [adsi] PS>
那反过来,我们想查看短类型对应的真实.NET类型呢?
PS> [string].FullName System.String PS> [int].FullName System.Int32 PS> [wmi].FullName System.Management.ManagementObject PS> [adsi].FullName System.DirectoryServices.DirectoryEntry PS>
其结果,是无论什么时候,PowerShell遇到一个8位无符号整形数值,都会自动把它转换成Byte类型。这个完整的逻辑由ConvertTypeNameToPSTypeName()来处理。PowerShell内部使用了一个查询表来转换特定的数据类型。
$field = [System.Management.Automation.LanguagePrimitives].GetField('nameMap', 'NonPublic,Static') $field.GetValue([System.Management.Automation.LanguagePrimitives])
映射如下:
Key Value --- ----- SInt8 SByte UInt8 Byte SInt16 Int16 UInt16 UInt16 SInt32 Int32 UInt32 UInt32 SInt64 Int64 UInt64 UInt64 Real32 Single Real64 double Boolean bool String string DateTime DateTime Reference CimInstance Char16 char Instance CimInstance BooleanArray bool[] UInt8Array byte[] SInt8Array Sbyte[] UInt16Array uint16[] SInt16Array int64[] UInt32Array UInt32[] SInt32Array Int32[] UInt64Array UInt64[] SInt64Array Int64[] Real32Array Single[] Real64Array double[] Char16Array char[] DateTimeArray DateTime[] StringArray string[] ReferenceArray CimInstance[] InstanceArray CimInstance[] Unknown UnknownType
本文链接: https://www.pstips.net/simplifying-net-types.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!