Windows 我的命令行程序在cmdshell上找不到其配置目录,但在PowerShell上找到了
我在脚本中使用了一个命令行程序,它在cmdshell上找不到它的config目录,但在PowerShell上找到了它 即使这个问题似乎与某些特定程序的行为(一个名为Windows 我的命令行程序在cmdshell上找不到其配置目录,但在PowerShell上找到了,windows,shell,powershell,path,Windows,Shell,Powershell,Path,我在脚本中使用了一个命令行程序,它在cmdshell上找不到它的config目录,但在PowerShell上找到了它 即使这个问题似乎与某些特定程序的行为(一个名为OCLHashCat的命令行哈希分析器工具)相对应,我认为这主要是Windows shell行为和/或所涉及的变量的问题。让我解释一下 这是命令行程序的目录(OCLHashCat)的内容: 但是如果我尝试运行,它无法找到它自己的一些文件/目录: C:\Temporal>oclhashcat64 Test.hccap -m 250
OCLHashCat
的命令行哈希分析器工具)相对应,我认为这主要是Windows shell行为和/或所涉及的变量的问题。让我解释一下
这是命令行程序的目录(OCLHashCat
)的内容:
但是如果我尝试运行,它无法找到它自己的一些文件/目录:
C:\Temporal>oclhashcat64 Test.hccap -m 2500 -a 3 ?d?d?d?d?d?d?d?d
oclHashcat v1.31 starting...
Device #1: Bonaire, 1024MB, 1050Mhz, 12MCU
Device #2: Tahiti, 3072MB, 900Mhz, 28MCU
Hashes: 1 hashes; 1 unique digests, 1 unique salts
Bitmaps: 8 bits, 256 entries, 0x000000ff mask, 1024 bytes
Applicable Optimizers:
* Zero-Byte
* Single-Hash
* Single-Salt
* Brute-Force
Watchdog: Temperature abort trigger set to 90c
Watchdog: Temperature retain trigger set to 80c
Device #1: Kernel ./kernels/4098/m02500.Bonaire_1573.4_1573.4 (VM).kernel not fo
und in cache! Building may take a while...
ERROR: ./kernels/4098/m02500.VLIW1.llvmir: No such file or directory
注意最后一个错误:它找不到文件,但我已经检查了这样的文件是否存在:
C:\Temporal>dir d:\Programas\HashCat\OCLHashCat\kernels\4098\m02500.VLIW1.llvmir
El volumen de la unidad D es Datos
El número de serie del volumen es: 57E9-ACA0
Directorio de d:\Programas\HashCat\OCLHashCat\kernels\4098
02/10/2014 12:11 pm 326.912 m02500.VLIW1.llvmir
1 archivos 326.912 bytes
如果我将CHDir插入程序目录:
d:\Programas\HashCat\OCLHashCat>oclhashcat64 -m 2500 "c:\Temporal\Test.hccap" -a
3 ?d?d?d?d?d?d?d?d
oclHashcat v1.31 starting...
Device #1: Bonaire, 1024MB, 1050Mhz, 12MCU
Device #2: Tahiti, 3072MB, 900Mhz, 28MCU
Hashes: 1 hashes; 1 unique digests, 1 unique salts
Bitmaps: 8 bits, 256 entries, 0x000000ff mask, 1024 bytes
Applicable Optimizers:
* Zero-Byte
* Single-Hash
* Single-Salt
* Brute-Force
Watchdog: Temperature abort trigger set to 90c
Watchdog: Temperature retain trigger set to 80c
Device #1: Kernel ./kernels/4098/m02500.Bonaire_1573.4_1573.4 (VM).kernel (25932
0 bytes)
Device #1: Kernel ./kernels/4098/markov_le_v1.Bonaire_1573.4_1573.4 (VM).kernel
(92404 bytes)
Device #1: Kernel ./kernels/4098/bzero.Bonaire_1573.4_1573.4 (VM).kernel (30496
bytes)
Device #2: Kernel ./kernels/4098/m02500.Tahiti_1573.4_1573.4 (VM).kernel (259428
bytes)
Device #2: Kernel ./kernels/4098/markov_le_v1.Tahiti_1573.4_1573.4 (VM).kernel (
92388 bytes)
Device #2: Kernel ./kernels/4098/bzero.Tahiti_1573.4_1573.4 (VM).kernel (30492 b
ytes)
[s]tatus [p]ause [r]esume [b]ypass [q]uit =>
那就是:一切都像一个符咒
在Powershell中,无论我从何处调用程序,一切都可以完美运行。例如:
PS C:\Temporal> oclHashcat64.exe Test.hccap -m 2500 -a 3 ?d?d?d?d?d?d?d?d
oclHashcat v1.31 starting...
Device #1: Bonaire, 1024MB, 1050Mhz, 12MCU
Device #2: Tahiti, 3072MB, 900Mhz, 28MCU
Hashes: 1 hashes; 1 unique digests, 1 unique salts
Bitmaps: 8 bits, 256 entries, 0x000000ff mask, 1024 bytes
Applicable Optimizers:
* Zero-Byte
* Single-Hash
* Single-Salt
* Brute-Force
Watchdog: Temperature abort trigger set to 90c
Watchdog: Temperature retain trigger set to 80c
Device #1: Kernel d:\Programas\HashCat\OCLHashCat/kernels/4098/m02500.Bonaire_1573.4_1573.4 (VM).kernel (259320 bytes)
Device #1: Kernel d:\Programas\HashCat\OCLHashCat/kernels/4098/markov_le_v1.Bonaire_1573.4_1573.4 (VM).kernel (92404 bytes)
Device #1: Kernel d:\Programas\HashCat\OCLHashCat/kernels/4098/bzero.Bonaire_1573.4_1573.4 (VM).kernel (30496 bytes)
Device #2: Kernel d:\Programas\HashCat\OCLHashCat/kernels/4098/m02500.Tahiti_1573.4_1573.4 (VM).kernel (259428 bytes)
Device #2: Kernel d:\Programas\HashCat\OCLHashCat/kernels/4098/markov_le_v1.Tahiti_1573.4_1573.4 (VM).kernel (92388 bytes)
Device #2: Kernel d:\Programas\HashCat\OCLHashCat/kernels/4098/bzero.Tahiti_1573.4_1573.4 (VM).kernel (30492 bytes)
[s]tatus [p]ause [r]esume [b]ypass [q]uit =>
,但是有一些原因使我需要经典的cmdshell,比如与CygWin一起使用(这应该允许我使用GNU屏幕,但这是另一回事)
我认为问题来自于/kernels…
引用,这使得命令行程序(OCLHashCat
)尝试在运行路径中搜索目录,而不是在源路径(程序的路径树)中搜索
谁能给我一些想法试试吗
额外信息:该程序有Linux和Windows版本,因此可能存在编译/编程问题或类似问题
额外信息2:这个程序在去年已经更改了4-5次版本,我一直有这个问题
请求下的额外信息:
PS C:\Temporal> get-command oclHashcat64.exe | fl *
HelpUri :
FileVersionInfo : File: d:\Programas\HashCat\OCLHashCat\oclHashcat6
4.exe
InternalName:
OriginalFilename:
FileVersion:
FileDescription:
Product:
ProductVersion:
Debug: False
Patched: False
PreRelease: False
PrivateBuild: False
SpecialBuild: False
Language:
Path : d:\Programas\HashCat\OCLHashCat\oclHashcat64.exe
Extension : .exe
Definition : d:\Programas\HashCat\OCLHashCat\oclHashcat64.exe
Visibility : Public
OutputType : {System.String}
Name : oclHashcat64.exe
CommandType : Application
ModuleName :
Module :
Parameters :
ParameterSets :
C:\Temporal>oclhashcat64 "c:\Temporal\Test.hccap" -m 2500 -a 3 ?d?d?d?d?d?d?d?d
oclHashcat v1.31 starting...
Device #1: Bonaire, 1024MB, 1050Mhz, 12MCU
Device #2: Tahiti, 3072MB, 900Mhz, 28MCU
Hashes: 1 hashes; 1 unique digests, 1 unique salts
Bitmaps: 8 bits, 256 entries, 0x000000ff mask, 1024 bytes
Applicable Optimizers:
* Zero-Byte
* Single-Hash
* Single-Salt
* Brute-Force
Watchdog: Temperature abort trigger set to 90c
Watchdog: Temperature retain trigger set to 80c
Device #1: Kernel ./kernels/4098/m02500.Bonaire_1573.4_1573.4 (VM).kernel not fo
und in cache! Building may take a while...
ERROR: ./kernels/4098/m02500.VLIW1.llvmir: No such file or directory
因此,PowerShell中的路径似乎是正确的
关于SSH的额外信息:通过在我的计算机(运行Bitvise SSH服务器的Windows 7 SP1)中进行SSHing,行为完全相同。它不适用于标准外壳:
login as: Luis-
Luis-@Windu-'s password:
Microsoft Windows [Versión 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. Reservados todos los derechos.
C:\Users\Luis->cd \Temporal
C:\Temporal>oclhashcat64 Test.hccap -m 2500 -a 3 ?d?d?d?d?d?d?d?d
oclHashcat v1.31 starting...
WARN: ADL_Overdrive6_FanSpeed_Get(): -5
Device #1: Bonaire, 1024MB, 1050Mhz, 12MCU
Device #2: Tahiti, 3072MB, 900Mhz, 28MCU
Hashes: 1 hashes; 1 unique digests, 1 unique salts
Bitmaps: 8 bits, 256 entries, 0x000000ff mask, 1024 bytes
Applicable Optimizers:
* Zero-Byte
* Single-Hash
* Single-Salt
* Brute-Force
Watchdog: Temperature abort trigger set to 90c
Watchdog: Temperature retain trigger set to 80c
Device #1: Kernel ./kernels/4098/m02500.Bonaire_1573.4_1573.4 (VM).kernel not found
in cache! Building may take a while...
ERROR: ./kernels/4098/m02500.VLIW1.llvmir: No such file or directory
对于powershell来说:
login as: Luis-
Luis-@Windu-'s password:
Microsoft Windows [Versión 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. Reservados todos los derechos.
C:\Users\Luis->powershell
Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. Reservados todos los derechos.
PS C:\Users\Luis-> cd \
PS C:\> cd .\Temporal
PS C:\Temporal> oclHashcat64.exe Test.hccap -m 2500 -a 3 ?d?d?d?d?d?d?d?d
oclHashcat v1.31 starting...
WARN: ADL_Overdrive6_FanSpeed_Get(): -5
Device #1: Bonaire, 1024MB, 1050Mhz, 12MCU
Device #2: Tahiti, 3072MB, 900Mhz, 28MCU
Hashes: 1 hashes; 1 unique digests, 1 unique salts
Bitmaps: 8 bits, 256 entries, 0x000000ff mask, 1024 bytes
Applicable Optimizers:
* Zero-Byte
* Single-Hash
* Single-Salt
* Brute-Force
Watchdog: Temperature abort trigger set to 90c
Watchdog: Temperature retain trigger set to 80c
Device #1: Kernel d:\Programas\HashCat\OCLHashCat/kernels/4098/m02500.Bonaire_1573.
4_1573.4 (VM).kernel (259320 bytes)
Device #1: Kernel d:\Programas\HashCat\OCLHashCat/kernels/4098/markov_le_v1.Bonaire
_1573.4_1573.4 (VM).kernel (92404 bytes)
Device #1: Kernel d:\Programas\HashCat\OCLHashCat/kernels/4098/bzero.Bonaire_1573.4
_1573.4 (VM).kernel (30496 bytes)
Device #2: Kernel d:\Programas\HashCat\OCLHashCat/kernels/4098/m02500.Tahiti_1573.4
_1573.4 (VM).kernel (259428 bytes)
Device #2: Kernel d:\Programas\HashCat\OCLHashCat/kernels/4098/markov_le_v1.Tahiti_
1573.4_1573.4 (VM).kernel (92388 bytes)
Device #2: Kernel d:\Programas\HashCat\OCLHashCat/kernels/4098/bzero.Tahiti_1573.4_
1573.4 (VM).kernel (30492 bytes)
[s]tatus [p]ause [r]esume [b]ypass [q]uit =>
根据要求提供额外信息:
PS C:\Temporal> get-command oclHashcat64.exe | fl *
HelpUri :
FileVersionInfo : File: d:\Programas\HashCat\OCLHashCat\oclHashcat6
4.exe
InternalName:
OriginalFilename:
FileVersion:
FileDescription:
Product:
ProductVersion:
Debug: False
Patched: False
PreRelease: False
PrivateBuild: False
SpecialBuild: False
Language:
Path : d:\Programas\HashCat\OCLHashCat\oclHashcat64.exe
Extension : .exe
Definition : d:\Programas\HashCat\OCLHashCat\oclHashcat64.exe
Visibility : Public
OutputType : {System.String}
Name : oclHashcat64.exe
CommandType : Application
ModuleName :
Module :
Parameters :
ParameterSets :
C:\Temporal>oclhashcat64 "c:\Temporal\Test.hccap" -m 2500 -a 3 ?d?d?d?d?d?d?d?d
oclHashcat v1.31 starting...
Device #1: Bonaire, 1024MB, 1050Mhz, 12MCU
Device #2: Tahiti, 3072MB, 900Mhz, 28MCU
Hashes: 1 hashes; 1 unique digests, 1 unique salts
Bitmaps: 8 bits, 256 entries, 0x000000ff mask, 1024 bytes
Applicable Optimizers:
* Zero-Byte
* Single-Hash
* Single-Salt
* Brute-Force
Watchdog: Temperature abort trigger set to 90c
Watchdog: Temperature retain trigger set to 80c
Device #1: Kernel ./kernels/4098/m02500.Bonaire_1573.4_1573.4 (VM).kernel not fo
und in cache! Building may take a while...
ERROR: ./kernels/4098/m02500.VLIW1.llvmir: No such file or directory
关于在CygWin上运行的其他信息:
Luis@Windu /cygdrive/c/Temporal
$ oclhashcat64 Test.hccap -m 2500 -a 3 ?d?d?d?d?d?d?d?d
oclHashcat v1.31 starting...
Device #1: Bonaire, 1024MB, 1050Mhz, 12MCU
Device #2: Tahiti, 3072MB, 900Mhz, 28MCU
Hashes: 1 hashes; 1 unique digests, 1 unique salts
Bitmaps: 8 bits, 256 entries, 0x000000ff mask, 1024 bytes
Applicable Optimizers:
* Zero-Byte
* Single-Hash
* Single-Salt
* Brute-Force
Watchdog: Temperature abort trigger set to 90c
Watchdog: Temperature retain trigger set to 80c
Device #1: Kernel D:\Programas\HashCat\OCLHashCat/kernels/4098/m02500.Bonaire_1573.4_1573.4 (VM).kernel (259320 bytes)
Device #1: Kernel D:\Programas\HashCat\OCLHashCat/kernels/4098/markov_le_v1.Bonaire_1573.4_1573.4 (VM).kernel (92404 bytes)
Device #1: Kernel D:\Programas\HashCat\OCLHashCat/kernels/4098/bzero.Bonaire_1573.4_1573.4 (VM).kernel (30496 bytes)
Device #2: Kernel D:\Programas\HashCat\OCLHashCat/kernels/4098/m02500.Tahiti_1573.4_1573.4 (VM).kernel (259428 bytes)
Device #2: Kernel D:\Programas\HashCat\OCLHashCat/kernels/4098/markov_le_v1.Tahiti_1573.4_1573.4 (VM).kernel (92388 bytes)
Device #2: Kernel D:\Programas\HashCat\OCLHashCat/kernels/4098/bzero.Tahiti_1573.4_1573.4 (VM).kernel (30492 bytes)
[s]tatus [p]ause [r]esume [b]ypass [q]uit =>
所以我们可以说程序在CygWin下运行正常。因为它最初可能是为Linux编程的
也许我至少可以把它用作某种解决方法。这个程序显然是从命令行找到它的归宿,而不是调用
GetModuleFileName
。与cmd不同,PowerShell不使用的lpApplicationName
参数。相反,它修改命令行以使用完整路径。例如,它将“oclHashcat64.exe”
替换为“d:\Programas\HashCat\OCLHashCat\oclHashcat64.exe”
。在cmd中,您必须实际键入完整路径
作为一种解决方法,您可以使用console API为cmd.exe创建新的应用程序。旧的doskey程序为该API提供了一个命令行接口。这样,当您在控制台中键入oclHashcat64
时,cmd.exe将读取别名中设置的完整路径:
doskey /exename=cmd.exe oclHashcat64="D:\Programas\HashCat\OCLHashCat\oclHashcat64.exe" $*
您可以使用doskey/macros:all>alias
将别名(即宏)保存到文件中。然后使用doskey/macrofile=alias
加载它们。您还可以在HKCU\Software\Microsoft\command Processor\AutoRun
中添加命令,以便在cmd.exe启动时加载别名
另一个选项是在
路径
上的某个目录中创建Windows快捷方式(即shell32链接文件)。在命令行中使用可执行文件的完整路径,并将start in目录保留为空(即继承shell的工作目录)。将.LNK
附加到PATHEXT
环境变量,以避免必须键入.LNK扩展名。(我发现链接文件比使用批处理文件作为美化的快捷方式更方便。此外,它们不像批处理文件那样安装Ctrl-C处理程序,这一点让我不那么恼火。)展示如何在powershell中对其进行命名,以便进行比较,@AndyArismendi。恐怕没什么不同。在Powershell中,我看到它使用的是设备行上的完整路径,而不是cmd尝试相对的路径。这就是cmd shell的工作方式。运行应用程序/命令时,当前目录将设置为shell的当前位置。它未设置为应用程序的位置。实际上,我很惊讶它能在PowerShell中工作。@mikez,这种行为自去年以来一直保持不变,即使程序员已经发布了好几次新版本。我已将其添加到我的帖子中。