将变量值推入新的记事本窗口(不保存文件)

时间:2018-12-18 07:34:00

标签: powershell

假设我有一个分配了值的变量。

我想将此变量的输出定向到新的记事本窗口,但不保存文件。

我认为可以通过“>”轻松完成,但是它将值重定向到新创建的文件(C:\ Windows \ system32 \ notepad)。

enter image description here

1 个答案:

答案 0 :(得分:2)

选项1

使用@Paxz建议的功能

function Out-Notepad {
  param (
    [Parameter(Mandatory=$true, ValueFromPipeline=$true)]
    [String]
    [AllowEmptyString()] 
    $Text
  )
  begin {
    $sb = New-Object System.Text.StringBuilder
  }
  process {
    $null = $sb.AppendLine($Text)
  }
  end {
    $text = $sb.ToString()
    $process = Start-Process notepad -PassThru
    $null = $process.WaitForInputIdle()
    $sig = '
      [DllImport("user32.dll", EntryPoint = "FindWindowEx")]public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
      [DllImport("User32.dll")]public static extern int SendMessage(IntPtr hWnd, int uMsg, int wParam, string lParam);
    '
    $type = Add-Type -MemberDefinition $sig -Name APISendMessage -PassThru
    $hwnd = $process.MainWindowHandle
    [IntPtr]$child = $type::FindWindowEx($hwnd, [IntPtr]::Zero, "Edit", $null)
    $null = $type::SendMessage($child, 0x000C, 0, $text)
  }
}

Source

将其放入您的$profile中。重新启动PowerShell。

那么您可以做:

"Hello World" | Out-Notepad

正如@briantist指出的那样,这有点过头了。

选项2

使用剪贴板:

"Hello World" | Set-Clipboard; Start-Process notepad

然后只需将文本粘贴到打开的窗口中即可。