FileSystem Provider
提供程序名称
FileSystem
驱动器
C,D
简短说明
提供对文件和目录的访问。
详细说明
使用 Windows PowerShell FileSystem 提供程序,您可以获取、添加、更改、清除和删除 Windows PowerShell 中的文件和目录。
FileSystem 提供程序公开了与您的计算机上所配置的逻辑驱动器(包括映射到网络共享的驱动器)相对应的 Windows PowerShell 驱动器。例如,某台计算机具有一个软盘驱动器、一个硬盘驱动器和一个映射的网络共享目录,其驱动器分别名为 A、C 和 Z。FileSystem 提供程序将公开直接对应于 A、C 和 Z 的 Windows PowerShell 驱动器,从而允许您从 Windows PowerShell 中引用这些驱动器。例如,若要引用驱动器 C,您可以按下例所示使用 C::
此命令将返回 C 驱动器上的所有内容,包括文件和目录。在通过 FileSystem 提供程序引用特定目录或文件时,您必须提供必要的信息以识别该目录或文件。这意味着,在某些情况下您必须提供完全限定的名称。完全限定名称包括驱动器名称(带有冒号)、任何目录和子目录名称以及文件名(如果适用)。例如,以下示例显示了 Shell.dll 文件的完全限定名称,该文件位于 C 驱动器上 Windows 目录的 System32 子目录中:
c:\windows\system32\shell.dll
正如您所见,完全限定名称的每个元素均由反斜杠 (\) 分隔。Windows PowerShell 还允许您使用正斜杠 (/) 以与其他各种 shell 保持一致。
在某些情况下,您无需在引用文件或目录时提供完全限定的名称。例如,当您要访问当前工作位置中的文件时,只需提供文件名。如果您的当前工作位置为 c:\windows,则您可以使用以下命令来查看该目录中所有 .dll 文件的列表:
Get-ChildItem *.dll
如果您的工作目录是 c:\windows 之外的其他目录,例如 c:\program files\Windows PowerShell,则您的命令可能需要包括完全限定的名称:
Get-ChildItem c:\windows\*.dll
在某些情况下,您可以使用位置的相对引用。如果您的工作位置为 c:\windows,并且您希望查看 c:\windows\system32 目录下的 .dll 文件列表,则您可以使用以下命令:
Get-ChildItem .\system32\*.dll
\system32 前面的句点表示当前工作位置。
在某些情况下,您的当前工作位置可能位于 FileSystem 驱动器之外的其他驱动器上。在这种情况下,您必须始终在引用中包括目标驱动器的名称。例如,假定您的当前工作位置为 env: 驱动器。若要查看 C 驱动器的内容,您可以使用以下命令:
示例
在文件系统中导航
-------------------------- 示例 1 --------------------------
此命令获取当前位置:
get-location
Get-Location cmdlet 提供与 Windows 命令提示符中的 cd 命令以及 UNIX 中的 pwd 命令类似的命令功能。有关详细信息,请键入: get-help get-location
-------------------------- 示例 2 --------------------------
此命令设置当前位置:
set-location C:
获取文件和目录信息
-------------------------- 示例 1 --------------------------
此命令获取当前目录中的所有文件和目录:
get-childitem
默认情况下,Get-ChildItem cmdlet 不进行递归。如果在运行此命令时当前目录中存在文件和文件夹,则将返回一个 System.IO.FileInfo 对象和一个 System.IO.DirectoryInfo 对象。
-------------------------- 示例 2 --------------------------
此命令使用 Get-ChildItem 获取当前目录中的所有文件和目录:
get-childitem | where-object {!$_.psiscontainer}
它通过管道将结果传递给 Where-Object,后者将检查 PSIsContainer 属性并且只允许非 (!) 容器对象通过管道。
-------------------------- 示例 3 --------------------------
此命令使用 Get-ChildItem 获取当前目录中的所有文件和目录。它通过管道将结果传递给 Where-Object,后者将检查 PSIsContainer 属性并且只允许容器对象通过管道。
get-childitem | where-object {$_.psiscontainer}
-------------------------- 示例 4 --------------------------
此命令使用 Get-ChildItem 获取当前目录中的所有文件和目录:
get-item -path a | format-list *
它通过管道将结果传递给 Where-Object cmdlet,后者将检查 PSIsContainer 属性并且只允许容器对象通过管道。
-------------------------- 示例 5 --------------------------
此命令使用 Get-Item cmdlet 获取有关 Test.txt 文件的信息:
get-item -path test.txt | format-list *
Format-List cmdlet 用于显示所得到的对象的所有属性。
复制文件和目录
-------------------------- 示例 1 --------------------------
此命令将 C:\A 目录中的文件 A.txt 复制到 C:\A\Bb 目录下:
copy-item -path C:\a\a.txt -destination C:\a\bb\a.txt
此命令将覆盖目标目录中的文件,并且不提示您进行确认。
-------------------------- 示例 2 --------------------------
此命令将 C:\A\Bb 目录中文件扩展名为 .txt 的所有文件都复制到 C:\A\Cc\Ccc\ 目录下:
copy-item -path C:\a\bb\*.txt -destination C:\a\cc\ccc\
此命令使用文件的原始名称。此命令将覆盖目标目录中的现有文件,并且不提示您进行确认。
-------------------------- 示例 3 --------------------------
将 C:\a 目录中的所有目录和文件复制到 C:\c 目录下。如果要复制的任何目录在目标目录中已存在,则除非指定 Force 参数,否则此命令将会失败。
copy-item -path C:\a\* -destination C:\c -recurse
移动文件和目录
-------------------------- 示例 1 --------------------------
此命令将 C:\A 目录中的 C.txt 文件移动到 C:\A\Aa 目录下:
move-item -path C:\a\c.txt -destination C:\a\aa
此命令将不会自动覆盖现有的同名文件。要强制该 cmdlet 覆盖现有文件,请指定 Force 参数。
-------------------------- 示例 2 --------------------------
此命令将 C:\A 目录及其所有内容移动到 C:\B 目录下:
move-item -path C:\a -destination C:\b
无法移动当前所在的目录。
管理文件内容
-------------------------- 示例 1 --------------------------
此命令将字符串“test content”追加到 Test.txt 文件中:
add-content -path test.txt -value "test content"
这样将不会删除 Test.txt 文件中的现有内容。
-------------------------- 示例 2 --------------------------
此命令获取 Test.txt 文件的内容并在控制台中显示这些内容:
get-content -path test.txt
可以通过管道将文件内容传递给其他 cmdlet。例如,下面命令将读取 Test.txt 文件的内容,并将这些内容作为输入提供给 ConvertTo-HTML cmdlet: get-content -path test.txt |convertto-html
-------------------------- 示例 3 --------------------------
此命令用字符串“test content”替换 Test.txt 文件的内容:
set-content -path test.txt -value "test content"
该命令将覆盖 Test.txt 的内容。在创建文件时,您可以使用 New-Item cmdlet 的 Value 参数向文件中添加内容。
管理安全描述符
-------------------------- 示例 1 --------------------------
此命令返回一个 System.Security.AccessControl.FileSecurity 对象:
get-acl -path test.txt | format-list -property *
有关此对象的详细信息,请通过管道将此命令传递给 Get-Member cmdlet。或者,请查看 MSDN (Microsoft Developer Network ) Library 中的“FileSecurity 类”,网址是 https://go.microsoft.com/fwlink/?LinkId=145718。
-------------------------- 示例 2 --------------------------
此命令返回一个 System.Security.AccessControl.DirectorySecurity 对象:
get-acl -path test_directory | format-list -property *
有关此对象的详细信息,请通过管道将此命令传递给 Get-Member cmdlet。或者,请查看 MSDN Library 中的“DirectorySecurity 类”,网址是 https://go.microsoft.com/fwlink/?LinkId=145736。
创建文件和目录
-------------------------- 示例 1 --------------------------
此命令将在 C 驱动器中创建 Logfiles 目录:
new-item -path c:\ -name logfiles -type directory
-------------------------- 示例 2 --------------------------
此命令在 C: Logfiles 目录中创建 Log2.txt 文件,并将字符串“test log”添加到该文件中:
new-item -path c:\logfiles -name log.txt -type file
-------------------------- 示例 3 --------------------------
在 C:\logfiles 目录中创建名为 Log2.txt 的文件,并将字符串“test log”添加到该文件中。
new-item -path c:\logfiles -name log2.txt -type file -value "test log"
重命名文件和目录
-------------------------- 示例 1 --------------------------
此命令将 C:\A 目录中的文件 A.txt 重命名为 B.txt:
rename-item -path c:\a\a.txt -newname b.txt
-------------------------- 示例 2 --------------------------
此命令将 C:\A\Cc 目录重命名为 C:\A\Dd:
rename-item -path c:\a\cc -newname dd
删除文件和目录
-------------------------- 示例 1 --------------------------
此命令删除当前目录中的 Test.txt 文件:
remove-item -path test.txt
-------------------------- 示例 2 --------------------------
此命令删除当前目录中文件扩展名为 .xml 的所有文件:
remove-item -path *.xml
通过调用关联文件来启动程序
-------------------------- 示例 1 --------------------------
第一个命令使用 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
动态参数
动态参数是由 Windows PowerShell 提供程序添加的 cmdlet 参数,且只可用于在启用了提供程序的驱动器中使用 cmdlet 的情况。
Encoding <Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding>
Value | Description |
---|---|
Unknown |
编码类型未知或无效。数据可作为二进制处理。 |
String |
使用针对字符串的编码类型。 |
Unicode |
采用使用 little-endian 字节顺序的 UTF-16 格式进行编码。 |
Byte |
将一组字符编码为一个字节序列。 |
BigEndianUnicode |
采用使用 big-endian 字节顺序的 UTF-16 格式进行编码。 |
UTF8 |
采用 UTF-8 格式进行编码。 |
UTF7 |
采用 UTF-7 格式进行编码。 |
ASCII |
使用针对 ASCII(7 位)字符集的编码方式。 |
支持 Cmdlet
Delimiter <System.String>
指定读取文件时使用的分隔符。默认分隔符为“\n”(行尾)。
支持 Cmdlet
Wait <System.Management.Automation.SwitchParameter>
等待要追加到文件的内容。如果已追加内容,则此参数将返回追加的内容。如果内容已更改,则返回整个文件。
在等待过程中,Get-Content 将每隔一秒检查一次文件,直至中断该操作(例如通过按 Ctrl+C)。