X



PowerShell -Part 3

レス数が1000を超えています。これ以上書き込みはできません。
2019/08/12(月) 03:14:57.78ID:k4SaZ4yK
GeTtype()は.NETのオブジェクトのメソッドだからGet-Helpじゃ見れんやろ
Powershellの与り知らんとこだし
2019/08/12(月) 06:13:32.21ID:kdU0FwTT
>>759
そうなんですね。
ありがとうございます。
2019/08/15(木) 08:40:37.86ID:HmFqQFvo
Windows以外でもGUI使えるのか

Out-GridView Returns!
https://devblogs.microsoft.com/powershell/out-gridview-returns/
2019/08/15(木) 19:53:03.53ID:1FEo3MBg
俺の大好きなogv!!
2019/08/17(土) 18:24:44.34ID:2EecLECc
ここの人がPowershell、vbs、C#に精通していると思い質問させていただきます。
C#もまだ覚え中ですが、vbsをC#に移行していました。
最近Powershellを知って、
C#より分かりづらいですが、同じことがC#より短く書けます。
shellで.NETも使えてほぼ何でもできるPowershellに可能性を感じたのですが、
全然盛り上がっていませんw
Powershellをどんどん使っていくか、
C#を覚えていくか、将来性も含めどちらがいいでしょうか?
2019/08/17(土) 18:58:18.44ID:Q0D8gSGr
そんなの状況次第だよ
大雑把に分けるなら
アプリケーションを作りたいならC#
システム管理ツールを作りたいならPowerShell
2019/08/17(土) 19:03:01.90ID:CK+x7f61
用途が違うからC#とは並べるものじゃない
windowsがメインならどっちもできるようになった方がいい
複雑なGUIをPowerShellで頑張って作ってる人見るとごくろうさまですとしか思えんし
PowerShellでさくっと書けるCUIをわざわざVisualStudio入れてC#で書いてビルドしてバイナリ配置して
ソースも別の場所でずっと管理してんの見るとアホだなあと思う
修正の度にソース探してまたビルドしてバイナリ配置して・・・ってなるんだし

