FileSystem 提供程序

提供程序名称

FileSystem

驱动器

C:, D: ...

功能

FilterShouldProcess

简短说明

提供对文件和目录的访问权限。

详细说明

借助 PowerShell FileSystem 提供程序,可以在 PowerShell 中获取、添加、更改、清除和删除文件和目录。

FileSystem 驱动器是一个分层命名空间,其中包含计算机上的目录和文件。 FileSystem 驱动器可以是逻辑或逻辑驱动器、目录或映射网络共享。

FileSystem 提供程序支持本文中介绍的以下 cmdlet。

此提供程序公开的类型

文件是 System.IO.FileInfo 类的实例。 目录是 System.IO.DirectoryInfo 类的实例。

FileSystem 提供程序通过将计算机上的任何逻辑驱动器映射为 PowerShell 驱动器来公开其数据存储。 若要使用 FileSystem 驱动器,可以将位置更改为驱动器名称后跟冒号 (:) 的驱动器。

Set-Location C:

还可以使用任何其他 PowerShell 驱动器中的 FileSystem 提供程序。 若要从其他位置引用文件或目录,请在路径中使用驱动器名称 (C:D:、...) 。

注意

PowerShell 使用别名使你能够熟悉地使用提供程序路径。 和 lsdir命令现在是 Get-ChildItem 的别名,cdSet-Location 的别名。 和 pwdGet-Location 的别名。

获取文件和目录

cmdlet Get-ChildItem 返回当前位置中的所有文件和目录。 可以指定不同的搜索路径,并使用内置参数来筛选和控制递归深度。

Get-ChildItem

若要详细了解 cmdlet 用法,请参阅 Get-ChildItem

复制文件和目录

cmdlet Copy-Item 将文件和目录复制到指定的位置。 参数可用于筛选和递归,类似于 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 覆盖现有文件,请指定 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。 在创建文件时,可以使用 New-Item cmdlet 的 Value 参数将内容添加到该文件。

循环访问文件的内容

默认情况下, Get-Content cmdlet 使用行尾字符作为其分隔符,因此它将文件作为字符串集合获取,每行作为文件中的一个字符串。

可以使用 -Delimiter 参数指定备用分隔符。 如果将该分隔符设置为表示一个部分的结尾或下一部分开头的字符,则可以将该文件拆分为多个逻辑部分。

第一个命令获取 Employees.txt 文件并将其拆分为多个部分,每个部分以单词“结束员工记录”结尾,并将它保存在 变量中 $e

第二个命令使用数组表示法获取 集合中的 $e第一项。 它使用索引 0,因为 PowerShell 数组是从零开始的。

有关 cmdlet 的详细信息 Get-Content ,请参阅 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 类。

修改文件的 ACL

Create并设置文件的 ACL

创建文件和目录

创建目录

此命令在 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 并将字符串“test log”添加到该文件。

New-Item -Path c:\logfiles -Name log2.txt -Type file -Value "test log"

重命名文件和目录

重命名文件

此命令将 目录中的文件a.txtC:\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 具有两个值的 参数: CompressedEncrypted。 这些值用表示“OR”运算符的逗号 , 分隔。

Get-ChildItem -Attributes Compressed,Encrypted

动态参数

动态参数是由 PowerShell 提供程序添加的 cmdlet 参数,仅在启用提供程序的驱动器中使用 cmdlet 时才可用。

编码 <Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding>

指定文件编码。 默认值为 ASCII。

  • ASCII:使用 ASCII (7 位) 字符集的编码。
  • BigEndianUnicode:使用 big-endian 字节顺序以 UTF-16 格式进行编码。
  • 字符串:使用字符串的编码类型。
  • Unicode:使用 little-endian 字节顺序以 UTF-16 格式进行编码。
  • UTF7:采用 UTF-7 格式编码。
  • UTF8:以 UTF-8 格式编码。
  • UTF8BOM:使用字节顺序标记 (BOM) 以 UTF-8 格式进行编码
  • UF8NOBOM:在没有字节顺序标记的 UTF-8 格式 (BOM)
  • UTF32:以 UTF-32 格式编码。
  • 默认值:在默认安装的代码页中编码。
  • OEM:对 MS-DOS 和控制台程序使用默认编码。
  • 未知:编码类型未知或无效。 数据可作为二进制处理。

支持的 Cmdlet

分隔符 <System.String>

指定 Get-Content 用于在读取文件时将该文件划分为对象的分隔符。

默认值为 \n,即行尾字符。

读取文本文件时, Get-Content 返回字符串对象的集合,其中每个对象都以分隔符字符结尾。

如果输入文件中不存在的分隔符, Get-Content 会将整个文件作为单个未分隔的对象返回。

你可以使用此参数将大文件拆分为较小的文件,方法是指定文件分隔符(例如“End of Example”)作为分隔符。 分隔符将被保留(不会被丢弃),并且成为每个文件部分中的最后一项。

注意

目前,当 参数的 -Delimiter 值为空字符串时, Get-Content 不会返回任何内容。 这是已知问题。 若要强制执行 Get-Content 以将整个文件作为单个的未分隔字符串返回,请输入文件中不存在的值。

支持的 Cmdlet

