我有一个主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
}
答案 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"