我遇到了一个奇怪的问题。我不知道它是怎么发生的,为什么会发生,但它就是发生了。
事情非常简单,我可以Optimize-Volume
在 PowerShell 7 和 Windows PowerShell 上使用 cmdlet 对我的驱动器进行碎片整理,没有任何问题,它运行正常。
此命令按预期工作:
Optimize-Volume -DriveLetter D -Analyze -Defrag
Defrag.exe
现在我不知道和Optimize-Volume
cmdlet之间的关系,但我认为它们具有非常相似的功能,并且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
一起使用......