PowerShell -Part 3

レス数が1000を超えています。これ以上書き込みはできません。
2018/10/09(火) 17:46:48.32ID:G4IJkzod
前スレ
【最強CUI】PowerShell -Part 2
http://mevius.5ch.net/test/read.cgi/tech/1480109402/
921デフォルトの名無しさん
垢版 |
2019/10/29(火) 03:55:39.34ID:vBIRwBaE
>>920
そうなんだろうなって気はしてた。
まだどれがコマンドレットかそうでないかよくわかってないレベルだけどw

間にハイフンで区切られてて、呼び出しにカッコがいらないのはコマンドレットだよな?
Where-Objectとかもなくせば速くなるんだろうか?

ようやくC++で実装できそうな情報が溜まってきた。
Unicodeとか訳わかんねぇ。情報がバラバラで多すぎてわからん。
たったこれだけ、たったこれだけなのに!


C++で実装したら0.1秒。だけどバイナリのビルドが必要
PowerShellだと0.45秒。
CLIコマンドとしてサクッと実行したときの体感速度が違いすぎる。
2019/10/29(火) 04:14:17.53ID:rBco2ITF
>>921
Where-Objectはめちゃくちゃ遅くて遅いコマンドレットの代表みたいな奴だから俺はスクリプトでは一切使わない
同様にForEach-Objectも遅い

何作ってるのか知らんけどC++はスレ違いだからあとはC++のスレでやった方がいい
powershell自体の起動も含めてC++で作ったバイナリより遅いとかいう情報は当然すぎるから要らない
2019/10/29(火) 05:02:05.41ID:CowX2GWO
Ruby が良い。
Rubyから、クリップボード・powershell も使える。
CP932・UTF-8 の変換もできる

C++ は、コンパイル済みだろ。
コンパイル自体に時間が掛かるのは、Rubyも同じ

# クリップボード内の複数行文字列の、各行の先頭・末尾から、
# 連続する空白類を除去して、クリップボードに入れる

str = `powershell Get-Clipboard`
str.encode! Encoding::UTF_8, Encoding::CP932 # UTF_8 へ変換

ary = str.each_line.map( &:strip ) # 連続する空白類を除去する

IO.popen( 'clip', 'w:cp932' ) do | clip | # CP932 へ戻す
clip.print( ary.join "\n" )
end
2019/10/29(火) 08:28:11.85ID:+8XugnXa
速いに越したことはないけど、PowerShel は速さを追求するもんじゃないだろうに。

>>923
お前は今すぐ呼吸するのをやめろ。お前に吸わせる酸素がもったいない。
925デフォルトの名無しさん
垢版 |
2019/10/29(火) 20:44:54.51ID:ltL5L5Cn
こっちのスレにも書いておくわ
Windows 10 1903、PowerShell 5.1.18362.145
コマンドプロンプトを起動して

C:\Users\user> powershell.exe -Command [Console]::OutputEncoding
BodyName : iso-2022-jp
EncodingName : 日本語 (シフト JIS)
HeaderName : iso-2022-jp
WebName : shift_jis
WindowsCodePage : 932
IsSingleByte : False
EncoderFallback : System.Text.InternalEncoderBestFitFallback
DecoderFallback : System.Text.InternalDecoderBestFitFallback
IsReadOnly : True
CodePage : 932

C:\Users\user> powershell.exe -Command [Console]::OutputEncoding = [Text.Encoding]::UTF8
UTF8に変更する。

C:\Users\user>powershell.exe -Command [Console]::OutputEncoding
BodyName : utf-8
EncodingName : Unicode (UTF-8)
HeaderName : utf-8
WebName : utf-8
WindowsCodePage : 1200
IsSingleByte : False
EncoderFallback : System.Text.EncoderReplacementFallback
DecoderFallback : System.Text.DecoderReplacementFallback
IsReadOnly : True
CodePage : 65001

それぞれ、別々のコマンドとして実行してるのに、状態が変わるのはなんで?
926デフォルトの名無しさん
垢版 |
2019/10/29(火) 20:47:41.08ID:ltL5L5Cn
しかも powershell.exe だけに影響する話じゃなくて、

UTF8で書いたファイルを、コマンドプロンプト起動直後、
シフトJISモードのときにtypeしたら文字化けし、

