我有一个带有PHP的HTML表单来执行PowerShell脚本。
除了textarea输入字段外,一切正常。如果我在textarea框中执行单行文本,它可以正常工作并启动PowerShell脚本。如果我插入多行文本,包括回车符,它只会占用第一个单词/行并删除其余部分。
以下是启动PowerShell脚本的命令:
在textarea框中有一个单词:
powershell -command file.ps1 -textarea 'test'
框中有多个单词
powershell -command file.ps1 -textarea 'firstword
如上所示,当TextArea字段中有多行时,它将删除它并仅发送第一个单词。这会导致PowerShell脚本失败,因为缺少终结器。
有什么想法吗?
以下是代码:
if($isValid) {
$customerid = $_POST["DLState"];
$changesubject = $_POST['subject'];
$starttime = $_POST['starttime'];
$endtime = $_POST['endtime'];
$changedetails = $_POST['details'];
$psScriptPath = "*****";
$query = shell_exec("powershell -command $psScriptPath -username '$user' -subject '$changesubject' -orgid '$customerid' -textarea '$changedetails' -edt '$endtime' -sdt '$starttime' < NUL");
}
HTML文本区域标记
<textarea id="txtarea" name="details" cols="40" rows="6"></textarea>
答案 0 :(得分:0)
如果我正确理解了您的脚本,并且所有这些username / subject / orgid / etc都是$ psScriptPath的脚本属性,那么您可以尝试以这种方式运行它:
$query = shell_exec("powershell -command "& {$psScriptPath -username '$user' -subject '$changesubject' -orgid '$customerid' -textarea '$changedetails' -edt '$endtime' -sdt '$starttime'}"");
至少这对我很有用:
测试脚本:
PS C:\> gc c:\1.ps1
param($App)
& $App
从CMD shell调用:
C:\powershell -noprofile -command "& {c:\1.ps1 -App 'Notepad.exe'}"
答案 1 :(得分:0)
看起来像windows shell不喜欢回车符/换行符,所以我对base64进行了编码,然后在进入PowerShell后对其进行解码。一切都好。
$changedetails = $_POST['details'];
$changedetailsencoded = base64_encode($changedetails);