あとPowershellのスクリプトの中でC#のコードを書いて使うこともできる
これがまた強力だからどっちも覚えて損はない
(速度はC#が圧倒的に速いから速度的にネックになってる部分だけC#でかくということができる)

将来性についてどっちもMSが力入れてるから気にすることはない
vbsに関して言えば所詮道具だから現状やりたいことができているんならわざわざ移行する必要もない
今んとこMSがWSHを切るって話もないし
766デフォルトの名無しさん
垢版 |
2019/08/17(土) 19:11:51.36ID:Ic+b/2I0
Linux 覚えたほうが良さそうw
2019/08/17(土) 20:01:01.84ID:2EecLECc
>>764-765
ありがとうございます
C#はGUIやDLLなどもできるので覚えていきたいです。
最近知ったPowerShellが何でもGUIもできるし、
短く書けておもしろいのでPowerShellに夢中です。
.NETや.csを読み込んで使えたり、
C#も一緒に覚えていけそうです。
用途で併用していきます。

>>766
Linuxもやってますが、PowerShellも入れられるので、
PowerShellが標準になったらうれしいですw
2019/08/17(土) 20:37:46.41ID:fWrg11mT
役割違うからどっちも必要だと思う
Windows技術者じゃなく.NET技術者を目指して勉強して欲しい
2019/08/18(日) 00:06:00.19ID:26pp6bRY
PowerShell の1つ上は、Ruby。
より複雑な、ファイル操作・CSV・テキスト処理・シェルスクリプトなど

例えば、1-liner で、

Linux では、
ls | ruby -ne 'puts $_.center(20, "-")'

Windows では、
ls -name | ruby -ne 'puts $_.center(20, %Q("-"))'

ただし、Windows では、" をエスケープする必要がある。
"-" の部分を、Ruby の% 記法で囲んで、%Q("-") としたら正常に動いた

%, %Q で、ダブルクォーテーションをエスケープできる。\ と同じ。
\"-\"

まあ、VBScript のスレ主のピッコロ大魔王のように、
PS で、5ch をスクレイピングするような猛者もいるけど、Ruby の方が可読性が高い
2019/08/18(日) 00:15:38.74ID:4oEGaRbg
>>769
お前は出てこなくていい
2019/08/18(日) 08:18:26.56ID:vD0MLvXn
>>769
将来性のないプログラミング言語5選として「Ruby」が挙がり話題に
https://it.srad.jp/story/19/08/09/185229/
2019/08/18(日) 22:05:00.38ID:aNJOLvna
WindowsでRuby使うとかギャグだろ
2019/08/19(月) 23:45:41.47ID:6VXOyYrl
RubyがギャグならPythonは?
2019/08/20(火) 00:23:10.44ID:S2+8M2EA
PythonはAIプログラミングで一躍有名になったね
2019/08/20(火) 08:18:30.85ID:trDWBWGh
>>773
Visual Studio が対応してるし、.NET Framework 上で動く IronPython なんてのがあるくらいだから「アリ」だろうな。
2019/08/20(火) 15:46:07.95ID:OusQ3pFE
Windows版のPythonは結構ちゃんと動くし、Python製のGUIアプリもDropboxとかたまにある
WindowsのRubyは非推奨の流れで、WSL使うか仮想環境のLinux使うか
2019/08/20(火) 21:28:48.24ID:n/ZUSiaV
昔、七行プログラミングってあったけど、
PowerShellなら7行ですごいことできるよね
2019/08/24(土) 01:22:08.40ID:kPbBL5c4
csvファイル内の特定セル?(エクセルでいうところのcells(1,2)みたいな)を変数に格納して、
そのファイルのファイル名にしたいのですが、こういったことはできますか?
779778
垢版 |
2019/08/24(土) 01:39:25.56ID:kPbBL5c4
できました。import-csvから要素の取り出しをするだけでした。
2019/08/26(月) 04:00:34.51ID:yeIOnWDr
パイプラインにオブジェクトが流れるPowerShellライクな新シェル

Nu Shell
https://github.com/nushell/nushell
781デフォルトの名無しさん
垢版 |
2019/08/26(月) 07:51:25.55ID:LOkM9Twk
コマンドプロンプトで、where notepad
と入力すると、メモ帳のパスが、2つ表示されるが、

C:\Windows\System32\notepad.exe
C:\Windows\notepad.exe

PowerShell(PS)で、Get-Command notepad
と入力すると、上の1つだけが表示される。
つまり、PSと、whereコマンドの挙動が異なる!

コマンドプロンプトで、where where と入力すると、
C:\Windows\System32\where.exe

そこで、PSで、where.exe notepad
と入力すると、whereコマンドを呼び出せたので、2つ表示された
2019/08/26(月) 08:31:04.34ID:sAEBXghq
>>781
Get-Command -CommandType Application notepad は試した?
2019/08/26(月) 14:58:24.63ID:R1/Rmq9c
>>781
何を主張したいのかが良く分からんレスだな。
困ってるから何とかしてくれ、とでも言いたいのか?

Get-Command notepad

C:\Windows\System32\notepad.exe
が表示されたは、$env:path で一番最初に見つかったものを表示してるだけだ。
試しに $env:path を変更して、C:\Windows\System32 よりも C:\Windows を先にしてみろ。
$env:path を変更したら、念のため Powershell.exe を開きなおすのを忘れんなよ。

あるいは、notepad.exe が二か所にあることが疑問/不満なのか?歴史的な経緯だ。
実態は c:\Windows\WinSxS\ 以下にあるもので、C:\Windows\System32 と C:\Windows に
あるものはハードリンクだ。
三つとも同じハードリンクなので WinSxS\ 以下のものを特別に「実態」と表現するのは本来正しくないが、
WindowsUpdate の仕組み上、便宜的に「実態」と呼んでも差し支えないだろう。
2019/08/26(月) 15:00:01.45ID:R1/Rmq9c
>>782
Get-Command notepad -all
でも良いんじゃないかな
2019/08/26(月) 15:10:26.74ID:JMmOsJb3
Why are there two copies of Notepad?
https://devblogs.microsoft.com/oldnewthing/20060328-17/?p=31753
2019/08/26(月) 15:27:38.53ID:j8vvMRg5
>>783
独特の文体からして、この板で有名なRuby君かと思われる。話の流れと無関係にRuby推ししてきたり、頓珍漢な知識披露(間違い多数)をしてきたりする奴だから、相手するだけ無駄だよ。
おそらく、ぼくこんなこと気づいたんだよ!って嬉しくて書かずにいられなかっただけだと思う。
2019/08/26(月) 19:23:25.35ID:jPNtTojU
>>786
>話の流れと無関係にRuby推ししてきたり
ステキじゃないですか、この前も C/C++ スレに乱入していましたね、これからも頑張って ruby を喧伝してほしいです!
2019/08/27(火) 01:45:40.61ID:OLaosybt
DOSメインでPSでしかできない部分だけPSにしてるのをやめて、PS一本化を増やそうかと思い立ったが
そういやDOSからキックしないと動かないのであった
というわけでやはりDOSメイン
2019/08/27(火) 01:49:02.45ID:OLaosybt
なんでそんな仕様にしたんだろうね
かといってPS直でやりたいというより、DOSを拡張して欲しかった
2019/08/27(火) 02:31:00.22ID:AUeyxvTx
まだDOSなんて使ってんの
2019/08/27(火) 17:41:47.14ID:DT/yO98c
なんでps1てへんてこな拡張子なの
2019/08/27(火) 18:06:41.10ID:JlFv53u2
どっかのゲーム機みたいにPowerShell 2, PowerShell 3, …って作るんじゃね?w
2019/08/27(火) 21:28:53.53ID:2r3hz+dJ
>>791
PowerShell の ps1 ファイルは 何故 1なのか
https://tech.guitarrapc.com/entry/2013/09/06/220944
2019/08/28(水) 02:40:35.65ID:tqyYzyWN
考え無しに作った結果か・・・
795デフォルトの名無しさん
垢版 |
2019/08/29(木) 03:16:31.66ID:RYMiansx
基本的なことが分かってない気がするのだけど教えてください
get-date, get-childitem, get-location といったコマンドレットの代わりに
get 無しで date, childitem, location と入力しても同じ結果になる
これら get 無しコマンドは get 付きのエイリアスなのか? と最初は思ったのだけど
そんなエイリアスはないと言われる
これらの get 無しコマンド(?) はどういう立ち位置なんでそ?

ちなみに例えば location.bat とかを PATH の通った場所に置いておくと
そっちが実行されるので、これらはサーチパスより優先度が低いようです
2019/08/29(木) 04:05:52.42ID:TR1/uwdi
>>795
基本的なことはここにまとまってる
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_command_precedence?view=powershell-6#qualified-names

1. Alias
2. Function
3. Cmdlet
4. Native Windows commands

の順に探す
ただこの文書にはGetを省略した場合について書いてない
以下のコマンドを実行すればだいたいわかる

Trace-Command CommandDiscovery { date } -PSHost

すると上記の1〜4の順に探してもコマンドが見つからなかった場合、以下のようなデバッグ出力が見つかる

>The command [date] was not found, trying again with get-prepended

つまり1〜4でコマンドが見つからなかった場合は、頭にGetを付加してもう一回1〜4を探すよってこと
2019/08/29(木) 04:22:51.28ID:RYMiansx
>>796
明快な回答ありがとうございます

> Trace-Command CommandDiscovery { date } -PSHost

これ勉強になりました
2019/08/29(木) 19:25:49.72ID:+UUfxV7s
初心者で右も左もわからない状況で申し訳無いのですが、
明示的に設定してる共有ディレクトリとアクセス権を一括で出力ってできたりするんですかね?

Get-wmiobject -class win32_share
だとアクセス権までは出力されなかったんで...

詳しい方教えて頂きたいです。
799デフォルトの名無しさん
垢版 |
2019/08/30(金) 00:19:55.56ID:kVpvpBih
「powershell アクセス権限 確認」で検索!

こんな感じ?

ls | Get-ACL
2019/08/30(金) 10:55:43.01ID:uzgqDeg8
>>799
ありがとうございます。
検索してみます。

PowerShellはほんとに難しいです...
2019/09/06(金) 17:24:06.26ID:LE0BBPZ5
ふぁあああ・・・・
解決してよかったよぉお
ハロー優しい世界、だねええええ^^
2019/09/07(土) 01:23:05.71ID:SOW3zbb3
Set-ACLは使うな
2019/09/07(土) 06:28:56.33ID:jlJXcZnh
>>802
替わりに何を使ったら良いですか?
2019/09/07(土) 06:44:55.31ID:jb/JoUUS
>>802
why?
2019/09/07(土) 10:39:33.44ID:sSufJvsQ
>>804
俺は >>802 ではないが、Set-Acl は使いづらい。
そもそもの理由は Windows の ACL (ACE) が複雑だからなのだが、対象にセットする ACL オブジェクトを作るのが分かりづらい。

例:All Users のスタートメニューのアクセス権を変更し、一般ユーザにも書き換えられるようにする場合(既存の権限に追加)
https://pastebin.com/R3JBWF2h

他のフォルダなどから ACL オブジェクトをコピーし、それをそのままターゲットに適用するだけなら簡単なのだけど。

>>803
「何が何でもすべて PS でやる!」 というポリシーでないのなら、cscls.exe、icacls.exe のほうがお手軽。
2019/09/07(土) 10:48:02.60ID:jlJXcZnh
>>802に答えて欲しいな
2019/09/07(土) 11:08:11.46ID:sSufJvsQ
>>806
ごめんね
2019/09/07(土) 15:10:43.76ID:SOW3zbb3
>>802だけどSet-ACLは所有権絡みで問題抱えてる
下サイトで説明されてる
https://qiita.com/carbonss/items/cc6d33fe6645a86171ad
2019/09/07(土) 15:12:47.14ID:SOW3zbb3
あ、>>803への答えはicaclsコマンド使えね
powershellは変な仕様あるから割と警戒した方がいい
2019/09/08(日) 20:21:13.64ID:d6DJW1MN
F:/ に SDカードがマウントされているのを
アンマウントするコマンドは何ですか?
2019/09/08(日) 21:55:23.61ID:D+CIKcq7
>>810
(New-Object -comObject Shell.Application).Namespace(17).ParseName('F:').Verbs()|?{$_.Name -match '取り出し'}|%{$_.Doit()}
2019/09/09(月) 16:38:34.04ID:8EKyQA8Q
>>811
thanks
2019/09/10(火) 21:38:04.40ID:Eo4YqZPr
■C:\hoge.txtの内容

aaa
bbb
bbb
bbb
ccc
ccc
ccc
ccc
ccc

↑のようなテキストファイルがある場合に、↓の結果(タブ区切り)を得るにはどうすれば良いのでしょうか?

aaa 1
bbb 3
ccc 5
2019/09/10(火) 22:19:37.38ID:L5QX1JAH
>>813
Group-Object
2019/09/10(火) 22:36:34.85ID:hrOpSOVs
頼むから順不同なのかそうじゃないのか
書いてから質問してくれ
2019/09/10(火) 23:28:19.24ID:Eo4YqZPr
>>814
gc C:\hoge.txt | Group-Object
などとやってみたのですがうまく動かず…

>>815
ソート済みです><
2019/09/10(火) 23:30:43.39ID:L5QX1JAH
>>816
上手く動かずじゃよくわからんからどういう出力なのか書いて
エラーになるの?
2019/09/11(水) 00:05:23.05ID:TMos3buL
あータブ区切りの文字列にしたいんか
gc hoge.txt | group | foreach { $_.name,$_.count -join "`t" }
819816
垢版 |
2019/09/12(木) 00:24:07.29ID:W/V8jwbc
>>818
★★★★★
ありがとうございます!
実はまだ試せてないのですが、期待を込めて★5つです!(^_^)
2019/09/12(木) 10:44:16.82ID:W/V8jwbc
>>805
icaclsってps1ファイル内でも普通に呼出せるのね
ps1→bat→icaclsみたいに呼出さなきゃならないのかと思った
コマンドというより単なるexeってことか
2019/09/12(木) 13:07:06.37ID:9SxJRVV0
これからは>>819みたいに★で評価しよう
★☆☆☆☆ クソレス
★★★★★ 問題解消
2019/09/12(木) 14:46:18.96ID:pQlsfVOK
ふーむ、アホがアホに同調するアホな好例だな、アホすぎてオレにはよく分らんのだが、アホだということは分かる

アホA「ありがとうございます! まだ試していないけど! ★5つです!(^_^)」
アホB「・・これは良い! これからは★で評価しよう!」
ボク「・・いやいや、まだ試してもいないのだから評価もくそもねーだろ、★2〜3の定義もねーし、こいつらアホの極みだな」
2019/09/12(木) 14:53:12.75ID:j3ZoG8EK
>>822
2019/09/12(木) 17:51:47.62ID:TUHPbFV0
>>822
これが噂のヤラセレビューってやつか?
2019/09/12(木) 18:29:54.11ID:5CMOpd/7
>>822
2019/09/12(木) 19:50:41.33ID:igJ/H+nC
icaclsとか括弧を多用するコマンドはエスケープうざいですね
ヒアドキュメントみたいな感じでスマートに書けませんか
2019/09/13(金) 20:13:01.19ID:Vx47yrR/
PowerShellで非同期処理って酷く書きづらいと思ってるんだが、こんなもんなんか?
変数を渡すのにめっちゃ苦労したんだが…
2019/09/13(金) 21:35:11.86ID:3ZdspPUD
具体的にはどんなコードを書いたの?
2019/09/13(金) 21:49:24.82ID:Vx47yrR/
あまりにもニッチな製品の負荷テスト用スクリプトだから具体的には言えないが、平たく言えば自作関数とWin標準コマンドを引数変えながら並列投入するだけ
bashと比べちゃ駄目なんだろうが、スクリプト書いててキレそうになったのは久しぶりだわ
830デフォルトの名無しさん
垢版 |
2019/09/13(金) 23:05:20.75ID:ha69B7nJ
runspaceでやってるのかjobでやってるのか
2019/09/14(土) 01:25:26.61ID:XbAlqDVd
そんな苦労するもんだっけか
832デフォルトの名無しさん
垢版 |
2019/09/14(土) 01:53:38.89ID:ogAZWftq
runspaceの中で親スコープで宣言した関数を(特に書き換えずに)呼ぼうとするとややこしい
ちょっとggって出てくる方法だと面倒
https://devblogs.microsoft.com/scripting/powertip-add-custom-function-to-runspace-pool/


解決策:まとめて文字列にして渡す

# runspaceで実行したいスクリプトブロック
$cmd = {
param($func_parent)
$func_current = Get-ChildItem function: | %{$_.ScriptBlock.Ast.ToString()} # カレント(子)スコープの関数リスト
compare-object $func_current $func_parent | % inputobject | Invoke-Expression # 親スコープで宣言した関数のみを定義する

<# 実行したい処理 #>

}

$func = Get-ChildItem function: | %{$_.ScriptBlock.Ast.ToString()} # カレント(親)スコープの関数リスト

$ps = [PowerShell]::Create()
$ps.AddScript($cmd).AddArgument($func) | Out-Null

$result = $ps.BeginInvoke()
$ps.EndInvoke()
$ps.Dispose()
}
2019/09/14(土) 01:55:28.35ID:ogAZWftq
$ps.EndInvoke($result)
だわ
2019/09/14(土) 20:16:09.07ID:atxyCPua
変数じゃねーじゃねーか!
835デフォルトの名無しさん
垢版 |
2019/09/14(土) 20:31:39.96ID:jbpc8Cnk
連想配列にして渡そうぜ
https://devblogs.microsoft.com/scripting/beginning-use-of-powershell-runspaces-part-2/
2019/09/14(土) 20:49:09.80ID:atxyCPua
渡したかったのは関数だって言ってんじゃねーか!
2019/09/14(土) 21:11:58.91ID:ogAZWftq
>>836
>>832のスクリプトブロック内のInvoke-Expressionをした時点で渡した関数(というか親スコープの関数全部)使える
特定の関数にしたかったら$function:関数名.Ast.ToString()で必要分を配列に突っ込んで渡してiexするだけや
2019/09/14(土) 22:03:58.44ID:atxyCPua
psm1にまとめて読み込んだほうが楽そう…
2019/09/14(土) 22:24:21.00ID:Tzf8a7mL
うむ
840デフォルトの名無しさん
垢版 |
2019/09/15(日) 15:45:03.86ID:4TgO8+RX
>>813-819
大文字小文字が区別されないから、-CaseSensitive オプションも付けた方がよい

