Допустим, у меня есть переменная с присвоенным значением.
Я хотел бы направить вывод этой переменной в новое окно блокнота, но без сохранения файла.
Я думал, что это можно сделать просто с помощью ">", но он перенаправляет значение во вновь созданный файл (C: \ Windows \ system32 \ notepad).
Блокнот не поддерживает это. Решение, связанное с Paxz, использует для этого неуправляемый код Windows API, что довольно тяжело для этого, но это почти все, что вы можете сделать. Я бы порекомендовал изменить ваши требования.
Если вам нравится делать такие вещи, я бы посмотрел на приложение RPA (Robotic Process Automation), такое как UIPath
Опция 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)
}
}
(Источник)
Поместите его в свой $profile
. Перезапустите PowerShell.
Тогда вы сможете:
"Hello World" | Out-Notepad
Как заметил @briantist, это своего рода излишество.
Вариант 2
Используйте буфер обмена:
"Hello World" | Set-Clipboard; Start-Process notepad
Затем просто вставьте текст в открытое окно.
Взгляните на это: community.idera.com/database-tools/powershell/powertips/b/ti ps /…