如何从Windows命令提示符(CMD)中运行长的Powershell脚本

16 浏览
0 Comments

如何从Windows命令提示符(CMD)中运行长的Powershell脚本

我尝试从命令提示符中启动名为“long name here.ps1”的长PowerShell脚本。但我还尝试确保它在PowerShell中以管理员命令运行。我已经相应地设置了PowerShell中的所有执行策略,我使用了ss64 set-executionpolicy命令指南来使PowerShell正常工作。但我正在尝试使用另一个stackoverflow问题中讨论的以管理员身份运行命令的解决方案。我正在运行一个需要以管理员身份执行PowerShell脚本(.ps1)的批处理脚本,如果用户被UAC提示或需要密码,我并不介意。我目前正在使用以下命令:

powershell.exe -command "&{ Start-Process powershell -ArgumentList '-noprofile -file "C:\long name here.ps1"' -verb RunAs}"

我在https://ss64.com/ps/powershell.html上找到了这个命令,在底部有关如何以管理员身份运行PowerShell命令的详细信息。这段代码的问题是我的PowerShell脚本:1.有参数,2.有一个很长的名字。我尝试了许多不同的命令迭代,但都没有成功,以下是不起作用的命令:

powershell.exe -command "&{ Start-Process powershell -ArgumentList '-noprofile -file C:\long` name` here.ps1' -verb RunAs}"

powershell.exe -command "&{ Start-Process powershell -ArgumentList '-noprofile -file:"C:\long name here.ps1' -verb RunAs}"

另外,我完全不知道如何将参数发送给实际的脚本。

0
0 Comments

问题的出现原因是在通过Windows命令提示符(CMD)运行长的PowerShell脚本时,需要注意引号的使用和转义问题。解决方法是使用powershell.exe -Command命令来运行脚本,并通过-ArgumentList参数传递脚本的路径和参数。

当使用PowerShell.exe -Command命令时,不需要使用引号。例如,可以运行以下命令:PowerShell.exe -Command Get-Service 'wuauserv'。在这种情况下,-Command后面的内容都会被解释为命令。

需要注意的是,在CMD中双引号需要用反斜杠进行转义。因此,如果脚本路径中包含双引号,可以使用以下命令:powershell.exe -Command Start-Process PowerShell -ArgumentList '-NoProfile -File \"C:\long name here.ps1\"' -Verb RunAs。如果脚本有参数,可以在-ArgumentList参数中添加参数的值。

通过这种方法,可以成功运行长的PowerShell脚本并传递参数。但需要注意的是,这种方法只适用于在命令提示符(CMD)中运行脚本,不适用于在PowerShell中运行脚本。由于powershell.exe当前使用的是CommandLineToArgvW方法解析命令行参数,所以这种方法在PowerShell中可能无法正常工作。

总之,通过适当使用引号和转义字符,可以在Windows命令提示符(CMD)中成功运行长的PowerShell脚本并传递参数。但需要注意,这种方法可能不适用于在PowerShell中运行脚本,并且如果底层解析器发生变化,这种方法的有效性可能会受到影响。

0
0 Comments

问题出现的原因是,当在PowerShell脚本的路径中遇到空格时,PowerShell会停止读取路径名称,导致无法找到文件。

解决方法是使用反引号字符`来转义引号。具体而言,可以使用以下命令来运行长PowerShell脚本:

powershell.exe -noprofile -command "&{ start-process powershell -ArgumentList '-noprofile -file `"C:\long file name.ps1`"' -verb RunAs}"

此外,还可以参考这里的其他答案来解决该问题。

可能是因为命令提示符将双引号解释为字符串的起始和结束点,所以即使使用转义的文件名,命令提示符仍然会在解析'-command'行后结束。

以上是关于如何从Windows命令提示符(CMD)中运行长PowerShell脚本的原因和解决方法的整理。

0
0 Comments

问题的出现原因:在Windows命令提示符(CMD)中运行长的PowerShell脚本时,可能会遇到权限不足的问题,因为默认情况下CMD没有以管理员权限运行。这可能导致脚本无法成功执行。

解决方法:

1. 使用开源工具:

可以使用一个名为"elevate.exe"的开源工具,通过以管理员权限启动powershell.exe并传入脚本参数来解决这个问题。使用如下命令:

elevate -- powershell.exe -File "\.ps1" -Arg ""

2. 使用WSH脚本:

如果无法使用外部可执行文件,可以使用Windows Script Host(WSH)脚本"elevate.js"来实现。使用如下命令:

wscript.exe "d:\path\elevate.js" powershell.exe -File "C:\long path\script name.ps1" "long script argument"

3. 自我提升PowerShell脚本:

另一种解决方法是编写一个自我提升的PowerShell脚本。脚本可以在运行时检查是否以管理员权限运行,如果没有,则以管理员权限重新启动脚本并运行所需的命令。示例如下:

$isElevated = ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)

if ( -not $isElevated ) {

Start-Process powershell.exe "-File",('"{0}"' -f $MyInvocation.MyCommand.Path) -Verb RunAs

exit

}

& "d:\long path name\script name.ps1" "Long Argument 1" "Long Argument 2"

以上是解决在Windows命令提示符(CMD)中运行长的PowerShell脚本时权限不足的问题的三种方法。通过使用开源工具、WSH脚本或自我提升的PowerShell脚本,可以解决这个问题并成功运行长的PowerShell脚本。

0