/ / O script Powershell é executado apenas em determinados cenários - windows, powershell, script, powershell-v2.0

O script Powershell é executado apenas em determinados cenários - windows, powershell, script, powershell-v2.0

Eu tenho funções que só funcionam em alguns scensarios.

  • Ele funciona no Powershell ISE, mas quando eu salvo a mesma coisa em um arquivo .Ps1 e o executo, ele não funciona.
  • Eu tenho a função como parte de um grande roteiro. Ele funciona e abre a janela quando eu o executo no Windows 7, mas não é executado no Windows Server 2008 R2.

Por quê?

O script com a função e sua chamada é:

Function Get-SaveFileTxt($initialDirectory)
{
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") |
Out-Null

$SaveFileDialog = New-Object System.Windows.Forms.SaveFileDialog
$SaveFileDialog.initialDirectory = $initialDirectory
$SaveFileDialog.AddExtension = $true
$SaveFileDialog.DefaultExt = "txt"
$SaveFileDialog.filter = "Text Files (*.txt)| *.txt"
$SaveFileDialog.ShowDialog() | Out-Null
$SaveFileDialog.filename
}

Get-SaveFileTxt

Respostas:

1 para resposta № 1

Não tenho certeza se este é o caso aqui, mas lembro-me de um bug que o diálogo aberto não toma o foco e aparece por trás de outras janelas abertas. Você pode confirmar?

ATUALIZAR:

Defina a propriedade ShowHelp como $ true.

$SaveFileDialog.ShowHelp = $true

Ele funciona no ISE porque o estado de apartamento do ISE é STA por padrão e seu modo de powershell é MTA, você pode verificar com:

[System.Threading.Thread]::CurrentThread.ApartmentState

Seu código funcionará se você abrir o powershell no modo STA:

powershell.exe -STA