UTF8に変更してからtypeしたら文字化けしない
明らかにコマンドプロンプトの状態が変わってる。

だけどchcpの値は932のままかわらない
ただ、PowerShellを使ってUTF8モードに切り替えると、
chcpすると「Active code page: 932」と英語で表示される。
2019/10/29(火) 23:40:36.07ID:JjalWxmz
>>878の問題は>>884で解決したのか?
2019/11/02(土) 12:30:04.56ID:1PdjBp7d
この場合は True が返るんだけど(当然)、
Test-Path ${home}\ntuser.dat

こうした場合は False になる。
$a = [xml]('<?xml version="1.0"?><File>${home}\ntuser.dat</File>')
Test-Path $a.File

XML の値は、
"${home}\ntuser.dat" こうじゃなくて
'${home}\ntuser.dat' というふうに格納されてるようなんだけど、変数を展開するにはどうすればいいだろう?
2019/11/02(土) 12:34:23.96ID:dF2n6ehk
invoke expression
2019/11/02(土) 13:07:31.37ID:esIitHWU
>>928
そりゃ ' ' で囲ってりゃ展開しないだろ…
$a = [xml]"<?xml version=""1.0""?><File>${home}\ntuser.dat</File>"
931928
垢版 |
2019/11/02(土) 13:33:24.00ID:1PdjBp7d
>>929
できた、ありがとう。

>>930
>>928 のサンプルの提示の仕方が悪かったが、実際には XML ファイルを読み込んでるので >>928 の形になります。
2019/11/02(土) 18:11:26.52ID:71SUtLbe
Powershellの演算子の優先順位が判るサイトが見当たらないんですがどっかにないですかね
演算子をカテゴリ毎に紹介してるサイトは多く見かけるんですが
2019/11/02(土) 20:16:26.21ID:0WeT0cpY
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_operator_precedence?view=powershell-5.1
2019/11/03(日) 02:57:41.69ID:hkCRv+PE
>>933
ありがとうございます!助かりました!
2019/11/03(日) 03:32:58.98ID:Y1hBQ+8z
どういたしまして!
936デフォルトの名無しさん
垢版 |
2019/11/05(火) 23:35:55.67ID:ocMK86pm
m(_ _)m誰か教えて下さい。

フォーム上にコンボボックスを大量配置したいのですが、一つずつ以下みたいに書くと大変です。
これを関数化する方法を教えて下さい。

$Combo = New-Object System.Windows.Forms.Combobox
$Combo.Location = New-Object System.Drawing.Point(10,10)
$Combo.size = New-Object System.Drawing.Size(150,30)
2019/11/06(水) 02:58:52.99ID:+N82MWJ/
>>936
普通に$comboを返す関数を作ればいい
winforms書く時は使えるバージョンならusing namespaceを使った方がすっきりする
個人的にNew-Objectは遅いだけなのでなるべく使わない
暗黙の型変換を積極的に使うとすっきりする

using namespace System.Windows.Forms
Add-Type -AssemblyName System.Windows.Forms

function Create-ComboBox($Left, $Top, $Width, $Height) {
  $combo = [ComboBox]::new()
  $combo.Location = "$Left, $Top"
  $combo.size = "$Width, $Height"
  $combo
}

$form = [Form]::new()
$form.Size = "200,200"

$combo1 = Create-ComboBox -Left 10 -Top 50 -Width 160 -Height 30
$form.Controls.Add($combo1)

$form.ShowDialog()
2019/11/06(水) 05:18:39.91ID:+Isovp9U
x.Size="1,2"
こういう書き方できるの知らんかった
939936
垢版 |
2019/11/06(水) 11:38:21.31ID:viRYf3W9
>>937
大変ありがとうございました。助かりました。

