我有一个非常基本的HTA表格,带有复选框和按钮。我正在尝试使用HTA中的VBScript将复选框状态传递给PowerShell脚本,该脚本在单击按钮时调用。不幸的是,我无法传递参数的值。它一直是空的。
HTA中的代码:
<html>
<head>
<title>Test Form</title>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<hta:application applicationname="Proof of concept version="1.0" />
<script language="vbscript">
Sub Resize()
window.resizeTo 500,450
End Sub
Sub ExecutePowerShell()
Dim oShell, scriptPath, appCmd, retVal, retData, isTestCheckBoxChecked
'Collect value from input form
isTestCheckBoxChecked = document.getElementByID("input_checkBoxTest").checked
MsgBox isTestCheckBoxChecked
Set oShell = CreateObject("Wscript.Shell")
Set scriptPath = ".\TestPowershell.ps1 -isTestCheckBoxChecked " & isTestCheckBoxChecked
appCmd = "powershell.exe " & scriptPath
retVal = oShell.Run(appCmd, 1, true)
retData = document.parentwindow.clipboardData.GetData("text")
End Sub
</script>
</head>
<body onload="Resize()">
<h1>Test Form:</h1>
<div style="margin-top:10px; margin-bottom:30px;">
The scipt does the following checks:
<ul>
<li><input name="input_checkBoxTest" type="checkbox" checked="checked"/> This is a test textbox</li>
</ul>
</div>
<br /><br />
<input type="button" id="btn_execute" value="Execute" onclick="ExecutePowerShell()" />
<br /><br />
</body>
</html>
Powershell脚本:
#Param([Parameter(Mandatory=$true)][bool]$isTestCheckBoxChecked)
Write-host "The value is '$isTestCheckBoxChecked'"
我得到的输出是:
"The value is ''"
任何指导都将不胜感激。
答案 0 :(得分:4)
三件事:
请勿在以下语句中使用Set
。它只是一个字符串,而不是一个对象,因此在这里使用Set
会引发错误。
' Incorrect
Set scriptPath = ".\TestPowershell.ps1 -isTestCheckBoxChecked " & isTestCheckBoxChecked
' Correct
scriptPath = ".\TestPowershell.ps1 -isTestCheckBoxChecked " & isTestCheckBoxChecked
PowerShell中的Param
语句已注释掉(#Param
)。在发布您的问题时,这可能只是一个错字。
取消注释Param
语句后,您将收到有关从字符串转换为布尔值的错误消息。 PowerShell分别以$false/$true
或0/1
格式接受False/True
值的布尔值。所以,你有两个选择:
' Prefix the boolean with a '$'
scriptPath = ".\TestPowershell.ps1 -isTestCheckBoxChecked $" & isTestCheckBoxChecked
' Or, convert the boolean to a 0/1 (False/True)
scriptPath = ".\TestPowershell.ps1 -isTestCheckBoxChecked " & Abs(isTestCheckBoxChecked)