假设我有一个分配了值的变量。
我想将此变量的输出定向到新的记事本窗口,但不保存文件。
我认为可以通过“>”轻松完成,但是它将值重定向到新创建的文件(C:\ Windows \ system32 \ notepad)。
答案 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
然后只需将文本粘贴到打开的窗口中即可。