为什么 PowerShell 脚本在 NAS 网络共享上失败
Why does PowerShell script fail on NAS Networks Share
我是 PowerShell 的新手,修改了我找到的一个脚本。它像我期望的那样在我的 windows 计算机(C:\ 驱动器)上本地运行。但是当我 运行 通过我的网络通过更改 NAS 上网络共享的路径时,它会正确列出所有目录,但所有文件计数都是零。
我正在尝试查找所有目录和子目录中的文件数。
这是脚本:
Get-ChildItem $rootFolder -Recurse -Directory | Select-Object FullName, @{Name="FileCount";Expression={(Get-ChildItem $_ -File | Measure-Object).Count }}
C:\MyDirectory\Script = 完美
\\MyNetworkShare\MyDirectory\Script = 正确的目录列表,但所有文件计数为零
我最终想做的是只找到其中只有一个 (1) 文件的目录。在弄清楚 NAS 与本地的区别之前,我无法做到这一点。
谢谢!
按照建议添加了 .FullName。这是通过网络和本地输出的样子。会不会是一些奇怪的目录,因为我正在尝试管理音乐库和许多奇怪的字符。
非常感谢@Santiago Squarzon!正如他的评论中所述,解决方案实际上是添加 -LiteralPath 。所以工作脚本是:
Get-ChildItem $rootFolder -Recurse -Directory | Select-Object FullName, @{Name="FileCount";Expression={(Get-ChildItem -LiteralPath $_.FullName -File | Measure-Object).Count }}
并且最初在使用“正常”目录名称与用于显示音乐发布数据的非常长的奇数名称的本地潜水上进行测试肯定是破坏性的。
这不是 one-liner 但可能有用吗?
Clear-Host
$rootFolder = '\ComputerMentor2\CMShared\NAS-Downloads'
Get-ChildItem $rootFolder -Recurse -Directory |
Select-Object @{Name="FileCount";
Expression={([Array](Get-ChildItem -Path "$($_.Fullname)" -filter "*.*" -File)).count}},
@{Name="Path from Root";Expression={($_.FullName.Substring(($rootFolder.Length)+1))}} |
Sort -Property "Path from Root"
示例输出:
FileCount Path from Root
--------- --------------
1 Calibre EBook Software
4 iPad Stuff
1 LibreOffice
1 No Longer Available Software
3 No Longer Available Software\Macrium
1 No Longer Available Software\MS Money
2 Peripheral Software
1 Peripheral Software\AMD
9 Purchased Software
1 SanDisk
43 Test
27 Useful-Utilities
1 Useful-Utilities\DG Readiness Tool
Useful-Utilities\DG Readiness Tool\dgreadiness_v3.6
6 Useful-Utilities\DG Readiness Tool\dgreadiness_v3.6\dgreadiness_v3.6
4 Useful-Utilities\Folder Marker Home
5 Useful-Utilities\Free File Sync
5 Useful-Utilities\Go Contact Sync Mod
9 Useful-Utilities\GRC
3 Useful-Utilities\irFanView
3 Useful-Utilities\MiniTool Partition Wizard
3 Useful-Utilities\NirSoft
4 Useful-Utilities\Samsung
1 Useful-Utilities\SARA
5 Video Codecs
5 Windows Kits
注意:没有计数的目录没有文件!
我是 PowerShell 的新手,修改了我找到的一个脚本。它像我期望的那样在我的 windows 计算机(C:\ 驱动器)上本地运行。但是当我 运行 通过我的网络通过更改 NAS 上网络共享的路径时,它会正确列出所有目录,但所有文件计数都是零。
我正在尝试查找所有目录和子目录中的文件数。
这是脚本:
Get-ChildItem $rootFolder -Recurse -Directory | Select-Object FullName, @{Name="FileCount";Expression={(Get-ChildItem $_ -File | Measure-Object).Count }}
C:\MyDirectory\Script = 完美
\\MyNetworkShare\MyDirectory\Script = 正确的目录列表,但所有文件计数为零
我最终想做的是只找到其中只有一个 (1) 文件的目录。在弄清楚 NAS 与本地的区别之前,我无法做到这一点。
谢谢!
按照建议添加了 .FullName。这是通过网络和本地输出的样子。会不会是一些奇怪的目录,因为我正在尝试管理音乐库和许多奇怪的字符。
非常感谢@Santiago Squarzon!正如他的评论中所述,解决方案实际上是添加 -LiteralPath 。所以工作脚本是:
Get-ChildItem $rootFolder -Recurse -Directory | Select-Object FullName, @{Name="FileCount";Expression={(Get-ChildItem -LiteralPath $_.FullName -File | Measure-Object).Count }}
并且最初在使用“正常”目录名称与用于显示音乐发布数据的非常长的奇数名称的本地潜水上进行测试肯定是破坏性的。
这不是 one-liner 但可能有用吗?
Clear-Host
$rootFolder = '\ComputerMentor2\CMShared\NAS-Downloads'
Get-ChildItem $rootFolder -Recurse -Directory |
Select-Object @{Name="FileCount";
Expression={([Array](Get-ChildItem -Path "$($_.Fullname)" -filter "*.*" -File)).count}},
@{Name="Path from Root";Expression={($_.FullName.Substring(($rootFolder.Length)+1))}} |
Sort -Property "Path from Root"
示例输出:
FileCount Path from Root
--------- --------------
1 Calibre EBook Software
4 iPad Stuff
1 LibreOffice
1 No Longer Available Software
3 No Longer Available Software\Macrium
1 No Longer Available Software\MS Money
2 Peripheral Software
1 Peripheral Software\AMD
9 Purchased Software
1 SanDisk
43 Test
27 Useful-Utilities
1 Useful-Utilities\DG Readiness Tool
Useful-Utilities\DG Readiness Tool\dgreadiness_v3.6
6 Useful-Utilities\DG Readiness Tool\dgreadiness_v3.6\dgreadiness_v3.6
4 Useful-Utilities\Folder Marker Home
5 Useful-Utilities\Free File Sync
5 Useful-Utilities\Go Contact Sync Mod
9 Useful-Utilities\GRC
3 Useful-Utilities\irFanView
3 Useful-Utilities\MiniTool Partition Wizard
3 Useful-Utilities\NirSoft
4 Useful-Utilities\Samsung
1 Useful-Utilities\SARA
5 Video Codecs
5 Windows Kits
注意:没有计数的目录没有文件!