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 № 1Nã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