У мене є функції, які працюють лише на деяких сценаріях.
- Він працює на Powershell ISE, але коли я зберігаю одне і те ж у файлі .Ps1 і запускаю його, це не спрацьовує.
- У мене є функція як частина великого сценарію. Він працює і відкриває вікно, коли я запускаю його в Windows 7, але не запускається в Windows Server 2008 R2.
Чому?
Сценарій з функцією та його викликом:
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
Відповіді:
1 для відповіді № 1Не впевнений, що це тут справа, але я пам'ятаю помилку про те, що відкрите діалогове вікно не фокусується і з'являється за іншими відкритими вікнами. Чи можете ви підтвердити?
UPDATE:
Встановіть властивість ShowHelp значення $ true.
$SaveFileDialog.ShowHelp = $true
Він працює в ISE, оскільки стан квартир ISE - це STA за замовчуванням, а режим powerhell - MTA, ви можете перевірити його за допомогою:
[System.Threading.Thread]::CurrentThread.ApartmentState
Ваш код буде працювати, якщо ви відкриєте консоль у режимі STA:
powershell.exe -STA