Windows 是一个 API 驱动的操作系统,而 PowerShell 也是如此。与其他使用纯文本作为基础元素并让用户通过 grep 和正则表达式来结构化数据的 shell 相比,PowerShell(和底层的 .NET 框架)提供了一组丰富的数据类型,您可以从中选择最适合的来完美地存储数据。
默认情况下,PowerShell 仅使用基本数据类型,例如[string](文本),[int](数字),[double](浮点数),[datetime](日期和时间)和[bool](真和假)。
You however can pick any other data type that you find more suitable:
但是,您可以选择任何其他您认为更合适的数据类型:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 
 | PS> [System.IO.FileInfo]'c:\test\somefile.txt'
 Mode                 LastWriteTime         Length Name
 ----                 -------------         ------ ----
 darhsl        01.01.1601     01:00             () somefile.txt
 
 
 
 PS> [System.IO.FileInfo]'c:\test\somefile.txt' | Select-Object -Property *
 
 
 Mode              : darhsl
 VersionInfo       :
 BaseName          : somefile
 Target            :
 LinkType          :
 Name              : somefile.txt
 Length            :
 DirectoryName     : c:\test
 Directory         : c:\test
 IsReadOnly        : True
 Exists            : False
 FullName          : c:\test\somefile.txt
 Extension         : .txt
 CreationTime      : 01.01.1601 01:00:00
 CreationTimeUtc   : 01.01.1601 00:00:00
 LastAccessTime    : 01.01.1601 01:00:00
 LastAccessTimeUtc : 01.01.1601 00:00:00
 LastWriteTime     : 01.01.1601 01:00:00
 LastWriteTimeUtc  : 01.01.1601 00:00:00
 Attributes        : -1
 
 | 
通过将通用数据类型(如字符串)转换为更适当的数据类型,访问单个信息变得更加容易。例如,如果您想解析文件路径,通过将字符串转换为[System.Io.FileInfo],您可以轻松地拆分路径并提取驱动器、父文件夹、文件名、没有扩展名的文件名或扩展名:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 
 | PS> $path = [System.IO.FileInfo]'c:\test\somefile.txt'
 PS> $path.DirectoryName
 c:\test
 
 PS> $path.FullName
 c:\test\somefile.txt
 
 PS> $path.Name
 somefile.txt
 
 PS> $path.BaseName
 somefile
 
 PS> $path.Extension
 .txt
 
 PS> $path.Directory.Parent
 
 Mode                 LastWriteTime         Length Name
 ----                 -------------         ------ ----
 d--hs-        15.02.2023     17:33                c:\
 
 
 
 PS> $path.Directory.Parent.Name
 c:\
 
 |