gpt4 book ai didi

powershell - 如何在do/while循环中正确使用函数?

转载 作者:行者123 更新时间:2023-12-02 23:52:21 25 4
gpt4 key购买 nike

我创建了一个函数,该函数使用文本输入表单创建特定的UI元素。此表单还具有三个按钮:

  • 应该再次显示文本输入以再次执行相同的功能。
  • 另一个应该完成并关闭UI,将输入的文本传递到变量中。
  • 最后一个应该取消UI元素,不执行文本输入表单中的任何操作。

  • 现在我知道代码中的循环并没有真正完成,但是即使执行循环以及将文本形式传递到变量中,我也遇到了问题。我知道我正在做的事情,但是当我看着它时,这似乎是正确的。
  • if循环,while循环和现在的do / while循环更改。
  • do节之间的变量位置更改为while节。 ifwhile循环相同。
    do {
    ChangeDesc
    }
    while ($result -eq [System.Windows.Forms.DialogResult]::Retry)
    {
    $PC = Get-WmiObject -Class Win32_OperatingSystem -ComputerName $HNInputBox.Text
    $PC.Description = $DescInputBox.Text
    $PC.Put()
    }
  • ChangeDesc是函数的名称,可以按预期工作。
  • 预期的工作是循环功能'ChangeDesc',然后在按下'Retry'或'Ok'按钮时,将这些形式传递给变量,如图所示。
  • 当前,它将显示表单,当按下“重试”按钮时,将正确传递表单,然后关闭UI,“确定”按钮将不传递任何输入,并且“取消”将执行相同的操作事情。

  • 下面是我其余的代码行,以供澄清。
    Add-Type -AssemblyName System.Windows.Forms
    Add-Type -AssemblyName System.Drawing

    function ChangeDesc {
    $form = New-Object System.Windows.Forms.Form
    $form.Text = 'Data Entry Form'
    $form.Size = New-Object System.Drawing.Size(300,210)
    $form.StartPosition = 'CenterScreen'

    $AnotherButton = New-Object System.Windows.Forms.Button
    $AnotherButton.Location = New-Object System.Drawing.Point(15,130)
    $AnotherButton.Size = New-Object System.Drawing.Size(75,23)
    $AnotherButton.Text = 'Another?'
    $AnotherButton.DialogResult = [System.Windows.Forms.DialogResult]::Retry
    $form.AcceptButton = $AnotherButton
    $form.Controls.Add($AnotherButton)

    $FinishedButton = New-Object System.Windows.Forms.Button
    $FinishedButton.Location = New-Object System.Drawing.Point(100,130)
    $FinishedButton.Size = New-Object System.Drawing.Size(75,23)
    $FinishedButton.Text = 'Finished'
    $FinishedButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
    $form.CancelButton = $FinishedButton
    $form.Controls.Add($FinishedButton)

    $CancelButton = New-Object System.Windows.Forms.Button
    $CancelButton.Location = New-Object System.Drawing.Point(185,130)
    $CancelButton.Size = New-Object System.Drawing.Size(75,23)
    $CancelButton.Text = 'Cancel'
    $CancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
    $form.CancelButton = $CancelButton
    $form.Controls.Add($CancelButton)

    $HNLabel = New-Object System.Windows.Forms.Label
    $HNLabel.Location = New-Object System.Drawing.Point(10,20)
    $HNLabel.Size = New-Object System.Drawing.Size(280,20)
    $HNLabel.Text = 'Enter Host Name:'
    $form.Controls.Add($HNLabel)

    $HNInputBox = New-Object System.Windows.Forms.TextBox
    $HNInputBox.Location = New-Object System.Drawing.Point(10,40)
    $HNInputBox.Size = New-Object System.Drawing.Size(260,20)
    $form.Controls.Add($HNInputBox)

    $DescLabel = New-Object System.Windows.Forms.Label
    $DescLabel.Location = New-Object System.Drawing.Point(10,70)
    $DescLabel.Size = New-Object System.Drawing.Size(280,20)
    $DescLabel.Text = 'Enter Description:'
    $form.Controls.Add($DescLabel)

    $DescInputBox = New-Object System.Windows.Forms.TextBox
    $DescInputBox.Location = New-Object System.Drawing.Point(10,90)
    $DescInputBox.Size = New-Object System.Drawing.Size(260,20)
    $form.Controls.Add($DescInputBox)

    $form.Topmost = $true

    $form.Add_Shown({$HNInputBox.Select()})
    $result = $form.ShowDialog()
    }

    最佳答案

    当循环终止时,您的表单已经关闭,并且您尝试使用的变量是函数的局部变量。在函数末尾将您要使用的值分配给脚本或全局作用域变量,并且代码应达到您的期望:

    Add-Type -AssemblyName System.Windows.Forms
    Add-Type -AssemblyName System.Drawing

    function ChangeDesc {
    $form = New-Object Windows.Forms.Form
    ...
    $script:result = $form.ShowDialog()

    $script:hostname = $HNInputBox.Text
    $script:description = $DescInputBox.Text
    }

    do {
    ChangeDesc
    } while ($script:result -eq [Windows.Forms.DialogResult]::Retry)

    $PC = Get-WmiObject Win32_OperatingSystem -Computer $script:hostname
    $PC.Description = $script:description
    $PC.Put()

    关于powershell - 如何在do/while循环中正确使用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56689430/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com