我无法使用 defrag.exe,但可以使用 Optimize-Volume cmdlet

我无法使用 defrag.exe,但可以使用 Optimize-Volume cmdlet

我遇到了一个奇怪的问题。我不知道它是怎么发生的,为什么会发生,但它就是发生了。

事情非常简单,我可以Optimize-Volume在 PowerShell 7 和 Windows PowerShell 上使用 cmdlet 对我的驱动器进行碎片整理,没有任何问题,它运行正常。

此命令按预期工作:

Optimize-Volume -DriveLetter D -Analyze -Defrag

Defrag.exe现在我不知道和Optimize-Volumecmdlet之间的关系,但我认为它们具有非常相似的功能,并且defrag.exe似乎有更多的应用程序,所以我假设Optimize-Volume是一个包装器defrag.exe

但是,无论如何,这个命令都无法运行,但它的作用与上面的 PowerShell 命令完全相同:

defrag D: /A /D

它仅显示此错误消息:

An invalid command line option was specified. (0x89000008)

然后它显示帮助信息。

我也尝试过使用参数的全名:

defrag D: /Analyze /Defrag

结果:与上面相同的错误。

我曾尝试在 PowerShell 7、Windows PowerShell 和命令提示符上运行defrag,但总是显示上述错误消息,这种现象完全可重现。

defrag.exe帮助信息中写的所有参数都是有效的,为什么它总是抱怨参数无效?我该如何defrag.exe正确使用?


编辑:

输出fsutil dirty

---- DIRTY Commands Supported ----

query           Query the dirty bit
set             Set the dirty bit

fsutil dirty query D:

Volume - D: is NOT Dirty

小写命令的输出与正确大小写命令相同。


这是我的系统路径环境变量,我使用 ; 作为分隔符并将其分成多行以提高可读性:

PS C:\Windows\System32> (gp 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\').Path.split(';')
C:\Program Files (x86)\Common Files\Oracle\Java\javapath
C:\Program Files (x86)\dotnet\
C:\Program Files (x86)\Embarcadero\Studio\21.0\bin
C:\Program Files (x86)\Embarcadero\Studio\21.0\bin64
C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\
C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\
C:\Program Files (x86)\Microsoft SQL Server\150\DTS\Binn\
C:\Program Files (x86)\Microsoft SQL Server\150\Tools\Binn\
C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common
C:\Program Files (x86)\QuickTime\QTSystem\
C:\Program Files (x86)\sbt\bin
C:\Program Files (x86)\scala\bin
C:\Program Files (x86)\Windows Kits\10\Microsoft Application Virtualization\Sequencer\
C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\
C:\Program Files\7-Zip\
C:\Program Files\Common Files\Oracle\Java\javapath
C:\Program Files\dotnet\
C:\Program Files\Elmer 9.0-Release\bin
C:\Program Files\Microsoft MPI\Bin\
C:\Program Files\Microsoft SQL Server\130\Tools\Binn\
C:\Program Files\Microsoft SQL Server\150\DTS\Binn\
C:\Program Files\Microsoft SQL Server\150\Tools\Binn\
C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\
C:\Program Files\Microsoft VS Code\bin
C:\Program Files\nodejs\
C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR
C:\Program Files\PowerShell\7\
C:\Program Files\Python39\
C:\Program Files\Python39\Scripts\
C:\Program Files\Tcl86\bin
C:\Strawberry\c\bin
C:\Strawberry\perl\bin
C:\Strawberry\perl\bin\
C:\Strawberry\perl\site\bin
C:\Strawberry\perl\site\bin\
C:\texlive\2021\bin\win32
C:\Users\Public\Documents\Embarcadero\Studio\21.0\Bpl
C:\Windows
C:\Windows\system32
C:\Windows\System32\OpenSSH\
C:\Windows\System32\Wbem
C:\Windows\System32\WindowsPowerShell\v1.0\
D:\CliExec
D:\NSudo
D:\SysinternalsSuite\

我不删除服务:

PS C:\Windows\System32> get-service -displayname *delivery*

Status   Name               DisplayName
------   ----               -----------
Running  DoSvc              Delivery Optimization

答案1

实际上,对于这种行为有一个简单的解释defrag.exe,我起初不知道指定的无效命令行选项是什么,因为两个开关都显示在它的帮助消息中,而这正是我认为将从 PowerShell 命令到该命令的字面翻译的命令defrag.exe

然后我试着跑defrag d: /a

然后奇迹发生了:

Invoking analysis on Tremillia (D:)...


The operation completed successfully.

Post Defragmentation Report:

        Volume Information:
                Volume size                 = 3.00 TB
                Free space                  = 2.62 TB
                Total fragmented space      = 0%
                Largest free space size     = 1.49 TB

        Note: File fragments larger than 64MB are not included in the fragmentation statistics.

        You do not need to defragment this volume.

然后我跑defrag d: /d

Invoking defragmentation on Tremillia (D:)...


Pre-Optimization Report:

        Volume Information:
                Volume size                 = 3.00 TB
                Free space                  = 2.62 TB
                Total fragmented space      = 0%
                Largest free space size     = 1.49 TB

        Note: File fragments larger than 64MB are not included in the fragmentation statistics.

The operation completed successfully.

Post Defragmentation Report:

        Volume Information:
                Volume size                 = 3.00 TB
                Free space                  = 2.62 TB
                Total fragmented space      = 0%
                Largest free space size     = 1.49 TB

        Note: File fragments larger than 64MB are not included in the fragmentation statistics.

两个操作均成功完成,但是当我再次尝试在一个命令中使用这两个开关时,无效的命令行选项错误再次弹出。

猜猜怎么了?这两个开关不能一起使用,看起来它们是相互排斥的,而且相互冲突,但是我在命令中的一个命令中使用了这两个开关,optimize-volume所以我认为这可以在这里起作用,但是这个过程有两个阶段……

所以这个错误An invalid command line option was specified. (0x89000008)实际上意味着冲突的开关一起使用,开关相互无效,但错误信息肯定可以更清楚,而且我再次找不到任何文档提到这两个开关/Analyze不能/Defrag一起使用......

相关内容