Mat*_*att 12 powershell network-drive powershell-4.0
我正在尝试创建一个脚本,我将在文件服务器中搜索非继承权限.因此,我遇到了文件名的260个字符限制.我看到的一个建议,我认为会有所帮助,有几次是创建一些非持久性PS驱动器,并且可以查询这些驱动程序.
问题是,当我使用Get-ChildItem
新PS驱动器时,它返回具有完整网络路径的对象而不使用我指定的名称.
# Cycle the folders
Get-ChildItem $rootPath -Directory | select -first 1 | ForEach-Object{
$target = $_
# Create a PS Drive for each sub directory and get all the folders
[void](New-PSDrive -Name $target.Name -PSProvider FileSystem $target.FullName)
# Get the file objects.
Get-ChildItem "$($target.Name):\" -Recurse
}
Run Code Online (Sandbox Code Playgroud)
我相信如果我用驱动器号创建了一些合适的持久性网络驱动器,我就不会遇到这个问题.
希望我只是没有错过它,但Technet for New-PSDrive并不是100%清楚这个场景.
我正在寻找一种方法来制作ps-drive并引用文件夹,同时返回相对于新驱动器名称的路径.考虑我制作的psdrive(G :)然后我的一个映射网络驱动器(M :)的输出.
PS M:\> Get-ChildItem G:\
Directory: \\server01\COMMON\Folder
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 6/18/2011 8:14 AM Folder 1
d---- 6/18/2011 8:14 AM Folder 2
PS M:\> Get-ChildItem M:\
Directory: M:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 5/8/2015 11:00 AM Backup
d---- 5/8/2015 11:00 AM covers
d---- 5/8/2015 11:00 AM drop
d---- 5/8/2015 11:00 AM Expense
Run Code Online (Sandbox Code Playgroud)
我知道我的确切情况存在多种解决方法,但我想了解我所展示的行为New-PSDrive
.
看起来你混合了两个不同的东西:PowerShell路径和Provider路径.PowerShell路径在PowerShell外部不可见.
New-PSDrive X FileSystem C:\Windows
(Get-Item X:\System32\notepad.exe).get_Length() #OK
([IO.FileInfo]'X:\System32\notepad.exe').get_Length() #Error
Run Code Online (Sandbox Code Playgroud)
但Get-Item X:\System32\notepad.exe
设法创建一个FileInfo
代表一些文件的对象.那么,结果FileInfo
对象表示什么文件?
(Get-Item X:\System32\notepad.exe).FullName
# C:\Windows\System32\notepad.exe
Run Code Online (Sandbox Code Playgroud)
由于该FileInfo
对象对PowerShell驱动器一无所知X:
,因此它必须存储一个路径,该路径在内部使用它可以理解的文件系统API.您可以使用Convert-Path
cmdlet将PowerShell路径转换为提供程序路径:
Convert-Path X:\System32\notepad.exe
# C:\Windows\System32\notepad.exe
Run Code Online (Sandbox Code Playgroud)
创建PowerShell驱动器时会发生相同的情况,该驱动器指向某个网络路径:
New-PSDrive Y FileSystem \\Computer\Share
Get-ChildItem Y:\
Run Code Online (Sandbox Code Playgroud)
返回FileInfo
和DirectoryInfo
对象一无所知Y:
,因此它们不能拥有相对于该PowerShell驱动器的路径.内部使用的文件系统API将无法理解它们.
使用该-Persist
选项时,情况会发生变化.在这种情况下,将创建实际映射的驱动器,这可以通过PowerShell之外的文件系统API来理解.
New-PSDrive Z FileSystem \\Computer\Share -Persist|Format-Table *Root
# Root : Z:\
# DisplayRoot : \\Computer\Share
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,这Root
将不是\\Computer\Share
您在New-PSDrive
cmdlet中提出的要求,而是Z:\
.由于Z:
是在这种情况下,真正的驱动器,FileInfo
和DirectoryInfo
对象通过返回Get-Item
或Get-ChildItem
小命令可以具有相对于它的路径.
归档时间: |
|
查看次数: |
4494 次 |
最近记录: |