なおWin7環境なのでusing...はカットして使ってます。
2019/11/06(水) 19:25:34.62ID:du9DeY6n
>>939
5.0以上にアップグレードすればWin7でも使えるんじゃないの?インストール不可なだめだけど
941936
垢版 |
2019/11/08(金) 09:54:16.57ID:RMGDBEVY
緊急でお願いします。マルチバイト文字のパディングのやり方を教えて下さい。サンプルコードがあると嬉しいです。
2019/11/08(金) 10:20:36.03ID:weGpRZzk
入力と出力のサンプル位出したら
2019/11/08(金) 10:20:37.27ID:bpFYbH+Z
うっかり bash と間違えて ctrl+R と打ってしまったんだけど、PowerShel でも同じように機能したんだな。
軽く感動したわ。
2019/11/08(金) 10:41:43.51ID:wfK2aVsO
ctrl + Alt + shift + /
でショートカット一覧が出るからざっと見ておくといいよ
945デフォルトの名無しさん
垢版 |
2019/11/08(金) 11:47:48.53ID:bt2cbsd4
PowerShellにディレクトリ、ファイル名以外の
補完機能ってあるの?
2019/11/08(金) 12:27:29.71ID:CJ6EXBGx
>>945
オプションとかオプションの値が選択肢ならそれも補完する
ユーザーが作ったコマンドでも補完できるから地味に便利
2019/11/08(金) 14:17:43.58ID:bpFYbH+Z
>>944
なんと、超便利!
ありがとう!
2019/11/08(金) 14:41:45.11ID:wfK2aVsO
ついでに以下のコマンドで画面だしとけばチートシートになるよ

Get-PSReadLineKeyHandler | ogv
2019/11/08(金) 17:13:11.44ID:bpFYbH+Z
>>948
「俺専用PowerShellアンチョコ.txt」に記録した。重ね重ねありがとう。
950デフォルトの名無しさん
垢版 |
2019/11/09(土) 17:39:02.10ID:LvjWth2U
powershellで海外にアクセスできないように設定できますか?
2019/11/09(土) 17:42:01.74ID:FbsqDOHf
海外とは
2019/11/10(日) 05:11:31.78ID:47iDVxCF
そういやweb鯖のサンプルがあったな
ピロキシぐらい作れるよな
2019/11/10(日) 16:21:24.11ID:LxY6Tlm9
海外鯖を経由しない通信にしたい。
それか海外からの通信をファイアウォールで
全部ブロックしたい。
って考えたらhostsしかないかな?
めんどくさいな。
2019/11/10(日) 16:35:30.22ID:z3CQn4/q
自分ですべての経路把握する必要あるし無理じゃね?
2019/11/10(日) 17:15:59.31ID:iyIsn8nz
>>953
曖昧すぎてアドバイスのしようがないな
2019/11/10(日) 17:17:57.36ID:uhrgfz89
hostsに一体いくつ「海外」とやらのホストを指定するのやら
OS側でやるのが適当なのかそれ
業務用なのか個人用なのかもわからん
2019/11/10(日) 17:54:04.00ID:otD8Z0ZU
windows updateも海外なのか?
2019/11/10(日) 20:34:29.07ID:LxY6Tlm9
すみませんでした。そうなるとなんかややこしくなりそうなのでやめます。
ブラウザの拡張でやりますわ。
ありがとうございました。
2019/11/11(月) 08:27:46.29ID://Nnw6zP
Windows PowerShell を使用した高度なセキュリティ管理を使用する windows Defender ファイアウォール
https://docs.microsoft.com/ja-jp/windows/security/threat-protection/windows-firewall/windows-firewall-with-advanced-security-administration-with-windows-powershell
960デフォルトの名無しさん
垢版 |
2019/11/11(月) 17:18:43.20ID:WYwNeQAp
ありがとうございました。
2019/11/18(月) 08:47:59.75ID:604fXs7f
タブストップ中コンボボックスの文字の背景色を青ではなく薄水色にしたいのですが、やり方がわかりません。ご存知の方、よろしくお願い申し上げます。
962自己レス
垢版 |
2019/11/18(月) 12:09:14.04ID:604fXs7f
>>961
https://stackoverflow.com/questions/38981877/listbox-alternating-shading-powershell
2019/11/18(月) 15:09:03.25ID:Crm1ovkb
test 452452424524524
2019/11/18(月) 15:10:33.45ID:Crm1ovkb
Windows 10 に標準搭載された OpenSSH と PowerShell の機能だけを使用して、公開鍵をサーバにアップロードしたいと考えています。
(ssh-copy-id は shell スクリプトなので Windows 版の OpenSSH には含まれていない)
2019/11/18(月) 15:11:33.77ID:Crm1ovkb
調べた結果、まず以下のコマンドが cmd.exe 上では完璧に動作することを確認しました。
※元のコードを貼ると 403 Forbidden となるので Pastebin を使ってます
https://pastebin.com/kCqKQm9T

これを以下の通り PowerShel に置き換えました。
https://pastebin.com/CSE9sCnB

一応、公開鍵のアップロードまでは出来たんですけど、ssh.exe のプロセスが終了しません。
(wait = $true にした場合はプロンプトが返ってこない)
何が悪いんでしょうね。
2019/11/18(月) 15:15:42.87ID:Crm1ovkb
追伸:CloudFlare で 403 Forbidden になってたのはレスに cmd.exe という文字列が含まれいたのが原因のようです。コードは関係なかったっぽい。
2019/11/18(月) 15:35:44.61ID:Crm1ovkb
どうやら、ssh.exe に対して公開鍵の文字列をパイプで渡した場合は正常終了するのですが、標準入力で渡した場合はプロセスが残ることが分かりました。
cmd.exe 上でも、標準入力で渡した場合はプロセスが残ります。
Start-Process は「You cannot pipe input to this cmdlet.」とのことでパイプからの入力を受け付けないんですけど、なにか良い手はないですかね?
2019/11/18(月) 16:07:26.07ID:Crm1ovkb
何度もすみません、自己レス。

パイプならよかろう、ということで以下の3パターンで試したところ、ssh.exe は正しく終了するようになったのですが、authorized_keys には CL+LF が追加されてしまいました。
$PubKey = Get-Content "${home}\.ssh\id_rsa.pub"
Write-Output $PubKey -NoEnumerate | ssh root@${DST} "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys"
Out-String -InputObject $PubKey | ssh root@${DST} "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys"
type "${home}\.ssh\id_rsa.pub" | ssh root@${DST} "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys"

最終的に、これで妥協しました。ダサい。もっとスマートな書き方はないものだろうか。
https://pastebin.com/KpKkuGcQ
2019/11/18(月) 16:13:01.04ID:Crm1ovkb
ごめんなさい、標準入力では ssh.exe が終了しない原因が分かりました。
sshkeygen で生成された id_rsa.pub は、行末で改行していないためでした。
エディタで開いて改行させたところ、
https://pastebin.com/CSE9sCnB
これでも動作しました。

お騒がせしました。
2019/11/19(火) 00:02:22.77ID:rlpD1oBO
参考になった ありがとう
2019/11/20(水) 13:28:40.93ID:aW1lygKI
どういたしまして
2019/11/24(日) 16:11:02.22ID:UhvIpOa2
Get-ChildItemで困っている事があります。
解決方法を知っている方がいましたら教えてください。

*.txt *.bin
などの拡張子を持つファイルを一括して集める場合
$result = Get-ChildItem *.txt,*.bin
とすれば集まりますが
hoge,hage.txt
というファイル名に、 ',' が含まれているファイル名があると、 *.txt,*.bin のようなセパレーターとして認識してしまい
ワイルドカードにヒットするbase nameが hoge までになってしまい$resultに値が入ってきません。
','などのセパレーターを含むファイル名を Get-ChildItem でワイルドカード指定するにはどうすればよいでしょうか?
2019/11/24(日) 16:29:56.73ID:E4b/CXSq
>>972
何をしたいのかいまいちよくわからんがとりあえず
Get-ChildItem 'hoge,hage.*', '*.txt'
とかでいいんじゃね?
2019/11/24(日) 20:06:33.13ID:JDFz9pDe
うちはGet-ChildItem *.txt,*.binで引っかかるけど
dir *.txt,*.bin | ?{ $_.Name -like "h*"}でフィルタして確認してみれば?
975デフォルトの名無しさん
垢版 |
2019/11/28(木) 17:33:57.96ID:G1SJ/xZS
スクリプトで
VPNセッションを張って、opensshでLinuxサーバーにログインしたいんですが、クレデンシャル情報ってどう引き渡せば良いですか?
2019/11/28(木) 17:35:59.16ID:KHBZf3ql
どこのクレデンシャル情報を、どこに渡すんです?
977デフォルトの名無しさん
垢版 |
2019/11/28(木) 17:40:45.55ID:G1SJ/xZS
>>976
ssh、vpnのコマンドにです
2019/11/28(木) 17:41:50.79ID:KHBZf3ql
そのクレデンシャル情報には何が書かれてるんです?
2019/11/28(木) 17:42:46.64ID:KHBZf3ql
ssh、vpnにクレデンシャル情報を渡すとどうなるんです?
どうなるように設定したんですか?
980デフォルトの名無しさん
垢版 |
2019/11/28(木) 18:10:58.12ID:G1SJ/xZS
すいません。
ここで聞いたのが間違いでした。
Linuxサーバーにログインしたいと書いてあるのにどうしたいと言われても困りますので。
では。
2019/11/28(木) 18:17:16.35ID:KHBZf3ql
だからログインできるようにLinuxサーバーに設定したんですか?
2019/11/28(木) 19:03:26.14ID:o2XGBpkX
VPN関係あるの?
ssh -i 秘密キーファイル ユーザー名
という外部コマンドの呼び出し方を聞いてるの?
2019/12/18(水) 06:19:20.47ID:DPpTEq4j
ちょっと気づいたのでメモ

