在PowerShell中运行CMD命令
在PowerShell中运行CMD命令
我在运行PowerShell命令时遇到了一系列问题。它只是运行在CMD提示窗口中运行的命令。\n以下是命令:\n\"C:\\Program Files (x86)\\Microsoft Configuration Manager\\AdminConsole\\bin\\i386\\CmRcViewer.exe\" PCNAME
\n我已经尝试了以下方法,但都没有成功(我尝试了许多次迭代,试图找到一个可行的方法。语法可能都搞砸了):\n
$TEXT = $textbox.Text #$textbox是用户输入计算机名称的地方。 $CMDCOMMAND = "C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe" Start-Process '"$CMDCOMMAND" $TEXT' #iex -Command ('"C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\i386\CmRcViewer.exe"' $TEXT)
\n该命令只会打开SCCM远程连接窗口,连接到用户在文本框中指定的计算机。
问题的出现原因:
- 在PowerShell中运行CMD命令时,可能会遇到一些问题。例如,某些命令可能无法在PowerShell中直接运行,或者需要使用CMD的特定功能。
解决方法:
- 一种解决方法是将PowerShell中的命令通过管道传递给CMD。通过运行以下命令,将notepad.exe
命令传递给CMD,然后CMD将打开记事本应用程序。
PS C:\> "notepad.exe" | cmd
- 当命令在CMD中运行后,将返回到PowerShell提示符,并可以继续运行PowerShell脚本。
Edits:
- 如mklement0所指出,这种方法会显示CMD的启动消息。如果将上述方法的输出复制到另一个终端中,启动消息也会被复制。
- 即使在PowerShell中使用&
符号时不能正常工作,这种方法仍然有效。例如,& "mklink"
对我来说无法正常工作,而"mklink" | cmd
可以正常工作。
运行CMD命令在PowerShell中的问题是由于PowerShell无法直接执行CMD命令而导致的。解决方法是在PowerShell中创建一个脚本,然后通过调用cmd.exe来执行CMD命令。
在脚本中,每个CMD命令需要放在一个新的行中,并再次调用cmd.exe。这样可以保证脚本可以被签名并从PowerShell中运行,并将命令输出到命令提示符/cmd中。
这种方法比直接运行批处理文件更安全。如果想要执行批处理文件,尤其是希望为所有计划任务脚本签名的情况下,可以使用这种方法。
例如,如果想要运行命令sc query serviceName
,可以使用以下命令:
cmd.exe /c "sc query serviceName"
对于.exe
文件,也可以在PowerShell中直接运行它们,而不需要使用cmd
命令。只需要记住PowerShell无法解析sc
命令,但可以解析sc.exe
命令,所以可以使用sc.exe query serviceName
来运行。同样,对于fc.exe
命令,只需要使用fc.exe file1.bin file2.bin
即可在PowerShell控制台中运行。
总结起来,通过在PowerShell中创建脚本并调用cmd.exe来执行CMD命令可以解决在PowerShell中无法直接运行CMD命令的问题。这种方法比直接运行批处理文件更安全,同时也可以在PowerShell中直接运行.exe
文件。
问题的出现原因:
在PowerShell中,字符串“...”只是一个字符串,PowerShell通过将其回显到屏幕来评估它。要让PowerShell执行其名称在字符串中的命令,需要使用调用运算符&。
问题的解决方法:
要执行命令名称为字符串形式时,使用&符号。如果命令的名称或路径中有空格,则必须使用&符号。如果命令的名称或路径中没有空格,则不需要使用&符号。构造命令行字符串并尝试使用&执行不起作用,因为PowerShell会认为整个字符串是可执行文件的名称。相反,应该只引用可执行文件的名称,并在后面添加可执行文件的参数。
&与cmd的区别:
&是PowerShell调用运算符,用于执行命令。它允许在字符串中包含命令的名称或exe文件的路径时执行命令。还可以指定脚本块(例如&{$foo=42}
)或CommandInfo对象(例如$cmd = Get-Command Get-Date; &$cmd
)。cmd是不同的shell。需要注意的是,&在子范围中执行,因此可以注意到在设置$foo的脚本块完成后,$foo不再被设置。
在一个无法工作的脚本上解决了几个小时的痛苦,只添加了这个简单的字符。感谢这个简单明了的解释。
对于上下文而言,我正在更新一个Windows 10的autounattend.xml脚本,该脚本从可启动的USB中静默安装Windows,然后启动一个配置批处理脚本。之前,脚本只会回显命令,而不执行。