Wait <System.Management.Automation.SwitchParameter>

等待要追加到文件的内容。 如果已追加内容,则返回追加的内容。 如果已更改内容,则返回整个文件。

在等待过程中,Get-Content 将每秒检查一次文件,直到你中断该操作(例如通过按 CTRL+C)。

支持的 Cmdlet

Attributes <FlagsExpression>

获取具有指定属性的文件和文件夹。 此参数支持所有属性,并且允许你指定复杂的属性组合。

参数-Attributes是在 Windows PowerShell 3.0 中引入的。

参数 -Attributes 支持以下属性:

  • 存档
  • Compressed
  • 设备
  • Directory
  • 已加密
  • Hidden
  • 正常
  • NotContentIndexed
  • Offline
  • ReadOnly
  • ReparsePoint
  • SparseFile
  • 系统
  • 临时

有关这些属性的说明,请参阅 FileAttributes 枚举。

使用以下运算符合并属性。

  • ! -不
  • + -和
  • , -或

运算符与其属性之间不允许有空格。 但是,在逗号之前允许有空格。

支持的 Cmdlet

目录 <System.Management.Automation.SwitchParameter>

获取目录(文件夹)。

参数-Directory是在 Windows PowerShell 3.0 中引入的。

若要仅获取目录,请使用 -Directory 参数并省略 -File 参数。 若要排除目录,请使用 -File 参数并省略 -Directory 参数,或使用 -Attributes 参数。

支持的 Cmdlet

File <System.Management.Automation.SwitchParameter>

获取文件。

参数-File是在 Windows PowerShell 3.0 中引入的。

若要仅获取文件,请使用 -File 参数并省略 -Directory 参数。 若要排除文件,请使用 -Directory 参数并省略 -File 参数,或使用 -Attributes 参数。

支持的 Cmdlet

隐藏 <的 System.Management.Automation.SwitchParameter>

仅获取隐藏的文件和目录(文件夹)。 默认情况下, Get-ChildItem 仅获取非隐藏项。

参数-Hidden是在 Windows PowerShell 3.0 中引入的。

若要仅获取隐藏项,请使用 -Hidden 参数、其 hah 别名,或 参数的 -AttributesHidden 值。 若要排除隐藏项,请省略 -Hidden 参数或使用 -Attributes 参数。

支持的 Cmdlet

ReadOnly <System.Management.Automation.SwitchParameter>

仅获取只读文件和目录(文件夹)。

参数-ReadOnly是在 Windows PowerShell 3.0 中引入的。

若要仅获取只读项,请使用 -ReadOnly 参数、其ar别名或 参数的 -AttributesReadOnly 值。 若要排除只读项,请使用 -Attributes 参数。

支持的 Cmdlet

System <System.Management.Automation.SwitchParameter>

仅获取系统文件和目录(文件夹)。

参数-System是在 Windows PowerShell 3.0 中引入的。

若要仅获取系统文件和文件夹,请使用 -System 参数、其as别名或 参数的 -AttributesSystem 值。 若要排除系统文件和文件夹,请使用 -Attributes 参数。

支持的 Cmdlet

NewerThan <System.DateTime>

$True当文件的值大于指定日期时LastWriteTime返回 。 否则,它将返回 $False

输入 DateTime 对象(例如 Get-Date cmdlet 返回的对象)或可转换为 DateTime 对象的字符串,例如 "August 10, 2011 2:00 PM"

支持的 Cmdlet

OlderThan <System.DateTime>

$True当文件的值小于指定日期时LastWriteTime返回 。 否则,它将返回 $False

输入 DateTime 对象(例如 Get-Date cmdlet 返回的对象)或可转换为 DateTime 对象的字符串,例如 "August 10, 2011 2:00 PM"

支持的 Cmdlet

<Stream System.String>

管理备用数据流。 输入流名称。 仅文件系统驱动器中的 Get-ItemRemove-Item 命令中才允许使用通配符。

支持的 Cmdlet

原始 <SwitchParameter>

忽略换行符。 返回作为单个项的内容。

支持的 Cmdlet

ItemType <字符串>

使用此参数可以指定要创建的项的 tye New-Item

此参数的可用值取决于所使用的当前提供程序。

FileSystem在驱动器中,允许使用以下值:

  • 文件
  • Directory
  • SymbolicLink
  • 交接点
  • HardLink

支持的 Cmdlet

使用管道

提供程序 cmdlet 接受管道输入。 可以使用管道通过将提供程序数据从一个 cmdlet 发送到另一个提供程序 cmdlet 来简化任务。 若要详细了解如何将管道与提供程序 cmdlet 配合使用,请参阅本文中提供的 cmdlet 参考。

获取帮助

从 Windows PowerShell 3.0 开始,你可以获取有关提供程序 cmdlet 的自定义帮助主题,它们介绍了这些 cmdlet 在文件系统驱动器中的行为方式。

若要获取为文件系统驱动器自定义的帮助主题,请在文件系统驱动器中运行 Get-Help 命令,或使用 -PathGet-Help 的 参数指定文件系统驱动器。

Get-Help Get-ChildItem
Get-Help Get-ChildItem -Path c:

另请参阅

about_Providers