ハッシュテーブルからいろいろな型にキャストするのがわりといろんな場面で使える
例えば>>936は次のように書ける

using namespace System.Windows.Forms
Add-Type -AssemblyName System.Windows.Forms

$form = [Form]@{ Size = "200,200" }
$combo = [ComboBox]@{ Location = "10,50"; Size = "160,30" }
$form.Controls.Add($combo)

$form.ShowDialog()


もし"200,200"ってのが気持ち悪いならさらに

$form = [Form]@{ Size = @{ Width = 200; Height = 200 } }

としてもいい
2019/12/18(水) 06:21:03.31ID:DPpTEq4j
すまん>>936じゃなくて>>937だったわ
2019/12/18(水) 23:38:33.69ID:kDyrT7eN
キャストでオブジェクト生成か
理屈は判るけどキモイな
2019/12/19(木) 21:20:43.94ID:A7bzsjq6
C#のオブジェクト初期化子みたいなものだと思えばいいかも
987デフォルトの名無しさん
垢版 |
2019/12/31(火) 07:16:04.44ID:xfr0s5Fj
怒らないで教えて欲しいんだが

WSLでよくね?
2019/12/31(火) 07:38:32.37ID:Ttaqvt+E
いや誰もPowerShellを万能の利器とは考えてない
適材適所
2019/12/31(火) 09:49:11.63ID:ZmMnRfLg
>>987
それに答えるためには、お前が何をしたいのかを聞く必要がある
2019/12/31(火) 09:53:59.69ID:vL9iUG+A
WSL使うなら最初からLinuxをインストールして使えばいい
2019/12/31(火) 21:14:44.78ID:wxhVB0za
WSLていうかUNIXシェルでいいなら、なんでLinuxユーザーがわざわざPowerShellを使ってると思うの?

https://msit.powerbi.com/view?r=eyJrIjoiYTYyN2U3ODgtMjBlMi00MGM1LWI0ZjctMmQ3MzE2ZDNkMzIyIiwidCI6IjcyZjk4OGJmLTg2ZjEtNDFhZi05MWFiLTJkN2NkMDExZGI0NyIsImMiOjV9&;pageName=ReportSection5
2019/12/31(火) 21:26:22.98ID:4NGA+Zr1
>>991
知らない教えて
2019/12/31(火) 21:58:25.71ID:ajjU1twk
事情があって嫌々ながらLinux使わざるをえないWindowsユーザーがPowershell採用してる
2019/12/31(火) 22:01:43.89ID:FiZAbpfr
PowerShellのほうが強力だしな
2020/01/01(水) 08:33:54.15ID:KGLKi7tz
そろそろ Ruby ガイジが出てくる頃かな?
2020/01/01(水) 13:06:34.59ID:voSHdO49
rubyくんが出るのは、スクリプトを作れるような質問が出たときだろ
2020/01/01(水) 15:19:12.54ID:IT8L/q0G
2020/01/01(水) 15:19:29.24ID:IT8L/q0G
2020/01/01(水) 15:19:45.39ID:IT8L/q0G
2020/01/01(水) 15:20:34.34ID:IT8L/q0G
  ∧,,,∧ 
 (  ・∀・) 1000ならジュースでも飲むか
  (    ) 
  し─J 
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 448日 21時間 33分 46秒
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況