我试图将我的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)