about_FileSystem_Provider
文件系统
C:
、D:
、Temp:
...
筛选, ShouldProcess
提供对文件和目录的访问权限。
借助 PowerShell FileSystem 提供程序,可以在 PowerShell 中获取、添加、更改、清除和删除文件和目录。
FileSystem 驱动器是一个分层命名空间,其中包含计算机上的目录和文件。 FileSystem 驱动器可以是逻辑或物理驱动器、目录或映射网络共享。
从 PowerShell 版本 7.0 开始,名为 TEMP:
的驱动器将映射到用户的临时目录路径。 PowerShell 使用 .NET GetTempPath() 方法来确定临时文件夹的位置。 在 Windows 上,位置与 $env:TEMP
相同。 在非 Windows 系统上,如果未定义环境变量,则位置与 $env:TMPDIR
或 /tmp
相同。
FileSystem 提供程序支持以下在本文中介绍的命令工具(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
- 添加内容
- Clear-Content
- Get-Content
- Set-Content
文件是 System.IO.FileInfo 类的实例。 目录是 System.IO.DirectoryInfo 类的实例。
PowerShell 扩展类型系统向这些对象类型添加额外的属性,以提供其他信息。 某些信息特定于平台。 例如,LinkType 属性的可能值取决于所使用的平台和文件系统。 Linux 和 macOS 文件系统支持 HardLink
和 SymLink
。 Windows NTFS 支持 HardLink
的 SymLink
、Junction
、和其他几个值。
使用 Get-Item
或 Get-ChildItem
来提供有关链接项的信息时,Mode 属性包含一个 l
来指示该项是链接。
LinkType 属性包含链接的类型。
从 Microsoft 应用商店安装应用程序时,会创建 AppExecLink
链接。 对于 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 ->
FileSystem 提供程序通过将计算机上的任何逻辑驱动器映射为 PowerShell 驱动器来公开其数据存储。 若要使用 FileSystem 驱动器,可以使用驱动器名称后跟冒号 (:
) 将位置更改为驱动器。
Set-Location C:
还可以从任何其他 PowerShell驱动器使用 FileSystem 提供程序。 若要从其他位置引用文件或目录,请使用路径中的驱动器名称(C:
、D:
、...)。
备注
PowerShell 使用别名来让你熟悉如何使用提供程序路径。
dir
和 ls
等命令现在是 Get-ChildItem
的别名,cd
是 Set-Location
的别名。 和 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
有关详细信息,请参阅 Copy-Item。
此命令将 c.txt
目录中的 C:\a
文件移动到 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
文件的内容替换为“测试内容”字符串:
Set-Content -Path test.txt -Value "test content"
它将覆盖 Test.txt
的内容。 可以在创建 cmdlet 时使用 New-Item
参数将内容添加到文件中。
默认情况下,Get-Content
cmdlet 使用行尾字符作为其分隔符,因此它将文件作为字符串集合获取,每个行作为文件中的一个字符串。
可以使用 分隔符 参数指定备用分隔符。 如果将它设置为表示节末尾或下一部分开头的字符,则可以将文件拆分为逻辑部分。
第一个命令获取 Employees.txt
文件并将其拆分为各部分,每个部分以“员工记录结束”一词结尾,并将其保存在 $e
变量中。
第二个命令使用数组表示法获取集合中的第一项,$e
。 它使用索引 0,因为 PowerShell 数组从零开始。
要了解有关 Get-Content
命令的更多信息,请参阅 Get-Content
的帮助主题。
有关数组的详细信息,请参阅 about_Arrays。
$e = Get-Content c:\test\employees.txt -Delimited "End Of Employee Record"
$e[0]
此命令返回 System.Security.AccessControl.FileSecurity 对象:
Get-Acl -Path test.txt | Format-List -Property *
有关此对象的详细信息,请通过管道将此命令传递给 Get-Member cmdlet,或查看 FileSecurity 类。
此命令在 logfiles
驱动器上创建 C
目录:
New-Item -Path c:\ -Name logfiles -Type directory
PowerShell 还包括一个 mkdir
函数(别名 md
),该函数使用 New-Item
cmdlet 创建新目录。
此命令在 log2.txt
目录中创建 C:\logfiles
文件,然后将“测试日志”字符串添加到该文件:
New-Item -Path c:\logfiles -Name log2.txt -Type file
在 log2.txt
目录中创建名为 C:\logfiles
的文件,并将字符串“测试日志”添加到该文件。
New-Item -Path c:\logfiles -Name log2.txt -Type file -Value "test log"
此命令将 a.txt
目录中的 C:\a
文件重命名为 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 打开与 services.csv
扩展名关联的程序中的 .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 参数与以下两个值:Compressed
和 Encrypted
。 这些值用逗号分隔 ,
,表示“OR”运算符。
Get-ChildItem -Attributes Compressed,Encrypted
动态参数是由 PowerShell 提供程序添加的 cmdlet 参数,仅在启用提供程序的驱动器中使用 cmdlet 时才可用。
指定文件编码。 默认值为 ASCII。
-
ascii
:对 ASCII(7 位)字符集使用编码。 -
bigendianunicode
:使用大端字节序以 UTF-16 格式进行编码。 -
bigendianutf32
:使用大端字节顺序以 UTF-32 格式进行编码。 -
oem
:对 MS-DOS 和控制台程序使用默认编码。 -
unicode
:使用小端字节序以 UTF-16 格式进行编码。 -
utf7
:采用 UTF-7 格式编码。 -
utf8
:采用 UTF-8 格式编码。 -
utf8BOM
:使用字节序标记 (BOM) 以 UTF-8 格式进行编码 -
utf8NoBOM
:不使用字节序标记 (BOM) 以 UTF-8 格式进行编码 -
utf32
:采用 UTF-32 格式编码。
Add-Content
Get-Content
Set-Content
指定 Get-Content
用于在读取时将文件划分为对象的分隔符。
默认值为 \n
,即行尾字符。
读取文本文件时,Get-Content
返回字符串对象的集合,每个对象以分隔符字符结尾。
输入文件中不存在的分隔符,Get-Content
将整个文件作为单个未分隔的对象返回。
可以通过指定文件分隔符(如“示例结束”)作为分隔符,使用此参数将大型文件拆分为较小的文件。 分隔符将保留(未丢弃),并成为每个文件节中的最后一项。
备注
目前,当 Delimiter 参数的值为空字符串时,Get-Content
不会返回任何内容。 这是一个已知问题。 若要强制 Get-Content
以单个未完成的字符串的形式返回整个文件,请输入文件中不存在的值。
Get-Content
等待要追加到文件的内容。 如果内容已追加,则返回追加的内容。 如果内容已更改,它将返回整个文件。
等待时,Get-Content
每秒检查一次文件,直到中断该文件,例如按 CTRL+C。
Get-Content
获取具有指定属性的文件和文件夹。 此参数支持所有属性,并允许指定属性的复杂组合。
Windows PowerShell 3.0 中引入了 Attributes 参数。
Attributes 参数支持以下属性:
- 存档
- 压缩
- 设备
- Directory
- 加密
- 隐
- 普通的
- NotContentIndexed
- 离线
- ReadOnly
- ReparsePoint
- SparseFile
- 系统
- 临时
有关这些属性的说明,请参阅 FileAttributes 枚举。
使用以下运算符号组合属性。
-
!
- NOT -
+
- AND -
,
- OR
运算符及其属性之间不允许有空格。 但是,在逗号之前允许空格。
Get-ChildItem
获取目录(文件夹)。
Directory 参数是在 Windows PowerShell 3.0 中引入的。
若要仅获取目录,请使用 Directory 参数并省略 File 参数。 若要排除目录,请使用 File 参数并省略 Directory 参数,或使用 Attributes 参数。
Get-ChildItem
获取文件。
File 参数是在 Windows PowerShell 3.0 中引入的。
若要仅获取文件,请使用 File 参数并省略 Directory 参数。 若要排除文件,请使用 Directory 参数并省略 File 参数,或使用 Attributes 参数。
Get-ChildItem
仅获取隐藏的文件和目录(文件夹)。 默认情况下,Get-ChildItem
仅获取非隐藏项目。
Windows PowerShell 3.0 中引入了 Hidden 参数。
若要仅获取隐藏项,请使用 Hidden 参数、其 h
或 ah
别名,或 Attributes 参数的 Hidden 值。 若要排除隐藏项,请省略 Hidden 参数或使用 Attributes 参数。
Get-ChildItem
仅获取只读文件和目录(文件夹)。
ReadOnly 参数是在 Windows PowerShell 3.0 中引入的。
若要仅获取只读项,请使用 ReadOnly 参数、其 ar
别名或 Attributes 参数的 ReadOnly 值。 若要排除只读项,请使用 属性 参数。
Get-ChildItem
仅获取系统文件和目录(文件夹)。
Windows PowerShell 3.0 中引入了 System 参数。
若要仅获取系统文件和文件夹,请使用 System 参数、其 as
别名或 Attributes 参数的 System 值。 若要排除系统文件和文件夹,请使用 属性 参数。
Get-ChildItem
当文件的 $True
值大于指定日期时,返回 LastWriteTime
。 否则,它将返回 $False
。
输入 DateTime 对象,例如 Get-Date cmdlet 返回的对象,或可转换为 DateTime 对象的字符串,例如 "August 10, 2011 2:00 PM"
。
当文件的 $True
值小于指定日期时,返回 LastWriteTime
。 否则,它将返回 $False
。
输入 DateTime 对象,例如 Get-Date
cmdlet 返回的对象,或可转换为 DateTime 对象的字符串,例如 "August 10, 2011 2:00 PM"
。
Test-Path
管理备用数据流。 输入流名称。 仅在文件系统驱动器中的 Get-Item
和 Remove-Item
命令中允许使用通配符。
Add-Content
Clear-Content
Get-Item
Get-Content
Remove-Item
Set-Content
忽略换行符。 以单个项的形式返回内容。
Get-Content
此参数允许指定使用 New-Item
创建的项的类型。
此参数的可用值取决于所使用的当前提供程序。
在 FileSystem
驱动器中,允许以下值:
- 文件
- Directory
- SymbolicLink
- 交汇处
- HardLink
New-Item
提供程序 cmdlet 接受管道输入。 可以使用管道将提供程序数据从一个 cmdlet 发送到另一个提供程序 cmdlet 来简化任务。 若要详细了解如何将管道与提供程序 cmdlet 配合使用,请参阅本文中提供的 cmdlet 参考。
从 Windows PowerShell 3.0 开始,你可以获取为提供程序的 cmdlet 定制的帮助主题,这些帮助主题解释了这些 cmdlet 在文件系统驱动器中的行为方式。
若要获取为文件系统驱动器自定义的帮助主题,请在文件系统驱动器中运行 Get-Help 命令,或使用 的 Get-Help
参数指定文件系统驱动器。
Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path c: