2015-07-27 3 views
1

У меня есть очень простая форма HTA с флажком и кнопкой. Я пытаюсь передать статус флажка, используя VBScript в моем HTA, в сценарий PowerShell, который вызывается при нажатии кнопки. К сожалению, я не могу передать значение параметра. Он продолжает встречаться как пустой.Вызовите PowerShell из VBScript с параметрами

Код ОТЗ:

<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 ''" 

Любое руководство будет оценено.

ответ

3

Три вещи:

  1. Не используйте Set на следующее утверждение. Это просто строка, а не объект, поэтому при использовании Set здесь должна быть ошибка.

    ' Incorrect 
    Set scriptPath = ".\TestPowershell.ps1 -isTestCheckBoxChecked " & isTestCheckBoxChecked 
    
    ' Correct 
    scriptPath = ".\TestPowershell.ps1 -isTestCheckBoxChecked " & isTestCheckBoxChecked 
    
  2. Ваше Param заявление в PowerShell закомментирована (#Param). Возможно, это просто опечатка, когда вы отправляете свой вопрос.

  3. После того как вы раскомментируете свой оператор Param, вы получите сообщение об ошибке преобразования из строки в bool. 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) 
    
+0

Бонд! Вы действительно связаны ... Спасибо вам большое. Знания, полученные здесь, значения Bool могут быть переданы с использованием $ в качестве префикса! –

Смежные вопросы