トップ回答者
Get-StartApps コマンドの出力をクリップボードで受け取る方法について

質問
-
Get-StartApps コマンドの出力をクリップボードで受け取りたいのですが
起動したままのウィンドウサイズの状態だと長い文字列の場合に末尾が「...」になってしまいます。
PowerShell 上で Get-StartApps | clip を実行すると文字化けを起こします。
コマンドプロンプト上で PowerShell "Get-StartApps" | clip なら文字化けしないのですが
こちらも長い文字列の場合に末尾が「...」になってしまいます。
コマンドプロンプトのウィンドウサイズの横幅を広げて実行して凌いでいます。
文字化けせず、ウィンドウサイズの変更もしないで受け取る方法はありますでしょうか?
回答
-
こんにちは。
ちょっとややこしいのですが、PowerShell内部から外部のプロセス(ここではclip.exe)にパイプする際のエンコーディングは $OutputEncoding で決まり、これがデフォルトASCIIなため文字化けが発生してしまいます。
これを解消するには $OutputEncoding を日本語が表示可能なもの(日本語Windowsなら[System.Text.Encoding]::Default、または [System.Text.Encoding]::GetEncoding(932))に変更する必要があります。
また、PowerShellにおける文字表示は多くの場合コンソール幅によって決まり、コンソール幅を超えると省略文字によって省略されることがあります。
これはOut-Stringコマンドレットを使い文字幅を指定することで回避することが可能です。
これらをまとめて以下の様にすれば期待した動作になるかと思います。$OutputEncoding = [System.Text.Encoding]::Default # または $OutputEncoding = [System.Text.Encoding]::GetEncoding(932) Get-StartApps | Out-String -Width 1024 | clip
- 回答の候補に設定 牟田口大介Moderator 2017年11月21日 4:56
- 回答としてマーク 七辻屋 2017年11月21日 10:25
すべての返信
-
こんにちは。
ちょっとややこしいのですが、PowerShell内部から外部のプロセス(ここではclip.exe)にパイプする際のエンコーディングは $OutputEncoding で決まり、これがデフォルトASCIIなため文字化けが発生してしまいます。
これを解消するには $OutputEncoding を日本語が表示可能なもの(日本語Windowsなら[System.Text.Encoding]::Default、または [System.Text.Encoding]::GetEncoding(932))に変更する必要があります。
また、PowerShellにおける文字表示は多くの場合コンソール幅によって決まり、コンソール幅を超えると省略文字によって省略されることがあります。
これはOut-Stringコマンドレットを使い文字幅を指定することで回避することが可能です。
これらをまとめて以下の様にすれば期待した動作になるかと思います。$OutputEncoding = [System.Text.Encoding]::Default # または $OutputEncoding = [System.Text.Encoding]::GetEncoding(932) Get-StartApps | Out-String -Width 1024 | clip
- 回答の候補に設定 牟田口大介Moderator 2017年11月21日 4:56
- 回答としてマーク 七辻屋 2017年11月21日 10:25
-
素早い返信ありがとうございます。
目的の動作が得られたので、こちらはクローズさせて頂きます。
ここで調べていたら
Windows 10 デスクトップ エディションのスタート画面のレイアウト XML (リファレンス)
https://docs.microsoft.com/ja-jp/windows/configuration/start-layout-xml-desktop
これだけ書かれていて
Get-StartApps
https://technet.microsoft.com/library/dn283402.aspx
他に情報が無くて助かりました。