点脚本 - PowerShell

时间:2018-03-12 15:12:44

标签: powershell

我有一个主PS脚本,它将变量传递给我的表单的点脚本但是当我使用PS本身运行脚本时,它表示你不能在空值表达式上调用方法,但它在ISE中工作正常。有人可以建议是否有办法解决这个问题?

主脚本

formSetting -formSizeW 300 -formSizeH 300 -formText "New Service Account" 
formLabel -labLocW 10 -labLocH 20 -labSizeW 280 -labSizeH 20 -labText "Enter SVC Account Name (Do Not Include SVC_)"
$accountName = formTextBox -tboxLocW 10 -tboxLocH 40 -tboxSizeW 260 -tboxSizeH 30
formLabel -labLocW 10 -labLocH 70 -labSizeW 280 -labSizeH 30 -labText "Select the Site name"
$site = formdrop -droplocW 10 -dropLocH 100  -dropSizeW 260 -dropSizeH 30 -dropInput $siteNames   
formLabel -labLocW 10 -labLocH 130 -labSizeW 280 -labSizeH 30 -labText "Enter a Password"
$password = formTextBox -mastbLocW 10 -mastbLocH 160 -mastbSizeW 260 -mastbSizeH 30 -asSecureString
$ok = formOKBut -okLocW 100 -okLocH 200 -okSizeW 60 -okSizeH 30 -okText "OK"
$checkBox = formCheckBox -checkLocW 30 -checkLocH 220 -checkSizeW 20 -checkSizeH 20 -checkText "Tick this"

点脚本:

function formSetting ($formSizeW,$formSizeH,$formText) {
    $form = New-Object System.Windows.Forms.Form
    $form.Text = $formText
    $form.Size = New-Object System.Drawing.Size($formSizeW,$formSizeH) 
    $form.StartPosition = "CenterScreen"
}

function formLabel($labLocW,$labLocH,$labSizeW,$labSizeH,$labText) {
    $label = New-Object System.Windows.Forms.Label
    $label.Text = $labText
    $label.Location = New-Object System.Drawing.Point($labLocW,$labLocH) 
    $label.Size = New-Object System.Drawing.Size($LabSizeW,$labSizeH)
    $form.Controls.Add($label)
}

function formTextBox($tboxLocW,$tboxLocH,$tboxSizeW,$tboxSizeH) {
    $textBox = New-Object System.Windows.Forms.TextBox
    $textBox.Location = New-Object System.Drawing.Point($tboxLocW,$tboxLocH) 
    $textBox.Size = New-Object System.Drawing.Size($tboxSizeW,$tboxSizeH) 
    $form.Controls.Add($textBox)
    return $textBox
}

function formDrop($dropLocW,$dropLocH,$dropSizeW,$dropSizeH,$dropInput){
    $comboBox = New-Object System.Windows.Forms.ComboBox
    $comboBox.Location = New-Object System.Drawing.Point($dropLocW,$dropLocH)
    $comboBox.Size = New-Object System.Drawing.Size($dropSizeW,$dropSizeH)
    foreach($input in $dropInput) {
        $comboBox.Items.add($input) | Out-Null
    }
    $Form.Controls.Add($comboBox)
    return $comboBox
}

function formOKBut($okLocW,$okLocH,$okSizeW,$okSizeH,$okText) {
    $OKButton = New-Object System.Windows.Forms.Button
    $OKButton.Location = New-Object System.Drawing.Point($okLocW,$okLocH)
    $OKButton.Size = New-Object System.Drawing.Size($okSizeW,$okSizeH)
    $OKButton.Text = $okText
    $OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
    $form.AcceptButton = $OKButton
    $form.Controls.Add($OKButton)
    return $OKButton
}

function maskedTextBox($mastbLocW,$mastbLocH,$mastbSizeW,$mastbSizeH) {
    $MaskedTextBox = New-Object System.Windows.Forms.MaskedTextBox
    $MaskedTextBox.PasswordChar = '*'
    $MaskedTextBox.Top = $mastbLocH
    $MaskedTextBox.Left = $mastbLocW
    $MaskedTextBox.Width = $mastbSizeW
    $MaskedTextBox.Height = $mastbSizeH
    $form.Controls.Add($MaskedTextBox)
}

function formCheckBox($checkLocW,$checkLocH,$checkSizeW,$checkSizeH,$checkText) {
    $Checkbox = New-Object System.Windows.Forms.Checkbox 
    $Checkbox.Location = New-Object System.Drawing.Size($checkLocW,$checkLocH) 
    $Checkbox.Size = New-Object System.Drawing.Size($checkSizeW,$checkSizeH)
    $Checkbox.Text = $checkText
    $Checkbox.TabIndex = 4
    $Form.Controls.Add($Checkbox)
    return $Checkbox
}

enter image description here

1 个答案:

答案 0 :(得分:2)

重新定义此功能,它应该适合您。你的问题在于范围界定。您的对象不存在于函数脚本块之外。

Function FormSetting ($formSizeW, $formSizeH, $formText)
{
    $form = New-Object System.Windows.Forms.Form
    $form.Text = $formText
    $form.Size = New-Object System.Drawing.Size($formSizeW,$formSizeH) 
    $form.StartPosition = "CenterScreen"

    Return $form
}

$Form = FormSetting -formSizeW 300 -formSizeH 300 -formText "New Service Account" 
相关问题