关于文件系统提供者
提供商名称
FileSystem
驱动器
C:、D:、Temp: ...
能力
过滤、ShouldProcess
简短描述
提供对文件和目录的访问。
详细说明
PowerShell 文件系统 提供程序允许您在 PowerShell 中获取、添加、更改、清除和删除文件和目录。
文件系统驱动器是一个分层命名空间,包含计算机上的目录和文件。 文件系统驱动器可以是逻辑或物理驱动器、目录或映射的网络共享。
从 PowerShell 版本 7.0 开始,名为 TEMP: 的驱动器被映射到用户的临时目录路径。 PowerShell 使用 .NET GetTempPath() 方法来确定临时文件夹的位置。在 Windows 上,该位置与 $env:TEMP 相同。在非 Windows 系统上,如果未定义环境变量,则该位置与 $env:TMPDIR 或 /tmp 相同。
文件系统提供程序支持以下 cmdlet,本文将介绍这些内容。
- Get-Location
- Set-Location
- Get-Item
- Get-ChildItem
- Invoke-Item
- Move-Item
- New-Item
- Remove-Item
- Get-ItemProperty
- Set-ItemProperty
- Clear-Item
- Clear-ItemProperty
- Remove-Item
- Remove-ItemProperty
- Get-Acl
- Set-Acl
- Get-AuthenticodeSignature
- Set-AuthenticodeSignature
- Add-Content
- Clear-Content
- Get-Content
- Set-Content
该提供者公开的类型
文件是 System.IO.FileInfo 类的实例。目录是 System.IO.DirectoryInfo 类的实例。
PowerShell 扩展类型系统向这些对象类型添加了额外的属性以提供附加信息。有些信息是特定于平台的。例如,LinkType 属性的可能值取决于所使用的平台和文件系统。 Linux 和 macOS 文件系统支持 HardLink 和 SymLink。 Windows NTFS 支持 HardLink、SymLink、Junction 以及 LinkType 的其他几个值。
当您使用 Get-Item 或 Get-ChildItem 获取有关链接项的信息时,Mode 属性包含 l 表明该项目是一个链接。 LinkType 属性包含链接的类型。
AppExecLink 链接是在您从 Microsoft Store 安装应用程序时创建的。对于 AppExecLink 链接,Windows 不提供 LinkType 或 LinkTarget 属性值。
Get-Item ~\AppData\Local\Microsoft\WindowsApps\winget.exe
Directory: C:\Users\user1\AppData\Local\Microsoft\WindowsApps
Mode LastWriteTime Length Name
---- ------------- ------ ----
la--- 6/8/2023 12:20 PM 0 winget.exe ->
浏览文件系统驱动器
文件系统提供程序通过将计算机上的任何逻辑驱动器映射为 PowerShell 驱动器来公开其数据存储。要使用文件系统驱动器,您可以使用驱动器名称后跟冒号 (:) 将您的位置更改为驱动器。
Set-Location C:
您还可以使用任何其他 PowerShell 驱动器中的文件系统提供程序。要从其他位置引用文件或目录,请在路径中使用驱动器名称(C:、D:...)。
笔记
PowerShell 使用别名让您能够以熟悉的方式使用提供程序路径。 dir 和 ls 等命令现在是 Get-ChildItem 的别名,cd 是 的别名设置位置。 pwd 是 Get-Location 的别名。
获取文件和目录
Get-ChildItem cmdlet 返回当前位置的所有文件和目录。您可以指定不同的搜索路径并使用内置参数来过滤和控制递归深度。
Get-ChildItem
要了解有关 cmdlet 用法的更多信息,请参阅 Get-ChildItem。
复制文件和目录
Copy-Item cmdlet 将文件和目录复制到您指定的位置。参数可用于过滤和递归,类似于Get-ChildItem。
以下命令将路径 C:\temp\ 下的所有文件和目录复制到文件夹 C:\Windows\Temp 中。
Copy-Item -Path C:\temp\* -Destination C:\Windows\Temp -Recurse -File
Copy-Item 覆盖目标目录中的文件,而不提示确认。
此命令将 a.txt 文件从 C:\a 目录复制到 C:\a\bb 目录。
Copy-Item -Path C:\a\a.txt -Destination C:\a\bb\a.txt
将C:\a目录下的所有目录和文件复制到C:\c目录中。如果要复制的任何目录已存在于目标目录中,则该命令将失败,除非您指定Force 参数。
Copy-Item -Path C:\a\* -Destination C:\c -Recurse
有关详细信息,请参阅复制项目。
移动文件和目录
此命令将 C:\a 目录中的 c.txt 文件移动到 C:\a\aa 目录:
Move-Item -Path C:\a\c.txt -Destination C:\a\aa
默认情况下,cmdlet 不会覆盖同名的现有文件。要强制 cmdlet 覆盖现有文件,请指定 Force 参数。
当目录位于当前位置时,您无法移动该目录。当您使用 Move-Item 将目录移动到当前位置时,您会看到此错误。
C:\temp> Move-Item -Path C:\temp\ -Destination C:\Windows\Temp
Move-Item : Cannot move item because the item at 'C:\temp\' is in use.
At line:1 char:1
+ Move-Item C:\temp\ C:\temp2\
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Move-Item], PSInvalidOperationException
+ FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.MoveItemCommand
管理文件内容
获取文件的内容
此命令获取“Test.txt”文件的内容并将其显示在控制台中。
Get-Content -Path Test.txt
您可以将文件的内容通过管道传输到另一个 cmdlet。例如,以下命令读取 Test.txt 文件的内容,然后将它们作为输入提供给 ConvertTo-Html cmdlet:
Get-Content -Path Test.txt | ConvertTo-Html
您还可以通过在文件的提供程序路径前添加美元符号 ($) 来检索文件的内容。由于变量命名限制,路径必须用大括号括起来。有关详细信息,请参阅 about_Variables。
${C:\Windows\System32\Drivers\etc\hosts}
添加内容到文件
此命令将“测试内容”字符串附加到 Test.txt 文件中:
Add-Content -Path test.txt -Value "test content"
Test.txt 文件中的现有内容不会被删除。
替换文件的内容
此命令将 Test.txt 文件的内容替换为“test content”字符串:
Set-Content -Path test.txt -Value "test content"
它会覆盖 Test.txt 的内容。您可以在创建文件时使用 New-Item cmdlet 的 Value 参数将内容添加到文件中。
循环遍历文件的内容
默认情况下,Get-Content cmdlet 使用行尾字符作为分隔符,因此它将文件作为字符串集合获取,其中每一行作为文件中的一个字符串。
您可以使用Delimiter参数来指定备用分隔符。如果将其设置为表示一个部分的结尾或下一个部分的开头的字符,则可以将文件拆分为逻辑部分。
第一个命令获取 Employees.txt 文件并将其分成几个部分,每个部分都以“End of Employee Record”结尾,并将其保存在 $e 中多变的。
第二个命令使用数组表示法来获取 $e 中集合中的第一项。它使用索引 0,因为 PowerShell 数组是从零开始的。
有关 Get-Content cmdlet 的详细信息,请参阅 Get-Content 的帮助主题。
有关数组的更多信息,请参阅 about_Arrays。
$e = Get-Content c:\test\employees.txt -Delimited "End Of Employee Record"
$e[0]
管理安全描述符
查看文件的 ACL
此命令返回一个 System.Security.AccessControl.FileSecurity 对象:
Get-Acl -Path test.txt | Format-List -Property *
有关此对象的详细信息,请通过管道将命令传递给 Get-Member cmdlet 或参阅 FileSecurity 类。
创建文件和目录
创建目录
此命令在 C 驱动器上创建 logfiles 目录:
New-Item -Path c:\ -Name logfiles -Type directory
PowerShell 还包含一个 mkdir 函数(别名 md),它使用 New-Item cmdlet 创建新目录。
创建文件
此命令在 C:\logfiles 目录中创建 log2.txt 文件,然后将“test log”字符串添加到该文件:
New-Item -Path c:\logfiles -Name log2.txt -Type file
创建一个包含内容的文件
在 C:\logfiles 目录中创建一个名为 log2.txt 的文件,并将字符串“test log”添加到该文件中。
New-Item -Path c:\logfiles -Name log2.txt -Type file -Value "test log"
重命名文件和目录
重命名文件
此命令将 C:\a 目录中的 a.txt 文件重命名为 b.txt:
Rename-Item -Path c:\a\a.txt -NewName b.txt
重命名目录
此命令将 C:\a\cc 目录重命名为 C:\a\dd:
Rename-Item -Path c:\a\cc -NewName dd
删除文件和目录
删除文件
此命令删除当前目录中的 Test.txt 文件:
Remove-Item -Path test.txt
使用通配符删除文件
此命令删除当前目录中具有 .xml 文件扩展名的所有文件:
Remove-Item -Path *.xml
通过调用关联文件来启动程序
调用文件
Get-Service cmdlet 用于获取有关本地服务的信息,并将信息通过管道传输到 Export-Csv cmdlet,以将信息存储在 Services.csv 文件中。
然后 Invoke-Item 在与 .csv 扩展名关联的程序中打开 services.csv 文件:
Get-Service | Export-Csv -Path services.csv
Invoke-Item -Path services.csv
获取具有指定属性的文件和文件夹
获取系统文件
该命令获取当前目录及其子目录中的系统文件。
它使用 File 参数仅获取文件(而不是目录),使用 System 参数仅获取具有“system”属性的项目。
它使用Recurse参数来获取当前目录和所有子目录中的项目。
Get-ChildItem -File -System -Recurse
获取隐藏文件
此命令获取当前目录中的所有文件,包括隐藏文件。
它使用具有两个值的 Attributes 参数:!Directory+Hidden(获取隐藏文件)和 !Directory(获取所有其他文件)。
Get-ChildItem -Attributes !Directory,!Directory+Hidden
dir -att !d,!d+h 与此命令等效。
获取压缩和加密的文件
此命令获取当前目录中压缩或加密的文件。
它使用带有两个值的Attributes参数:压缩和加密。这些值由表示“OR”运算符的逗号 , 分隔。
Get-ChildItem -Attributes Compressed,Encrypted
动态参数
动态参数是由 PowerShell 提供程序添加的 cmdlet 参数,仅当在启用提供程序的驱动器中使用 cmdlet 时才可用。
编码<编码>
指定文件编码。默认为 ASCII。
ascii:使用 ASCII(7 位)字符集的编码。bigendianunicode:使用 big-endian 字节顺序以 UTF-16 格式进行编码。bigendianutf32:使用 big-endian 字节顺序以 UTF-32 格式进行编码。oem:使用 MS-DOS 和控制台程序的默认编码。unicode:使用小端字节顺序以 UTF-16 格式进行编码。utf7:以UTF-7格式编码。utf8:以UTF-8格式编码。utf8BOM:使用字节顺序标记 (BOM) 以 UTF-8 格式进行编码utf8NoBOM:以 UTF-8 格式编码,不带字节顺序标记 (BOM)utf32:以 UTF-32 格式编码。
支持的 Cmdlet
Add-ContentGet-ContentSet-Content分隔符<字符串>
指定 Get-Content 在读取文件时用于将文件划分为对象的分隔符。
默认值为 \n,即行结束符。
读取文本文件时,Get-Content 返回字符串对象的集合,每个字符串对象均以分隔符结尾。
输入文件中不存在的分隔符,Get-Content 会将整个文件作为单个未分隔的对象返回。
您可以使用此参数通过指定文件分隔符(例如“示例结束”)作为分隔符,将大文件拆分为较小的文件。分隔符被保留(不被丢弃)并成为每个文件部分中的最后一项。
笔记
目前,当 Delimiter 参数的值为空字符串时,Get-Content 不会返回任何内容。这是一个已知问题。要强制 Get-Content 将整个文件作为单个不带分隔符的字符串返回,请输入文件中不存在的值。
支持的 Cmdlet
Get-Content等待<开关参数>
等待内容追加到文件中。如果附加了内容,则返回附加的内容。如果内容已更改,则返回整个文件。
等待时,Get-Content 每秒检查一次文件,直到您中断它,例如按 CTRL+C。
支持的 Cmdlet
Get-Content属性
获取具有指定属性的文件和文件夹。此参数支持所有属性并允许您指定属性的复杂组合。
Attributes 参数是在 Windows PowerShell 3.0 中引入的。
Attributes 参数支持以下属性:
- Archive
- Compressed
- Device
- Directory
- Encrypted
- Hidden
- Normal
- NotContentIndexed
- Offline
- ReadOnly
- ReparsePoint
- SparseFile
- System
- Temporary
有关这些属性的说明,请参阅 FileAttributes 枚举。
使用以下运算符来组合属性。
!- 不是+- 与- <代码>, - 或
运算符与其属性之间不允许有空格。但是,逗号之前允许有空格。
支持的 Cmdlet
Get-ChildItem目录<交换机参数>
获取目录(文件夹)。
Directory 参数是在 Windows PowerShell 3.0 中引入的。
要仅获取目录,请使用 Directory 参数并省略 File 参数。要排除目录,请使用File参数并省略Directory参数,或使用Attributes参数。
支持的 Cmdlet
Get-ChildItem文件<开关参数>
获取文件。
File 参数是在 Windows PowerShell 3.0 中引入的。
要仅获取文件,请使用 File 参数并省略 Directory 参数。要排除文件,请使用目录参数并省略文件参数,或使用属性参数。
支持的 Cmdlet
Get-ChildItem隐藏<开关参数>
仅获取隐藏文件和目录(文件夹)。默认情况下,Get-ChildItem 仅获取非隐藏项。
Hidden 参数是在 Windows PowerShell 3.0 中引入的。
要仅获取隐藏项目,请使用 Hidden 参数、其 h 或 ah 别名,或 Hidden 值属性参数。要排除隐藏项目,请省略 Hidden 参数或使用 Attributes 参数。
支持的 Cmdlet
Get-ChildItem只读 <开关参数>
仅获取只读文件和目录(文件夹)。
ReadOnly 参数是在 Windows PowerShell 3.0 中引入的。
要仅获取只读项目,请使用 ReadOnly 参数、其 ar 别名或 Attributes 的 ReadOnly 值强>参数。要排除只读项目,请使用属性参数。
支持的 Cmdlet
Get-ChildItem系统<开关参数>
仅获取系统文件和目录(文件夹)。
System 参数是在 Windows PowerShell 3.0 中引入的。
要仅获取系统文件和文件夹,请使用 System 参数、其 as 别名或属性的 System 值强>参数。要排除系统文件和文件夹,请使用属性参数。
支持的 Cmdlet
Get-ChildItem较新<日期时间>
当文件的 LastWriteTime 值大于指定日期时,返回 $True。否则,它返回$False。
输入 DateTime 对象,例如 Get-Date cmdlet 返回的对象,或可转换为 DateTime 对象的字符串,例如 “2011 年 8 月 10 日 2:00 PM” 。
支持的 Cmdlet
- Test-Path
早于 <日期时间>
当文件的 LastWriteTime 值小于指定日期时,返回 $True。否则,它返回$False。
输入 DateTime 对象,例如 Get-Date cmdlet 返回的对象,或可转换为 DateTime 对象的字符串,例如 "August 10 ,2011 年下午 2:00”。
支持的 Cmdlet
Test-Path流<字符串>
管理备用数据流。输入流名称。仅在文件系统驱动器中的 Get-Item 和 Remove-Item 命令中允许使用通配符。
支持的 Cmdlet
Add-ContentClear-ContentGet-ItemGet-ContentRemove-ItemSet-Content原始<开关参数>
忽略换行符。将内容作为单个项目返回。
支持的 Cmdlet
Get-Content项目类型 <字符串>
此参数允许您指定要使用 New-Item 创建的项目类型。
此参数的可用值取决于您当前使用的提供程序。
在 FileSystem 驱动器中,允许使用以下值:
- 文件
- 目录
- SymbolicLink
- 交界处
- HardLink
支持的 Cmdlet
New-Item使用管道
提供程序 cmdlet 接受管道输入。您可以使用管道通过将提供程序数据从一个 cmdlet 发送到另一提供程序 cmdlet 来简化任务。要详细了解如何将管道与提供程序 cmdlet 一起使用,请参阅本文中提供的 cmdlet 参考。
寻求帮助
从 Windows PowerShell 3.0 开始,您可以获得提供程序 cmdlet 的自定义帮助主题,这些主题解释了这些 cmdlet 在文件系统驱动器中的行为方式。
要获取为文件系统驱动器自定义的帮助主题,请在文件系统驱动器中运行 Get-Help 命令或使用 Get-Help 的 Path 参数指定文件系统驱动器。
Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path c:
参见
- about_Providers