"Aa", "b", "aa" | group-object -noelement | where {$_.Count -gt 1}

出力
2 Aa

"A", "a" | group-object -noelement -CaseSensitive

出力
1 A
1 a
841デフォルトの名無しさん
垢版 |
2019/09/15(日) 17:42:03.16ID:tc+PQ4bB
5.1から4.0に戻さないと日本語でいろいろ書いてくれないからわからないんです…
どうやって戻したらいいんでしょうか…(´・ω・`)
2019/09/15(日) 18:02:21.21ID:LMFjfaUx
どういうこと(´・ω・`)
843デフォルトの名無しさん
垢版 |
2019/09/15(日) 19:37:50.46ID:tc+PQ4bB
(´・ω・`)すみません自己解決しました 更新プログラムの一部を削除したら望む結果が得られました お騒がせしました
2019/09/15(日) 20:17:50.41ID:aATf+6N9
WMF 5 に上げるとUIの表示が英語になるやつかねたぶん
2019/09/15(日) 20:48:36.32ID:ORV+CvDJ
win7pcのPSを5.1にした時に日本語化探したけどわかんなかったから詳しく書いてほしかった感
846デフォルトの名無しさん
垢版 |
2019/09/15(日) 22:28:51.53ID:tc+PQ4bB
>>844
たぶんそれですお騒がせしました
これから精進していきます
847デフォルトの名無しさん
垢版 |
2019/09/15(日) 22:30:29.90ID:tc+PQ4bB
>>845
ざっくり言うと
コントロールパネルからプログラムと機能に行って
インストールされた更新プログラムの項目を開いて
WMF5をアンインストールしたという流れです
2019/09/18(水) 09:25:06.97ID:jcGpm5QT
v6.1.6
https://github.com/PowerShell/PowerShell/releases/tag/v6.1.6
v6.2.3
https://github.com/PowerShell/PowerShell/releases/tag/v6.2.3
2019/09/18(水) 12:47:39.59ID:iUGh13ZQ
バッチファイルでいう、
echo %errorlevel%
はパワーシェルではどうやればいいんでしょうか?
2019/09/18(水) 14:54:54.64ID:nNyCwAkD
echo $LASTEXITCODE
2019/09/23(月) 16:12:06.99ID:yWN8gkqC
[2018.11.27] 納品書A社
[2018.11.29] 納品書B社
[181129] 納品書C社

このようなフォルダ構造になっている状態で、
このフォルダ階層だけ
3行目の"[YYMMDD] 〜〜"のような書式にフォルダ名を変更したいと思っています。
" 納品書A社"などはそのままで
元の日付も保持します

正規表現では"([2][0][1][0-9])\.([01][0-9])\.([0-3][0-9])"
に反応するものだけで出来ればと思います
どのように書けばよいのでしょうか?
2019/09/23(月) 18:10:16.40ID:mK3aarjp
>>851
Get-ChildItem -Directory |
Where-Object Name -match "^\[20(1[0-9])\.([01][0-9])\.([0-3][0-9])\](.*)" |
Rename-Item -NewName { "[{0}{1}{2}]{3}" -f $Matches[1..4] } -PassThru

これ日付の妥当性チェックはガバいけどそれは別にいいんでしょ
-match演算子を使ったらその結果は変数$Matchesに入ってることを覚えておくといい
2019/09/23(月) 22:41:23.65ID:CUAPT5Qo
NewNameにスクリプトブロック渡せるんだ
%{〜}の中で整形して渡す発想しかなかった
2019/09/23(月) 22:54:01.34ID:GUxJcSSn
DIRとって一つずつ条件に合致するオブジェジェクトをパイプ渡しするだけだよ
2019/09/23(月) 23:39:14.69ID:mK3aarjp
>>853
Delay Bindingっていって以下の条件を満たすパラメータにスクリプトブロックを渡すと
パイプラインから値が入ってくる度にパラメータの値を評価してくれる

・ ByValue, ByPropertyName属性が付加されてること
・ 型が明示的に指定されてること(ただし[scriptblock]または[object]以外)
2019/09/24(火) 10:08:27.83ID:hYZHYmb1
>>852
横だけど、すごく参考になった。ありがとう。
857851
垢版 |
2019/09/24(火) 15:33:38.23ID:SPmBMSDI
>>852
やりたいことが出来ました。ありがとう!
2019/09/25(水) 10:57:26.88ID:E/zWVp/e
PowerShell って、「Shell」と一括にされてるんだっけ?

The Top Programming Languages 2019
https://spectrum.ieee.org/static/interactive-the-top-programming-languages-2019
2019/09/25(水) 20:24:06.99ID:idiO5sU0
素のCが3位とかだから老害向けランキングでしょ
2019/10/14(月) 15:09:43.96ID:WeKpLulI
LL言語入門で有名なM.Hiroiさんは
なんでpowershellにかたくなに手を出さんのかと思ってたけど
bashとかシェルスクリプト方面は全く手を付けてないので納得

今はまさかのtcltkのページを更新中というマイペースぶり
2019/10/22(火) 22:39:49.38ID:xAr/pqiO
3位PowerShellってマジかよ

ガチ調査版::2019年プログラミング言語 求人人気ランキング
https://qiita.com/bitai/items/c8941da683ebedd135fd
2019/10/23(水) 07:15:39.57ID:4jedgKvl
>>861
決め方テキトーだからあてにならんよ
2019/10/23(水) 08:54:10.32ID:1cyp8e5C
>>861
開発案件ではなく Windows のインフラ運用系案件の求人数が及ぼした結果だと思う。
求人の要件には「必須スキル」と「スキルが有るなら尚可」とあるけど、PowerShell のスキルは
後者じゃないかと推測。

Windows 系以外でも最近は管理用のスクリプティング環境として PowerShell の採用例が
いくつかあるから、そういう案件もカウントされてるかもしれない。
自分がガッツリ使ってるところだと vSphere かな。これのスクリプティング環境 (PowerCLI) は非常に整備されてて、とても便利。
864デフォルトの名無しさん
垢版 |
2019/10/27(日) 10:53:22.24ID:NsKzBf3L
詳しい方、教えて下さい!

シェバン記法でバッチファイル化して実行したいのですが、自スクリプトパスを取得する方法がわかりません。
誰か教えて下さい。
2019/10/27(日) 10:58:27.15ID:Lik42TLZ
PowerShell、起動が遅いのがなー
なんとかならんかなー
2019/10/27(日) 11:38:43.07ID:7LOf++Wk
シェバン記法てなぁに?
2019/10/27(日) 11:42:15.29ID:NsKzBf3L
>>866
以下を頭につけて拡張子を.batにするとダブルクリック実行できるようになるという記法のことです。

@powershell -NoProfile -ExecutionPolicy Unrestricted "$s=[scriptblock]::create((gc \"%~f0\"|?{$_.readcount -gt 1})-join\"`n\");&$s" %*&goto:eof
2019/10/27(日) 11:47:16.24ID:7LOf++Wk
ありがと
2019/10/27(日) 11:48:06.40ID:hJUpCTqv
Ruby では、__FILE__ が現在評価中のスクリプトファイル名

シェバンは、Linux では、
#!/usr/bin/ruby

Windows に、シェバンってあるの?

.bat に、ruby .\script.rb
と書いて、ダブルクリックで起動したりする事はあるけど

.vbs でも、起動ファイルを作れる
870869
垢版 |
2019/10/27(日) 11:52:51.51ID:hJUpCTqv
.bat に、powershell .\script.ps1
と書けば、ダブルクリックで起動できないか?

または、.vbs に、
CreateObject("WScript.Shell").Run "powershell .\script.ps1", 0
2019/10/27(日) 12:06:15.48ID:NsKzBf3L
>>869
その方法だとファイルが2つになってしまうでしょう?
一つが良いんです。
872869
垢版 |
2019/10/27(日) 12:21:42.69ID:hJUpCTqv
よく知らないけど、powershell は、ダブルクリックで起動するような、

危険なことは出来ないのじゃないか?
2019/10/27(日) 12:38:31.80ID:pI9qWgY0
>>872
バッチやvbsならダブルクリックも安全だとおっしゃるのでしょうか?
874869
垢版 |
2019/10/27(日) 12:54:36.77ID:hJUpCTqv
ダブルクリックで起動するのは、危険!
あくまで、個人用途

仕事ではやらない方が良い。
危険すぎる
2019/10/27(日) 12:57:45.64ID:gYi3Gz62
スクリプトのパスなら$MyInvocation.MyCommand.Path
2019/10/27(日) 13:07:05.42ID:hKAQ6fM+
>>873
そのとおり
2019/10/27(日) 13:40:21.93ID:Lik42TLZ
>>874
ダブルクリックで起動するのは危険だから
コマンドラインから起動してください。
危険なコードでもコマンドラインから起動すれば、安全です。

こうですか?
2019/10/27(日) 13:50:19.81ID:NsKzBf3L
>>874
どう危険なのですか?顧客提供して不特定多数が使うわけでもないのに何が危険なのですか?

>>875
シェバンした場合、それだと動作しません。

>>876
なぜ?
879869
垢版 |
2019/10/27(日) 14:01:18.04ID:hJUpCTqv
ダブルクリックで起動するのは、危険!

ファイルをちょっと触っただけでも、
ダブルクリックになって起動起動されてしまうから、Microsoft も禁止してる!

Linux のシェバンでも、
ファイル名だけじゃ起動できないようにしてるだろ

./ファイル名
みたいに、パス付きじゃないと起動しないようにしてる

これも、ファイル名だけでリターンキーを触ってしまうと、起動されてしまって危険だから!

ダブルクリック起動では、多くの被害者が出てる
2019/10/27(日) 14:05:08.75ID:v/8cx3Zl
vbsはファイルを全部パースしようとするからシェバン記法は使えないな
2019/10/27(日) 14:05:49.29ID:Lik42TLZ
ダブルクリックは危険!
ファイルをクリックしただけで起動しちゃう!
エクスプローラーからファイルをクリックできない
全部開いちゃう!

こうですか?
2019/10/27(日) 14:06:46.38ID:v/8cx3Zl
危険はexeでもバッチでも同じだろうに
powershellスクリプトだけを危険とする理由はない
2019/10/27(日) 14:13:43.83ID:Lik42TLZ
バッチファイルは危険じゃない!
APIが使えない。PowerShellスクリプトは何でもできる!
バッチファイルは他のスクリプトを呼び出すぐらいしかできない!

こうなるんですかね?
2019/10/27(日) 14:22:52.49ID:4/fJTv/Q
>>878
引数の名前を指定して%~dpnx0を渡せばいいのでは

# D:\a.bat
@powershell -NoProfile -ExecutionPolicy Unrestricted "$s=[scriptblock]::create((gc \"%~f0\"|?{$_.readcount -gt 1})-join\"`n\"); & $s" -hoge %~dpnx0 %* & goto:eof

Param(
[string]$hoge
)
Write-Host $hoge
Write-Host $args[0]
Write-Host $args[1]
Write-Host $args[2]
pause
# D:\a.bat eof


D:\>a 0 1 2
D:\a.bat
0
1
2
続行するには、Enter キーを押してください...:
2019/10/27(日) 14:26:31.81ID:vcUKQgsd
>>865
PC買いかえろよ…
2019/10/27(日) 14:31:11.79ID:vcUKQgsd
>>878
> シェバンした場合、それだと動作しません。
そりゃスクリプトを動的に作ってるんだからスクリプトファイルなんてないからね
バッチファイルのパスを知りたいならバッチから引数で渡せばいいだけ
2019/10/27(日) 14:32:02.36ID:v/8cx3Zl
マシン替えても相対的に速くなるだけで起動が遅いのは変わらないよ
2019/10/27(日) 14:57:41.64ID:vcUKQgsd
>>887
何を言ってるんだ?w
2019/10/27(日) 15:18:23.27ID:FsLuN3Ol
前から気になってたんだがダブルクリックでps1が起動できない設計にどれだけのセキュリティの効能があるんだろな
batの中にPSスクリプトを埋め込んで実行ポリシーも上書きできるなら実質batのセキュリティレベルまで落ちる
batをメールに添付すると自動でフィルタリングされるけどps1なら安全だからフィルタされず拡張子を書き換える手間が省ける、というレベルの価値なのかな
2019/10/27(日) 15:40:44.98ID:Lik42TLZ
>>885
WSLから実行

$ time cmd.exe /c echo ok
ok

real 0m0.051s
user 0m0.000s
sys 0m0.016s

$ time powershell.exe -Command echo ok
ok

real 0m0.355s
user 0m0.000s
sys 0m0.016s


これは遅すぎる。
2019/10/27(日) 15:41:31.49ID:Lik42TLZ
>>885
お前はどれくらいの時間で実行できる?
やってみてよ
2019/10/27(日) 15:46:43.24ID:Lik42TLZ
ちなみに-NoProfileをつけても大差ない
-NoProfileが無いから当然だが
2019/10/27(日) 15:47:02.36ID:Lik42TLZ
× -NoProfileが無いから当然だが
○ Profileが無いから当然だが
2019/10/27(日) 15:50:55.08ID:ho9vIROt
>>890
> これは遅すぎる。
ならPC買い換えろって言われてるだろ、馬鹿なの?
2019/10/27(日) 16:00:15.75ID:Lik42TLZ
>>894
だからどれくらいのスペックを買えば良いのか
お前のスペックとお前の実行時間を教えてくれと言ってるんだよ
CPUを強化すれば速くなるのか?SSDを速くすれば良いのか?
2019/10/27(日) 16:37:26.26ID:rrcAfXPk
>>895
遅いと思う感覚が人によって違うから他人に聞いてもしょうがないだろ
そんなこともわからんのか?
2019/10/27(日) 16:42:00.99ID:ElQsR2/N
>>896
だからどれくらい時間がかかるか聞いてるんだがw
お前にとって遅いかどうかなんて聞いてねーよ
2019/10/27(日) 17:18:28.01ID:cWrRHY0n
ColorTool を使わずに同等のことって出来ませんかね。客先のマシンなので入れられないんです。
powershell.exe から ssh で Linux につないでるんだけど、青と黒の色が似通ってて、すごく見づらいのをなんとかしたいです。
2019/10/27(日) 17:20:23.02ID:ElQsR2/N
プロパティから画面の色を変えるだけやろ?しらんけど
900898
垢版 |
2019/10/27(日) 18:07:06.31ID:cWrRHY0n
解決したので自己レス。
とりあえず、これでだいぶマシになりました
https://superuser.com/questions/1114549
2019/10/27(日) 19:03:23.84ID:vcUKQgsd
>>897
日本語理解できないのか?
お前がどんだけ時間が掛かっちゃ遅いと思うかなんてわからんし、その時間をなぜ俺が検証してやらんといかんのだよ
無能が甘えんなよw
2019/10/27(日) 19:07:32.81ID:f+MCPxtM
Write-Hostは日本語環境だと遅いよ
2019/10/27(日) 21:04:44.37ID:jAqyy8Vt
>>889
batファイルも外部からDLしたデータなら実行前に確認画面出るでしょ
もちろん悪意のある内部犯なら無意味だけど
2019/10/28(月) 00:41:43.54ID:T67vLNbE
>>903
出るでしょ、と言われてもそれ俺の疑問とズレてると思うんだが…
その理屈だと、ネットワークから入手したときに警告が出るからbatもそれなりに安全
ps1も同じように警告が出るなら同じように安全
だったらダブルクリックで実行できない仕様にしたことにはあまり意味がなかった、という結論だと受け取って良い?
2019/10/28(月) 00:48:33.12ID:ML+fUsJB
ダブルクリック実行が危険ってのは、オペレーション次第で意図しないタイミングで実行されるからだろ
別に実行されても問題ないタイプのものならいいけど
ファイル削除系とか実行されたら何らかの情報が変化しちゃう系だと困るってことだよ
あと、ダウンロードでフラグが立つのはNTFSに落とした場合のみでFATなら警告なしだよ
2019/10/28(月) 02:25:37.55ID:bqlyCkZ6
読み込むアセンブリを減らしたりして0.1秒減らした。
これでコマンド実行時間が0.45秒ぐらいになった。
でもPowerShellの起動時間0.3秒がやはり大きい
ネイティブexeにすりゃいいんだろうけど、そうすると気軽じゃなくなるからな
VBScriptでAPIが使えるならそっちのほうが速くなりそうだけど
907デフォルトの名無しさん
垢版 |
2019/10/28(月) 06:35:24.37ID:kjzN6NI8
>>890
漏れは、パソコン工房のノートPC、CPU-i3, メモリ8GB, SSD-128GB で、
WSL, Ubuntu 16.04 で、2秒ぐらいw

~$ time powershell.exe -Command echo ok
ok

real 0m1.944s
user 0m0.000s
sys 0m0.031s
908907
垢版 |
2019/10/28(月) 06:41:24.18ID:kjzN6NI8
ただし、漏れはいつも、ノートPC を、
CPUを1つだけ使う、省エネモードにして使っている

それで、コンパイルが遅いのかも?
2019/10/28(月) 08:13:17.35ID:SMRk50Ri
>>904
ダブルクリックだけでは実行できなくなってるからいいんじゃない?
さすがにFATは知らんけど
2019/10/28(月) 11:15:58.10ID:tEsfLTI+
>>907
うわっ、マジか。そりゃきついな
タイプして2秒はありえない。

VBScriptでの実装も考えてみたが難しいし
こりゃもうCででも作るかな?
でもCOM触るの面倒なんだよな。
911デフォルトの名無しさん
垢版 |
2019/10/28(月) 12:44:27.32ID:tEsfLTI+
Windows Updateしたら大幅に下がったwww
今裏でなにかビルドしてるんかな? ngenとか?

$ time powershell.exe -Command echo ok
ok

real 0m1.390s
user 0m0.000s
sys 0m0.016s
2019/10/28(月) 13:01:44.65ID:tEsfLTI+
これやったけど速くならない(´・ω・`)
https://stofublog.wordpress.com/2014/01/01/powershell%E8%B5%B7%E5%8B%95%E9%AB%98%E9%80%9F%E5%8C%96%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/

アップデート前まで速かったのに・・・
2019/10/28(月) 13:15:03.68ID:tEsfLTI+
なにかやったような記憶をたどり、

https://superuser.com/questions/1212442/powershell-slow-starting-on-windows-10

. (Join-Path ([Runtime.InteropServices.RuntimeEnvironment]::GetRuntimeDirectory()) ngen.exe) update

↑これをPowerShell(管理者)で実行したら速くなった。(もとに戻った)
でも、一部指定されたファイルが見つかりません。とかエラーがでる。

よくわからんけど、このコマンドを実行してるだけ?
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe update
2019/10/28(月) 13:24:18.55ID:tEsfLTI+
ここに情報があった。
https://blogs.msdn.microsoft.com/jpvsblog/2018/05/07/ngen/

v4.0.30319 というバージョンはいつ変わるんだろう?
2019/10/28(月) 13:28:19.78ID:tEsfLTI+
Windows Updateしたせいかとも思ったけど、Visual Studio入れたからかもしれんな
ともかく、ngen updateしたらもとに戻った。
しばらく放置してても治るんだろうけど
2019/10/28(月) 21:32:05.62ID:WDVIXPLl
強力そうなので始めてみたんだけど、たかが文字コード変換がなんで
さらっとできないんだろう…
2019/10/28(月) 22:42:59.54ID:8eaZgTeu
C#もどうせ遅いんだろ?と思ってやってみたら単純なHello Worldだと0.1秒程度だった
PowerShellよりマシなのか。読み込むアセンブリで変わってくるとは思うけど
C++だと0.05秒。圧倒的だが情報が少なすぎる。
2019/10/28(月) 22:43:45.66ID:i5LGlrvW
PowerShellがあれば、文字コード変換も簡単です。
http://scripting.cocolog-nifty.com/blog/2010/01/powershell-6147.html
919デフォルトの名無しさん
垢版 |
2019/10/29(火) 02:18:49.94ID:vBIRwBaE
echoが遅いことが判明

$ time powershell.exe -Command echo 1
1

real 0m0.378s
user 0m0.000s
sys 0m0.000s

$ time powershell.exe -Command 1
1

real 0m0.264s
user 0m0.000s
sys 0m0.000s

$ time powershell.exe -Command "[Console]::WriteLine(1)"
1

real 0m0.243s
user 0m0.000s
sys 0m0.000s
2019/10/29(火) 03:21:02.42ID:rBco2ITF
echoというよりコマンドレットの呼び出しにコストがかかるんだよ
Write-Outputの使用はあらゆる場面で完全に無意味で無駄だから使わない方がいい

それについてブログ書いてる人もいた
https://get-powershellblog.blogspot.com/2017/06/lets-kill-write-output.html
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秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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