Powershell SaveFileDialog - 弹出两次

Powershell SaveFileDialog - Pops twice

请告诉我为什么在此代码中 SaveFileDialog() 提示输入文件名两次。

Function output-scrub{
  [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null

  $global:SaveFileDialogNB = New-Object System.Windows.Forms.SaveFileDialog
  $global:SaveFileDialogNB.initialDirectory = "\server\folder"
  $global:SaveFileDialogNB.filter = "All files (*.*)| *.*"
  $global:SaveFileDialogNB.SupportMultiDottedExtensions = $true
  #$global:SaveFileDialogNB.ShowDialog() | Out-Null
  #just to display the filename value
  $global:SaveFileDialogNB.filename
  #get just filename and the extension into a variable
  #$F1Filename = Split-Path $global:OpenFileDialog.filename -Leaf  ---commented out, only here if we only want to show filename extension alone.
    $global:SaveFileDialogNB.ShowDialog() | Out-Null
    if($SaveFileDialogNB.ShowDialog() -eq 'OK'){
        convertToHashTWO
    }
  return
}


function outPutScrubbedBalances{
    output-scrub
    write-host "file has been saved"
    return
}

快把我逼疯了。

您已拨打 $ShowDialog() 两次电话。一次在 if 语句之前,第二次在 if 语句的条件部分与 'OK' 进行比较。

调用一次,捕获对话结果,然后查看结果:

$result = $yourDialog.ShowDialog()  
if($result  -eq "OK")               
{              
    # Do something
}

或者,在 if 语句的条件部分调用它并检查结果:

if($yourDialog.ShowDialog() -eq "OK")
{
    # do something
}

Side-note: 处理一次性组件很重要,不要忽视它。显示对话框并确保它在使用后被释放的更好方法是:

$dialog = New-Object System.Windows.Forms.SaveFileDialog
try
{
    #Set up dialog, for example
    $dialog.filter = "All files (*.*)| *.*"
    if($dialog.ShowDialog() -eq "OK")
    {
        # do something here, for example
        Write-Host "Save Clicked."
    }
}
finally
{
    if($dialog) { $dialog.Dispose() }
}