我试图将我的powershell控制台放在前面,即使它被最小化.我找到了以下代码:
function Show-Process($Process, [Switch]$Maximize)
{
  $sig = '
    [DllImport("user32.dll")] public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
    [DllImport("user32.dll")] public static extern int SetForegroundWindow(IntPtr hwnd);
  '
  if ($Maximize) { $Mode = 3 } else { $Mode = 4 }
  $type = Add-Type -MemberDefinition $sig -Name WindowAPI -PassThru
  $hwnd = $process.MainWindowHandle
  $null = $type::ShowWindowAsync($hwnd, $Mode)
  $null = $type::SetForegroundWindow($hwnd) 
}
Show-Process -Process (Get-Process -Id $pid) 
Run Code Online (Sandbox Code Playgroud)
它工作正常,但当我从Button Click事件调用该函数时,控制台不会显示.问题是什么?有没有办法在使用WinForms GUI时将powershell控制台置于前面?
以下是示例GUI代码:
function Show-Process($Process, [Switch]$Maximize)
{
  $sig = '
    [DllImport("user32.dll")] public static extern bool ShowWindowAsync(IntPtr hWnd, …Run Code Online (Sandbox Code Playgroud) 
如何强制 Powershell 函数返回数组?
这个简单的函数例如,如果“C:\Newfolder”仅包含 1 个元素,则它不会返回数组。
function Get-AlwaysArray
{
    $returnArray = gci "C:\New folder"
    Write-Output $returnArray
}
(Get-AlwaysArray).Gettype()
Run Code Online (Sandbox Code Playgroud)
已经有一个线程在这里有一个非常好的赞成答案,但不幸的是,没有一个答案有效。
这是我尝试过的:
function Get-AlwaysArray {
    [Array]$returnArray = gci "C:\New folder"
    Write-Output $returnArray   
}
(Get-AlwaysArray).Gettype()
function Get-AlwaysArray {
    $returnArray = @(gci "C:\New folder")
    Write-Output @($returnArray)   
}
(Get-AlwaysArray).Gettype()
function Get-AlwaysArray {
    $returnArray = @(gci "C:\New folder")
    Write-Output @($returnArray | Where-Object {$_})   
}
(Get-AlwaysArray).Gettype()
function Get-AlwaysArray {
    [Object[]]$returnArray = @(gci "C:\New folder")
    Write-Output @($returnArray | Where-Object {$_})   
}
(Get-AlwaysArray).Gettype()
Run Code Online (Sandbox Code Playgroud)
唯一可行的方法是
function Get-AlwaysArray { …Run Code Online (Sandbox Code Playgroud)