1 名前:デフォルトの名無しさん mailto:sage [2020/01/01(水) 16:08:31.66 ID:4oQ1Kxot.net] 前スレ PowerShell -Part 3 https://mevius.5ch.net/test/read.cgi/tech/1539074808/ 次スレは>>980 が立ててね!!
2 名前:デフォルトの名無しさん mailto:sage [2020/01/01(水) 18:34:35.19 ID:dhZuPVlL.net] すみません教えてください。テキストファイル内の当日の日付を検索したいんですが patternに変数を使うにはどうすればいいんでしょうか?↓だと検索がヒットしません $today = Get-Date -Format "yyyyMMdd" Select-String -path c:\a.txt -pattern $today
3 名前:デフォルトの名無しさん [2020/01/01(水) 20:08:13.94 ID:kGjhqYZD.net] 怒らないで教えて欲しいんだが WSLでよくね?
4 名前:デフォルトの名無しさん mailto:sage [2020/01/01(水) 20:34:33.16 ID:o3B0+Nz9.net] >>2 まずは Select-String -path c:\a.txt -pattern '20200101' で試したら?
5 名前:デフォルトの名無しさん mailto:sage [2020/01/01(水) 20:48:49.03 ID:MALUlSLD.net] $today に適当な文字列を代入して、sls しても出来る! 一応、パス区切りが\ の場合は、クォートした方が間違いない たぶん、そのファイルが存在しないか、エラーが起きているのかも。 それか、文字コードが異なるとか? $today = "file" echo $today Select-String -path c:\Users\Owner\Documents\a.txt -pattern $today Select-String -path "C:/Users/Owner/Documents/a.txt" -pattern $today 漏れは、UTF-8 を、WSL で、grep してる
6 名前:2 mailto:sage [2020/01/01(水) 21:05:16.52 ID:dhZuPVlL.net] ごめんなさい。凄い勘違いをしてた・・・。 今日は1月2日だと思い込んでて、テキストファイル内には20200102という文字列しかなくて Get-Dateで今日の日付で検索してもヒットしない訳だ・・・。 Select-String -patternには変数が問題なく使えることが確認できました。お騒がせして申し訳ない
7 名前:デフォルトの名無しさん mailto:sage [2020/01/01(水) 21:45:29.95 ID:qtzGmu9D.net] >>3 怒らないで教えて欲しいんだが PowerShellでよくね?
8 名前:デフォルトの名無しさん mailto:sage [2020/01/01(水) 23:40:11.34 ID:MALUlSLD.net] WSL なら、これでフォルダ内のすべてのファイルから検索できる。 grep -i '文字列' ./* Windows 側のフォルダに、alias も貼っているから、カレントフォルダの移動も簡単 shopt -s expand_aliases alias windoc='cd /mnt/c/Users/Owner/Documents'
9 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 00:33:51.58 ID:Qw2T8cPg.net] コーディングとは直接関係ないのですが、 WMF をわざわざインストールせず、WindowsUpdate のみ適用し続けた Windows7 の場合、 Windows PowerShell のバージョンって 2.0 のままでしょうか? 試せる環境が手元に無くて…。ググっても分かりませんでした。 よろしくお願いします。
10 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 05:37:52.46 ID:rdmxrK4p.net] 【 Select-String 】コマンドレット――ファイルからテキスト(文字列)を検索する https://www.atmarkit.co.jp/ait/articles/1607/06/news028.html grepコマンドとPowerShellのsls (Select-String)の比較 https://tech.sanwasystem.com/entry/2016/07/05/185717
11 名前:デフォルトの名無しさん [2020/01/02(木) 09:32:26.45 ID:m85p0XAo.net] >>5 >>8 やっぱりbashの方が優秀なんだな、、 Powershellてアホやろ
12 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 11:13:06.84 ID:qQsPuinH.net] >>11 >>6
13 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 14:16:49.21 ID:jegIeSSN.net] >>11 あほ
14 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 14:34:14.71 ID:osenxolW.net] つまりbashを使ってるとあほになる やっぱりPowerShellの方が優秀なんだな、、
15 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 14:58:28.80 ID:80VOHiHM.net] poewrshellはcmd内蔵にはあったバイナリのコピーが簡単にできなかったり色々半端だよね
16 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 16:08:26.45 ID:7QP/YGP+.net] >>15 poewrshellはそうだろね
17 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 16:49:39.53 ID:Yqaismel.net] >>15 Copy-Itemじゃ駄目なの?
18 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 17:02:09.06 ID:SnzEOw/h.net] Copy-Itemがrobocopyレベルに作り込まれていたらcmdに置き換わっていただろうね 革新性面白さに主眼が置かれて運用をきっちりこなす為の地味な部分は蔑ろにされた
19 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 17:04:14.31 ID:SnzEOw/h.net] ×cmdに置き換わっていた ○cmdを置き換えていた
20 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 17:05:15.20 ID:7QP/YGP+.net] >>18 具体的には?
21 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 17:37:05.84 ID:PYyaD2Jg.net] PSでrobocopy使えば良いじゃん これで置換出来るね
22 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 18:19:47.57 ID:d4KLeRXS.net] 魚を下ろすなら出刃包丁、鉛筆を削るならカッターナイフ。一つだけに限定する必要はない。 スクリプティング環境も同じ。WSL でも PowerShell でも、適材適所で選べばいいだけだろ。 俺の場合は WSL ではなく Cygwin と PowerShel を併用してるけど。
23 名前:デフォルトの名無しさん [2020/01/02(木) 18:26:02.49 ID:diWefbzT.net] >>22 パワー汁
24 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 19:34:13.71 ID:LqVuN/CI.net] >>18 robocopyレベルの機能が欲しいなら欲しい機能をPowerShellで実装すればいいだけだろ 出来合いのものが欲しい人が見るスレじゃないよ?
25 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 21:14:01.25 ID:RdZD9Uhx.net] >>18 https://www.powershellgallery.com/packages/PowerShell.PowerLibrary.RoboCopyExtension/ https://www.powershellgallery.com/packages/RobocopyPS/ https://www.powershellgallery.com/packages/xRobocopy/ 好きなのを使えや
26 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 21:32:35.62 ID:ShHqIFTQ.net] 漏れは、スクリプトを下のように、Ruby で書く powershell は、そのスクリプト内で、コマンドを呼び出す程度にしか使わない。 長いコードでは圧倒的に、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
27 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 21:59:33.06 ID:SnzEOw/h.net] >>24 >>25 こういう暇人達のオモチャだから置き換わらないんだよ
28 名前:デフォルトの名無しさん mailto:sage [2020/01/02(木) 23:12:10.06 ID:Luby4/oL.net] >>26 あっ、Rubyはいいです(^^ゞ もう終わった言語なんで PythonかJavaScriptでお願いします
29 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 08:42:58.49 ID:Tlg/GH8q.net] >>27 お前の理屈だとPerlのCPANやPythonのPyPIも「暇人達のオモチャ」だなww
30 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 09:33:21.20 ID:3Uhjf7eS.net] PowershellはWPFと同様に こんなことできちゃう俺ってすごい? って承認要求を満たす為のツール
31 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 10:07:45.44 ID:fRk42gOq.net] こんな低い程度で承認欲求満たせるなんて さぞかし安っぽく薄っぺらな人生を歩んで来たんだろうね 君のような知恵遅れクンが羨ましい限りだよ
32 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 13:07:55.88 ID:3Uhjf7eS.net] >>31 涙ふけよw
33 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 14:14:41.25 ID:wJkHBgCK.net] >>18 >Copy-Itemがrobocopyレベルに作り込まれていたらcmdに置き換わっていただろうね 見当違いだよ あんたがrobocopy相当でないことに不満を持っているのは分かったが、世の中が同じ不満を持っていると勝手に決めつけてもしょうがない 自己と他者の境界を混同する癖があると生き辛さの原因になるぞ Powershellもcmdもシェルなんだから、どっちからでもrobocopyを呼べばいい 変な固執がなければそれで解決 そもそもPowershellが完璧に作り込まれていたとしてもcmdは置き換わってない 長年のデファクトスタンダードとして居座ったシェルスクリプトを書き直す人はほとんどいないし、そこで覚えた知識を必要に迫られてもいないのにアップデートする人もいない Powershellへの移行は強制されない限り極めて緩慢にしか進まないんだ
34 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 14:18:05.13 ID:E2rkGUYG.net] >>30 いや普通にぱぱっと学んで普通に道具として使うだろ どんだけ頭わるいのかコンプレックス丸出し
35 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 14:34:10.57 ID:/oC1Ys4Z.net] PowerShell使いよりUNIXシェル使いのほうが凄い 同じコマンドなのに仕様が全然違うのを我慢できるんだぜww
36 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 14:51:58.50 ID:E2rkGUYG.net] ごめんな シェルを使うのに凄いとか凄くないとかちょっと俺には理解できない チンパンジーが箸を使うとすごいとかそういうレベルの話なのかな
37 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 18:53:03.63 ID:IPdxVfSe.net] >>33 そもそもcmd(MS-dos)もPowerShellも今日日いらんがな WSL入れとけって
38 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 21:26:42.13 ID:LoHkYQxe.net] WSLは手間が掛かりすぎてNG ・「入れとけ」というが、ユーザー毎にいちいち手動で入れさせる手間が掛かる。しかも厄介なストア配布形態 ・一番使いたいはずのログインスクリプト等に使えない 全く話にならない
39 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 22:06:06.23 ID:ZgWtqjsT.net] 過去の遺産があるならWSLでもいいけど、どちらでも使えて新規で組むならPowerShellだな
40 名前:デフォルトの名無しさん mailto:sage [2020/01/04(土) 01:33:39.67 ID:r5thPytl.net] >>35 UNIXって瀕死だろ
41 名前:デフォルトの名無しさん [2020/01/04(土) 02:12:51.07 ID:aSKFbY9r.net] >>40 bashかパワーシェル(爆笑)で比較しませんか、ドザさんwww
42 名前:デフォルトの名無しさん mailto:sage [2020/01/04(土) 02:52:56.44 ID:eFXyJY/2.net] 今日日こんなのでマウント取ろうとする化石がいるとは もう令和だぞおっさん
43 名前:デフォルトの名無しさん mailto:sage [2020/01/04(土) 08:03:14.83 ID:T5YxFwCT.net] えっ、この幼稚さはガキなんじゃねーの?おっさんだとしたらヤバいな
44 名前:デフォルトの名無しさん mailto:sage [2020/01/04(土) 09:02:43.07 ID:H9Ya7buR.net] 今時のガキでbash推しとかありえへんやろw
45 名前:デフォルトの名無しさん [2020/01/04(土) 10:38:35.92 ID:uBZCVRc/.net] >>44 あなたノンプログラマの人?w
46 名前:デフォルトの名無しさん mailto:sage [2020/01/04(土) 11:23:41.53 ID:LH34clIM.net] 何を言ってるんだろう、この人
47 名前:デフォルトの名無しさん mailto:sage [2020/01/04(土) 14:44:48.90 ID:fYLLjFYo.net] 前提条件(要件)の提示もなく優劣を論じちゃうのって、典型的な「自称パワーユーザ」だな
48 名前:デフォルトの名無しさん mailto:sage [2020/01/04(土) 14:50:50.91 ID:6l4U8fFo.net] bashの初見殺しっぷりがハンパない件 https://qiita.com/kugyu10/items/5c852e5c1b0f8c98da01
49 名前:デフォルトの名無しさん mailto:sage [2020/01/04(土) 15:49:43.41 ID:RXEH0V5g.net] >>48 おバカ自慢は要りません
50 名前:デフォルトの名無しさん mailto:sage [2020/01/04(土) 21:04:10.88 ID:4JCx1BTQ.net] いろいろな *[!c]sh 実装のキライなところ https://fumiyas.github.io/2016/12/25/dislike.sh-advent-calendar.html まだBashで消耗してるの? https://www.slideshare.net/SanosukeKato/bash-83053839
51 名前:デフォルトの名無しさん mailto:sage [2020/01/05(日) 08:09:38.59 ID:+ZtpY4Sw.net] >>50 おバカ自慢要らない
52 名前:デフォルトの名無しさん mailto:sage [2020/01/05(日) 08:35:56.46 ID:8wcedpaS.net] その「おバカ」とやらに使ってもらおうって気がないから いつまでたってもLinuxデスクトップは普及しないんだよ
53 名前:デフォルトの名無しさん mailto:sage [2020/01/05(日) 09:21:09.84 ID:+ZtpY4Sw.net] Linuxデスクトップ「おバカには使ってほしくありません」
54 名前:デフォルトの名無しさん mailto:sage [2020/01/05(日) 14:43:55.52 ID:ZEXd5sZ7.net] それはシェアをあきらめるって事だと分かってて言うならそれでもいいんだけどね
55 名前:デフォルトの名無しさん mailto:sage [2020/01/05(日) 18:40:06.22 ID:B53H42aR.net] スレチ続けてんじゃねえぞ、糞ども
56 名前:デフォルトの名無しさん mailto:sage [2020/01/06(月) 21:20:05.02 ID:ID1ddVMh.net] >>48 存分に威張って良いほどの馬鹿
57 名前:デフォルトの名無しさん mailto:sage [2020/01/06(月) 21:40:32.90 ID:ID1ddVMh.net] >>50 > いろいろな *[!c]sh 実装のキライなところ UNIX系シェルは古くからあるから色々意見があっていいけど、嫌いなとこ言うだけってのは馬鹿。 > まだBashで消耗してるの? 読んだけど2年前のスライド&スライド発表者が馬鹿過ぎる。 現在のTwitterアカウントを見たけど「進歩がない…」の一言。 makeのアルゴリズムを紹介するよ!的なことやってて…大丈夫かこいつ…いやはやく(周りが)何とかしないと駄目だろ…。 ていうか >>48 の記事の筆者か…。 生きてて楽しいのかこいつ…。
58 名前:デフォルトの名無しさん mailto:sage [2020/01/07(火) 08:15:41.91 ID:5fudPZU/.net] >>57 > 読んだけど2年前のスライド&スライド発表者が馬鹿過ぎる。 > 現在のTwitterアカウントを見たけど「進歩がない…」の一言。 スレチな話題を延々と繰り返すバカよりは256倍マシだと思うよ
59 名前:デフォルトの名無しさん mailto:sage [2020/01/07(火) 08:38:58.32 ID:Ks+JfxYO.net] >>57 > 嫌いなとこ言うだけってのは馬鹿 > 生きてて楽しいのかこいつ… ここでPowerShell叩きだけやってるやつそのものじゃん
60 名前:デフォルトの名無しさん [2020/01/10(金) 01:58:55.42 ID:orNiqaoM.net] ところでWSLを入れて Windows10の制御はどういう風にやるんだろ?
61 名前:デフォルトの名無しさん [2020/01/10(金) 02:00:24.71 ID:orNiqaoM.net] そもそもUNIXからの流れって スクリプトがないと何もできなかった というだけだよね。
62 名前:デフォルトの名無しさん mailto:sage [2020/01/10(金) 09:21:51.82 ID:cqQYZnld.net] dosはスクリプトなしで運用できたん?
63 名前:デフォルトの名無しさん mailto:sage [2020/01/10(金) 12:28:21.35 ID:vcBIqSBB.net] >>62 たいして設定項目ないからcomfig.sysとかを直接編集してただろ ちなみに同時期のunixも似たようなもんだった スクリプトで設定するようになったのはだいぶ後だったように思う
64 名前:デフォルトの名無しさん mailto:sage [2020/01/10(金) 14:42:27.33 ID:IxDycp4w.net] >>63 > だいぶ後だったように思う 80年代からマイコンを使ってた世代からすれば、確かに「だいぶ後」ですねw
65 名前:デフォルトの名無しさん mailto:sage [2020/01/10(金) 18:17:26.14 ID:PkgwRlbI.net] Windows10, WSL, Ubuntu(Linux)側から、 Wondows側のC ドライブへのアクセスは、 /mnt/c/Users/ユーザー名/Documents/〜 漏れは、いつも、WSL側から、Windows側をgrep してる。 なぜなら、Windowsでは、CP932 と、BOM 無しUTF-8 を区別できないから BOMが付いていれば区別できるけど、 普通、ウェブ系開発ではバグるので、BOMを付けない
66 名前:デフォルトの名無しさん mailto:sage [2020/01/10(金) 18:58:35.89 ID:gMOJaPF1.net] >>65 死ねクズ
67 名前:デフォルトの名無しさん [2020/01/12(日) 03:08:17.75 ID:gh55rPFY.net] Lnuxユーザは大変やね Winodowsユーザは、そんな面倒なことはしないわな それなりのツールつかうから
68 名前:デフォルトの名無しさん [2020/01/12(日) 03:10:21.78 ID:gh55rPFY.net] 要はLinuxなどの場合は、近頃はいいだろうが そういうことのためのツールが用意されていないんで スクリプトに頼るしかなかったということなんだろうな
69 名前:デフォルトの名無しさん mailto:sage [2020/01/12(日) 04:03:14.54 ID:Wu3j+6b0.net] ?
70 名前:デフォルトの名無しさん [2020/01/12(日) 04:22:58 ID:Uj5X0q1W.net] 設定ファイルがスクリプトということに何も疑問を持たなかったんだろかと思うことはある。
71 名前:デフォルトの名無しさん mailto:sage [2020/01/12(日) 05:11:45 ID:Hfpc94Xd.net] 知らんがな linux板でやれよ Linux mao.5ch.net/linux/
72 名前:デフォルトの名無しさん [2020/01/12(日) 09:20:24.49 ID:Uj5X0q1W.net] Linux板は荒らししかいないし、末期のウェブ板やPHP板みたいになってる。 まともな住人はここに移住してきても良いよね? ウェブ板やPHP板も移住してるんだし。
73 名前:デフォルトの名無しさん [2020/01/12(日) 09:21:14.45 ID:Uj5X0q1W.net] Linux板は志賀何とかさんのことを語る板になってしまった。
74 名前:デフォルトの名無しさん mailto:sage [2020/01/12(日) 10:59:33.84 ID:FbSdnFnB.net] まさかとは思うがツールというのはGUIのことだろうか PowerShellスレでCUIよりもGUIが無条件に優れているという話をしているのだろうか スレチを自己正当化する理由が、然るべきスレが機能不全を起こしてるから行きたくないと? しつこいスレチがここに機能不全を招くとは思わないのだろうか 前スレに続いての「WSLでよくね」なんて明らかに反応を楽しむ愉快犯なのに、まんまとLinuxのほうが残念だもん!って いいかげん落ち着いてくれよ
75 名前:デフォルトの名無しさん mailto:sage [2020/01/12(日) 18:25:07.68 ID:6gxIPrAU.net] >>72 お前はスレタイを100回読み直せ
76 名前:デフォルトの名無しさん [2020/01/12(日) 19:02:16.18 ID:Uj5X0q1W.net] bash最高って書いてあるけど。
77 名前:デフォルトの名無しさん [2020/01/12(日) 21:27:38.66 ID:gh55rPFY.net] >>74 >まさかとは思うがツールというのはGUIのことだろうか なわけないよ。 要は今は良くなってきているが シェル言語なないと処理できないようなのがUnix系の世界 だったということ ほかにろくなものないから
78 名前:デフォルトの名無しさん [2020/01/12(日) 22:41:27.46 ID:gh55rPFY.net] ま、そりゃいいか。 PowerShellを語る板だから ごめん。 PowerShellの話に戻します。
79 名前:デフォルトの名無しさん mailto:sage [2020/01/13(月) 13:13:43.40 ID:GhUCXbF0.net] 意味不明。結局、CUIでない、GUIでもない"ツール"とはいったい何だったのか
80 名前:デフォルトの名無しさん mailto:sage [2020/01/16(木) 08:46:49.48 ID:wD5IBL5x.net] テキストユーザインタフェース https://ja.wikipedia.org/wiki/%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%83%A6%E3%83%BC%E3%82%B6%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9
81 名前:デフォルトの名無しさん [2020/01/28(火) 00:59:10 ID:b7mfcqCA.net] 刻々と変化する変数をフォームに表示させたいんだけど 当然この例だと実行した時点での変数しか表示されません。 フォームのラベルの変数を動的に表示し続ける方法を教えてください(この例だと時計のように動かしたい) $time = Get-Date Add-Type -AssemblyName System.Windows.Forms $form = New-Object System.Windows.Forms.Form $label = New-Object System.Windows.Forms.Label $label.Text = $time $form.Controls.Add($label) $form.ShowDialog()
82 名前:デフォルトの名無しさん mailto:sage [2020/01/28(火) 02:09:43 ID:Vj4Y99PX.net] タイマーイベントとかあるじゃろ C#タイマーあたりでぐぐれ
83 名前:デフォルトの名無しさん mailto:sage [2020/01/28(火) 05:27:11.17 ID:gua2EZr0.net] 正確な時間じゃなくても良いなら、Ruby なら、sleep で簡単にできる。 ただし、OS がバッファリングしてると、最後にまとめて出力されてしまう! STDOUT.sync = true # バッファリングしない 3.times do puts Time.now sleep 3 end
84 名前:デフォルトの名無しさん mailto:sage [2020/01/28(火) 08:59:06 ID:CfcUNbbY.net] フォーム要素はどこに行った
85 名前:デフォルトの名無しさん mailto:sage [2020/01/28(火) 19:45:19 ID:xyAuIeAM.net] >>81 別スレッドで非同期にフォームを起動すればいい using namespace System.Windows.Forms using assembly System.Windows.Forms $label = [Label]@{ Dock = "Fill"; Font = "Meiryo,20" } $form = [Form]@{ Size = "350,100" } $form.Controls.Add($label) $runspace = [RunspaceFactory]::CreateRunspace() $runspace.Open() $pipeline = $runspace.CreatePipeline() $pipeline.Commands.AddScript({ param ($form) $form.ShowDialog() }) $pipeline.Commands[0].Parameters.Add("form", $form) $pipeline.InvokeAsync() foreach ($p in 1..10) { if ($Runspace.RunspaceAvailability -ne "Busy") { break } $time = [datetime]::Now $label.Text = $time sleep 1 } if ($Runspace.RunspaceAvailability -eq "Busy") { $form.Close() } $runspace.Dispose()
86 名前:デフォルトの名無しさん mailto:sage [2020/01/30(木) 19:49:29 ID:dJd/g4Kb.net] >>85 すげー一気に解決したわ Runspaceとか知らんよありがと
87 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 09:36:54.77 ID:tNoLSDZ1.net] v6.2.4 https://github.com/PowerShell/PowerShell/releases/tag/v6.2.4
88 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 10:30:55.09 ID:escHc8OK.net] PowerShel で凝ったことやろうとすると、どうしても C# の知識が必要になるよな。 おかげで、C# を勉強する良いきっかけになったわ。スキルの幅が広がるのは嬉しい。
89 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 11:42:52 ID:S54SgdVf.net] C#スキル? .net frameworkの知識じゃなくて?
90 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 21:57:28 ID:KsqMKxaU.net] C#全く使えん奴は凝ったことすら思いつかないのでは
91 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 22:22:36.87 ID:QN2fVxGF.net] $label = [Label]@{ Dock = "Fill"; Font = "Meiryo,20" } という式を初めて見て驚いてるんだけど、これについてのドキュメントってどこかにありますか?
92 名前:デフォルトの名無しさん mailto:sage [2020/02/01(土) 23:27:18 ID:1A0Wf54C.net] >>91 PowerShell 3からの機能 クラスが引数を取らないコンストラクタを持っていて、プロパティがパブリックでset可能なら使える https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_hash_tables?view=powershell-7#creating-objects-from-hash-tables
93 名前:デフォルトの名無しさん mailto:sage [2020/02/02(日) 11:46:03 ID:9GpNdTap.net] >>92 ありがとう だいぶ楽になった こういうの知ってる人ってMSDNのヘルプに全部目を通してるの?
94 名前:デフォルトの名無しさん mailto:sage [2020/02/04(火) 17:22:37 ID:Rq+qX9o+.net] オブジェクト志向ライクでいいんだけど、 powershellへbatやVBSから置き換えようとすると機能によってはバージョンチェックをしないといけないのがもどかしい .NETにしろそうなんだけどね
95 名前:デフォルトの名無しさん mailto:sage [2020/02/04(火) 20:42:27.29 ID:uL6VAIkG.net] ご教示ください。 商品の価格を定期的にWebサイトから取得したいのですが、Invoke-WebRequestで取得したHtmlWebResponseObjectから要素の内の文字列を取り出そうとすると「Windows セキュリティの警告」のポップアップが表示されてしまいます。 ポップアップを出さずに要素の内の文字列を取得するにはどうすればよいでしょうか? $response = Invoke-WebRequest -uri "https://www.yodobashi.com/product/100000001002955686/" $price = $response.ParsedHtml.getElementById("js_scl_unitPrice").innerText これを実行すると「この Web サイトから個人用の情報を提供できるように、Cookie と呼ばれる小さなファイルをこのコンピューターに配置できるようにしますか?」と表示されます。
96 名前:デフォルトの名無しさん mailto:sage [2020/02/04(火) 21:00:56.36 ID:sy7Lzsaq.net] なんでPSで?・・・
97 名前:デフォルトの名無しさん mailto:sage [2020/02/04(火) 22:40:04.72 ID:tW1M7Be/.net] cookie powershellでぐぐればやり方は出てくる javascriptとか出てきたら素直にseleniumを使う seleniumをpowershellで使う方法もある
98 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 03:46:32 ID:eL08TT0Y.net] DateTimePickerで翌日の日付をデフォルト選択する方法ありませんか?
99 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 06:17:27 ID:Ec63bSXx.net] [DateTimePicker]@{ Value = [datetime]::Now.AddDays(1) }
100 名前:デフォルトの名無しさん mailto:sage [2020/02/07(金) 17:42:43 ID:eL08TT0Y.net] >>99 できましたサンクス!
101 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 17:36:01 ID:7dfvQcUC.net] 同スクリプト重複実行抑止する場合 皆さんどうしてますか? pid書き出し?Mutex?
102 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 19:33:00 ID:9UBXd1bi.net] mutex
103 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 12:17:46.17 ID:f4vRyC3Z.net] コールバック関数ってpowershellで可能ですか?
104 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 12:24:25 ID:8uBZGbTk.net] 可能ですよ
105 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 14:42:20.49 ID:OVbm/XKG.net] どうやるのですか?
106 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 15:13:30.85 ID:8uBZGbTk.net] スクリプトブロックを渡すか、関数なら $function:関数名 で渡す 実行は & でやるのが基本で他にもいろいろ方法がある
107 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 18:46:32.72 ID:D64OFTKi.net] スクリプトからフォームをshowメソッドで表示すると固まってしまい、 showDialogメソッドで表示すると操作できるようになります。 例えばモーダルフォームを表示した親フォームが固まるのは分かるのですが、 呼び出したモードレスフォームが固まってしまうのは何故なのでしょうか。
108 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 21:56:58.62 ID:RZngPC6l.net] 103です。 実はコールバック関数が何かもよく理解してませんが、 以下URL先の $sslStream = New-Object System.Net.Security.SslStream($stream,$false,({$True} -as [Net.Security.RemoteCertificateValidationCallback])) の第三引数がコールバック関数でしょうか? このやり方を理解したくて。 https://stackoverflow.com/questions/19252963/powershell-ssl-socket-client
109 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 13:53:02.82 ID:iYccZVyV.net] コールバックはこの説明が分かりやすい https://wa3.i-3-i.info/word12295.html Powershellだと「スクリプトブロック」というコードを { } で括った物がコールバック関数として使える 引数として直接書いてもいいし、一度変数に代入して変数を引数に渡してもいい {$True} という部分がそれ でも今回は「スクリプトブロック」じゃなくて「RemoteCertificateValidationCallback」でと指定されている 三つ目のコンストラクタの引数の型に注目 https://docs.microsoft.com/ja-jp/dotnet/api/system.net.security.sslstream?view=netframework-4.8#constructors なので -as 演算子で型変換をしてる
110 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 14:24:03.53 ID:AAFADizG.net] とりあえず、引数がご飯で戻り値がウンコと言う事だけはわかった。
111 名前:デフォルトの名無しさん mailto:sage [2020/02/11(火) 15:25:48 ID:LmagV5MS.net] >>107 win32APIでウィンドウ作ったりしたことなかったら分からないかもしれないけどざっくり言うと ウィンドウがOSからのメッセージ(マウスがクリックされたとか、ボタンが押されたとか) を処理するにはOSからのメッセージをウィンドウに知らせてやる必要がある(メッセージループ) ShowDialogはその辺をよしなにやってくれる
112 名前:デフォルトの名無しさん [2020/02/15(土) 04:04:02.58 ID:Nij30Obe.net] >>111 ありがとうございます。 モーダルがどうのこうのというよりも、 Showコマンドだとクリックなどの命令を受け付けないという感じでしょうか
113 名前:デフォルトの名無しさん mailto:sage [2020/02/15(土) 08:45:46.45 ID:Ba23wrvp.net] >>109 103です。ありがとうございます。なんとなくわかったような気がしますが、自分には.netクラスライブラリのリファレンスマニュアル読めるほどのオブジェクト指向プログラムの知識が足りてないようです。 powershellでちょっと小難しい事しようと思うといつもこの壁にぶち当たります。
114 名前:デフォルトの名無しさん mailto:sage [2020/02/15(土) 09:54:27 ID:/QpUFa9s.net] >>112 デバッガで実行ステップを追う感覚で捉えると分かりやすいよ Powershellのようなコンソールアプリって基本シングルスレッドで、上から下に処理が流れて最後まで行ったら終わりでしょ Showメソッドは表示するだけ ShowDialogと違って閉じるのを待たずに呼び出し元に処理を戻すから、メインスレッドはすぐに続きのスクリプト処理を再開してしまう ウィンドウっていつでもユーザーのマウス操作に反応できて、閉じられるまでは処理が終わらないよね それは無限ループを回し続けて、マウス操作のような指令が来るまでキューを調べて待つ体制に入ってるから その仕事を直接的にも間接的にもやってないならウインドウはだんまりになって当然 結論、コンソールアプリから最初に呼び出すウィンドウはモーダル表示にすべし
115 名前:デフォルトの名無しさん mailto:sage [2020/02/16(日) 00:31:35 ID:EHy9IoT2.net] >>114 ありがとうございます スッキリしました よくC#でShowDialogで表示した時はDisposeを呼ばないとダメと言いますが、 これもイベントループを作るのか作らないかの差なのでしょうか また、PowerShellでもDisposeした方がいいのでしょうか
116 名前:デフォルトの名無しさん mailto:sage [2020/03/05(木) 08:17:58 ID:Lxf+ynQs.net] Announcing PowerShell 7.0 https://devblogs.microsoft.com/powershell/announcing-powershell-7-0/ Today, we’re happy to announce the Generally Available (GA) release of PowerShell 7.0!
117 名前:デフォルトの名無しさん mailto:sage [2020/03/06(金) 04:35:17.20 ID:fNVi1eTS.net] インストーラで出てくるスパイダーマンのパチモンみたいなの何なの
118 名前:デフォルトの名無しさん mailto:sage [2020/03/06(金) 05:16:26.33 ID:hxBXwa2S.net] Overwatchのソンブラにそっくりだけどパクったのか?
119 名前:デフォルトの名無しさん mailto:sage [2020/03/06(金) 09:18:25 ID:jyEHwxlL.net] https://blog.shibata.tech/entry/2017/10/14/153510 このキャラクターはあまり認知度は高くないと思いますがPowerShell公式のキャラクターです。 名前はそのまま PowerShell の様です。(よくある言語の擬人化なのでしょう) 中の人からはPowerShell HeroやPosh-Chan*2と呼ばれている様です。 いまではPowerShell TeamのTwitterアイコンにも採用されています。
120 名前:デフォルトの名無しさん mailto:sage [2020/03/06(金) 11:37:23.38 ID:B7JE7mx4.net] >>116 キタ━━━━(゚∀゚)━━━━!!
121 名前:デフォルトの名無しさん mailto:sage [2020/03/06(金) 16:45:05 ID:EUcOgnT/.net] PowerShellの本増えないかなー 日本でももう少し流行ってほしい
122 名前:デフォルトの名無しさん mailto:sage [2020/03/06(金) 17:17:48.60 ID:mKExt1TS.net] >>121 Windows が関係するインフラ系の管理ではデファクトだと思ってたけど違うんかい? 自分はインフラ系の仕事が多いんだけど、MS 製品は言うに及ばず、 VMware、AWS、HPE の設定とか構築で使うためのモジュールが用意されてるんで、 そっち系の人は全員使ってるのかと思ってた。 今関わってる案件だと客先で用意された作業用 PC でも PowerCLI は 入れさせてもらえるんで、VMware の構築&設定が超絶はかどってすごく助かってる。
123 名前:デフォルトの名無しさん mailto:sage [2020/03/06(金) 19:23:36.96 ID:EUcOgnT/.net] >>122 IT系ですらない製造業の人間なので、インフラとかよく知らんです CSVファイルとか扱う定型業務でVBAの代わりに流行らないかなーと思ってる 会社PCに標準で入ってるのが何よりありがたい たまたまC#の経験あるからPowerShellが使いやすく感じるだけなのかもしれんけど VBAは古すぎるし、文化が違いすぎて好きになれない…
124 名前:デフォルトの名無しさん mailto:sage [2020/03/06(金) 22:15:50 ID:mKExt1TS.net] >>123 確かに、RPA 的な用途にも使えるわね。 そう言われてみれば、IT プロ向けの PowerShell の資料は山ほどあるけど、 エンドユーザの業務効率化に的を絞った資料ってあまり聞かないね。 エンドユーザが手作業でやってる定型業務を PowerShell +αで 自動化/半自動化する事例を紹介する資料を作れば需要ありそう。
125 名前:デフォルトの名無しさん mailto:sage [2020/03/07(土) 20:55:12.96 ID:yZMlhieX.net] Windows以外でもGridViewが使える A new kind of GridView right in your console: Introducing the early preview of ConsoleGuiTools https://devblogs.microsoft.com/powershell/introducing-consoleguitools-preview/
126 名前:デフォルトの名無しさん mailto:sage [2020/03/09(月) 17:26:48.99 ID:BZZ4ItAR.net] パワーシェルでテキストファイルを一行ずつ読み取って環境変数化するのはどうやるんでしょうか? バッチファイルだと簡単にできるのにパワーシェルだと難しい イメージ的にはこんなことをパワーシェルでやりたいです for /f %%a “usebackq” in (./testfile.txt) do ( set testenv=%%a echo !testenv! )
127 名前:デフォルトの名無しさん mailto:sage [2020/03/10(火) 14:15:31 ID:qUF7p1Fi.net] こーゆー感じのことやりたいのか? cat .\testfile.txt | %{ $env:testenv = $_; $env:testenv }
128 名前:デフォルトの名無しさん mailto:sage [2020/03/10(火) 14:32:38.22 ID:j2kTK4tI.net] >>126 Get-Content -Path .\TextFile.txt | ForEach-Object -Process { $env:TestVar = $_ } もしくは $ContentData = Get-Content -Path .\TextFile.txt foreach ($LineData in $ContentData) { $env:TestVar = $LineData } こんな感じじゃないかな 知らんけど グローバルな環境変数への代入はどうするのかな?
129 名前:デフォルトの名無しさん mailto:sage [2020/03/11(水) 20:45:46.50 ID:lIDu6EwW.net] >>128 上の方の感じでできました!ありがとうございます グローバルな環境変数とはなんですか?
130 名前:デフォルトの名無しさん mailto:sage [2020/03/11(水) 20:47:48.33 ID:lIDu6EwW.net] あ、システム環境変数のことですか シェルスクリプト内の一時環境変数?で良いのです
131 名前:デフォルトの名無しさん mailto:sage [2020/03/13(金) 14:02:44 ID:MwEg+WGB.net] javawみたいな感じで、スクリプト実行時にコマンドプロンプトを出さない方法はありませんか?1ファイルで。 ショートカットやvbs等の2ファイル使う方法なら解ってます。
132 名前:デフォルトの名無しさん mailto:sage [2020/03/13(金) 15:02:17.45 ID:VpgJT114.net] まだ開発中 WIP: Add pwshw for console-less PowerShell on Windows https://github.com/PowerShell/PowerShell/pull/10962
133 名前:デフォルトの名無しさん mailto:sage [2020/03/13(金) 15:27:21 ID:e1b5/B0w.net] ↑そのpwshwが取り込まれるまでは、↓を自前でビルドして自作pwshwなり、powershellwなりを作ることもできるよ https://github.com/SeidChr/RunHiddenConsole ビルドしてできたhiddenw.exeをリネームして使うだけ
134 名前:デフォルトの名無しさん mailto:sage [2020/03/13(金) 19:15:38.63 ID:cafRoH7X.net] >>131 1,
135 名前:まず、.ps1 で動作するスクリプトを作る 2,1を BASE64 でエンコード 3,powershell.exe にオプション -EncodedCommand と 2をつないで実行 4,3を .cmd (.bat) に書く 詳細は「powershell EncodedCommand」みたいな感じでググればいいでしょう。 [] [ここ壊れてます]
136 名前:1134 mailto:sage [2020/03/13(金) 19:18:46.13 ID:cafRoH7X.net] >>131 すまん、コマンドプロンプトを出さずに、か。勘違いしてました。 >>134 は取り下げます。
137 名前:デフォルトの名無しさん mailto:sage [2020/03/14(土) 10:34:16 ID:3Jd+nG/t.net] exe化するやつにそんなオプションがあったと思う
138 名前:デフォルトの名無しさん [2020/03/15(日) 16:23:53 ID:ake3THHi.net] Windows PowerShell in Action、900ページあるけど面白かった 次はPowerShell fo Sysadmins読もうかな
139 名前:デフォルトの名無しさん mailto:sage [2020/03/15(日) 23:09:18.13 ID:b9Qsc7j/.net] python.exe / pythonw.exe や ruby.exe / rubyw.exe の違いでよく悩むのでまとめておく https://blog.shibayan.jp/entry/20141221/1419171414
140 名前:デフォルトの名無しさん mailto:sage [2020/03/16(月) 21:24:16.40 ID:vD0R4SAm.net] >>133 さいこー。ありがとう
141 名前:デフォルトの名無しさん [2020/03/20(金) 21:08:31 ID:hI9v4wSz.net] win10 バージョン5.1 Invoke-RestMethodの"-body"にjsonを入れる方法を教えてほしい google photos apiで日付を指定して一覧を取得したい ubuntu + curlで curl -s -X POST -H "Authorization: Bearer " -H "Content-type: application/json" -d '{"filters":{"dateFilter": {"dates":[{"year":2019,"month":11,"day":15}]}}}' https://photoslibrary.googleapis.com/v1/mediaItems:search これだと取得出来るんだけど powershellで $header = @{"Authorization" = "Bearer "}; $body = '{"filters":{"dateFilter": {"dates":[{"year":2019,"month":11,"day":15}]}}}'; Invoke-RestMethod -Uri https://photoslibrary.googleapis.com/v1/mediaItems:search -Method Post -Headers $header -Body $body ; (400) 要求が不適切ですでエラーになる たぶんbodyの入れ方が悪いだと思うんだけど アルバムIDの絞り込みだったら $body=@{ "albumId"="id" } で取得出来た
142 名前:デフォルトの名無しさん mailto:sage [2020/03/20(金) 23:34:49 ID:fNo2jQuJ.net] -ContentType "application/json" を付けるか もしくは全部ヘッダに入れる $accessToken = "your access token" $uri = "https://photoslibrary.googleapis.com/v1/mediaItems:search" $response = Invoke-RestMethod $uri -Method Post -Headers @{ Authorization = "Bearer $accessToken" Filters = @{ DateFilter = @{ Dates = @{ Year = 2016; Month = 3; Day = 1 } } } }
143 名前:デフォルトの名無しさん mailto:sage [2020/03/21(土) 00:10:00.03 ID:AKmTgF3+.net] ごめんやっぱBodyに入れないといけない $body = @{ filters = @{ dateFilter = @{ dates = @(@{ year = 2019; month = 11; day = 15 }) } } } | ConvertTo-Json -Depth 100 $param = @{ Uri = $uri Method = "Post" Headers = @{ Authorization = "Bearer $accessToken" } Body = $body ContentType = "application/json" } $response = Invoke-RestMethod @param
144 名前:デフォルトの名無しさん [2020/03/21(土) 00:24:48 ID:WepcD5N+.net] >>141 >>142 なるほど、curlの"Content-type: application/json"の部分を指定してやらんといかんかったのか。 そしてちょっとあきらめてた連想配列も提示してもらっちゃって 超ありがとうございました。 ばっちり動いたっす
145 名前:デフォルトの名無しさん mailto:sage [2020/03/21(土) 09:18:44 ID:AEZYARkU.net] PowerShell 7.0 の新機能 https://docs.microsoft.com/ja-jp/powershell/scripting/whats-new/what-s-new-in-powershell-70
146 名前:デフォルトの名無しさん mailto:sage [2020/03/21(土) 09:34:19 ID:Nklv0DXu.net] VSCode の拡張機能、REST Client が簡単! POST localhost:8888/abc HTTP/1.1 content-type: application/json { "name": "abc", "time": "時刻" }
147 名前:デフォルトの名無しさん mailto:sage [2020/03/21(土) 10:02:37 ID:+Hs4SQrc.net] >>144 ・パイプラインの並列化 (ForEach-Object -Parallel を使用) これいいな
148 名前:デフォルトの名無しさん [2020/03/21(土) 17:39:49 ID:vJ0Lurek.net] Windows PowerShell in Actionの改3版、日本語訳してくれないかなぁ…
149 名前:デフォルトの名無しさん mailto:sage [2020/03/23(月) 10:55:55.25 ID:wpOCnP6k.net] パイプラインを繋げる先を条件で分岐って可能ですか? イメージとしては Get-Nantoka | Switch ($_.Name) Case ('A') | Get-NantokaA Case ('B') | Get-NantokaB Case ('C') | Get-NantokaC な感じです
150 名前:デフォルトの名無しさん mailto:sage [2020/03/23(月) 22:15:40 ID:nB8lN/u6.net] さすがにそんなシンタックスはないが同じような動作はできる $continuation = @{ A = { select Name,Age | Write-Host -f Cyan }.GetSteppablePipeline() B = { select Name,Gender | Write-Host -f Magenta }.GetSteppablePipeline() C = { select Name | Write-Host -f Yellow }.GetSteppablePipeline() } $continuation.Values.ForEach("Begin", $true) @" Name,Age,Gender A,12,Male C,93,Female B,32,Male A,52,Female C,73,Female "@ | ConvertFrom-Csv | foreach { $continuation[$_.Name].Process($_) } $continuation.Values.ForEach("End")
151 名前:デフォルトの名無しさん mailto:sage [2020/03/24(火) 02:11:10.59 ID:1omVAMXs.net] 結局処理を別々に書かなきゃいけないなら書いてる通りswitch文でいいんじゃねって気はする
152 名前:デフォルトの名無しさん mailto:sage [2020/03/24(火) 12:26:04.21 ID:/23EZweg.net] switch文だと毎回新規にGetNantokaAとかが呼ばれてしまうため例えばGetNantokaAがMeasure-Objectだと意味がなくなる
153 名前:デフォルトの名無しさん mailto:sage [2020/03/24(火) 13:30:06.69 ID:n2AHJDo3.net] >>149 ありがとうございます やっぱり分岐先を埋めたオブジェクトや関数を作らなきゃいけない感じですね いま、もしかして上にある「パイプラインの並列化」って分岐の事じゃね?と思ったのだが違うのかな
154 名前:デフォルトの名無しさん mailto:sage [2020/03/24(火) 16:14:53.92 ID:/23EZweg.net] >>152 > いま、もしかして上にある「パイプラインの並列化」って分岐の事じゃね?と思ったのだが違うのかな 同じルーチンが複数同時に走るってことだとと思う 排他制御とか順序の保証とかがどうなってるのかが気になる
155 名前:デフォルトの名無しさん mailto:sage [2020/03/24(火) 19:15:33.49 ID:n2AHJDo3.net] >>153 オブジェクトをパイプライン上に並列で走らせるって事? 非同期通信的な・・・
156 名前:デフォルトの名無しさん mailto:sage [2020/03/24(火) 19:46:16.61 ID:1omVAMXs.net] >>151 あーそれでわざわざGetSteppablePipeline使ってるのね
157 名前:デフォルトの名無しさん mailto:sage [2020/03/24(火) 21:24:12 ID:LC2xv/4E.net] >>149 が何やってるのかサッパリ GetSteppablePipelineでぐぐっても日本人はほとんど存在士らないのかなって具合
158 名前:デフォルトの名無しさん mailto:sage [2020/03/24(火) 22:44:37.71 ID:VBWCR/ci.net] ScriptBlock.GetSteppablePipeline Method https://docs.microsoft.com/en-us/dotnet/api/system.management.automation.scriptblock.getsteppablepipeline
159 名前:デフォルトの名無しさん mailto:sage [2020/03/24(火) 23:52:12.51 ID:LC2xv/4E.net] >>149 の最初の連想配列作ってるとこは判る 問題は次 >$continuation.Values.ForEach("Begin", $true) これ何してるの? Values.ForEachて。 こんな書き方でSteppablePipelineのBeginメソッドが呼べるの? C言語の配列で"A"[0]みたいなトリッキーさを連想させるのだが
160 名前:デフォルトの名無しさん mailto:sage [2020/03/25(水) 03:41:09 ID:IDfpoHeN.net] .ForEachはメソッド形式のForeach-Objectで、要するにC#のLINQをPowerShell風にアレンジした何か どっちかというと.ForEach({ ..... }) みたいにスクリプトブロックを渡す使い方が主流だと思うけど、メソッド名を文字列で渡してオブジェクトのメソッドを呼び出すこともできる ステッパブルパイプラインは任意のパイプライン(文)をメソッド形式で呼び出せるようにするための何か 渡された引数を先頭のコマンドにパイプして実行させることができる
161 名前:デフォルトの名無しさん mailto:sage [2020/03/25(水) 18:56:02.32 ID:8IWtSBvh.net] powershellで2つのファイルの差分のみを抜き出して追加や削除されたものは別ファイルに出力したいです 例えば fileA.txt aaa uuu iii fileB.txt iii uuu eee とあった場合にfileBをマスタとしてaaaの文字列をdelete.txtにeeeの文字列をadd.txt出力したいです。 やり方教えてください!
162 名前:デフォルトの名無しさん mailto:sage [2020/03/25(水) 19:05:36 ID:D/1vKEW+.net] 素人ですまんけど、 $test0 = "a", "b", "c" $test1 = $test0[1] こういった時に、$test0のbを同時に削除する書き方はありますか?別途処理を書く必要あり?
163 名前:デフォルトの名無しさん mailto:sage [2020/03/26(木) 00:05:42 ID:fIJkkKI3.net] >>160 function Marge([object[]]$Adds,[object[]]$Deletes){ $Adds|Where-Object{$_ -notin $Deletes} } Marge $(Get-Content fileB.txt) $(Get-Content fileA.txt) > add.txt Marge $(Get-Content fileA.txt) $(Get-Content fileB.txt) > delete.txt
164 名前:デフォルトの名無しさん mailto:sage [2020/03/26(木) 00:09:27 ID:fIJkkKI3.net] >>161 bを削除という条件なら $test0 = "a", "b", "c" $test1 = ($test0 -ne "b")[1] -ne演算子は左オペランドがコレクションの場合、差分を返す
165 名前:デフォルトの名無しさん mailto:sage [2020/03/26(木) 00:14:14 ID:fIJkkKI3.net] -ne演算子の場合は大小比較をしないので注意 もし比較する場合は>>162 のように-notin演算子とWhere関数でフィルタする
166 名前:デフォルトの名無しさん mailto:sage [2020/03/26(木) 08:51:19.38 ID:BddTdfqa.net] >>162 ありがとうございます Mergeって関数の中で処理している感じですね 詳細な処理の内容は理解していないので調べつつやってみます!
167 名前:デフォルトの名無しさん mailto:sage [2020/03/28(土) 02:03:33 .net] scoop の魅力
168 名前:デフォルトの名無しさん mailto:sage [2020/03/30(月) 02:08:56 ID:VM+VSYRD.net] > $a = try{get-content data.txt}catch{@()} > $a = if(3 -ne 4){11}else{22} ダメ元で試してみたらこんな書き方出来たのかよ
169 名前:デフォルトの名無しさん mailto:sage [2020/03/30(月) 07:08:11.36 ID:PN3/f/57.net] うん、だから三項演算子入れないでほしかった なんでわざわざ評判微妙な記法を取り入れたんだろ
170 名前:デフォルトの名無しさん mailto:sage [2020/03/30(月) 18:31:48.20 ID:2xrywwd7.net] 三項演算子は俺の大好物
171 名前:デフォルトの名無しさん mailto:sage [2020/03/30(月) 18:44:14.41 ID:kxtxXuN0.net] C#8.0のswitch式見ててあれってなったけど、そういえば右辺に文を持ってこれるのってPowerShellくらいなんだっけ
172 名前:デフォルトの名無しさん mailto:sage [2020/03/30(月) 22:05:50.57 ID:bK3E1kug.net] goto を禁止して 今度は if then else を禁止しようってか?
173 名前:デフォルトの名無しさん [2020/03/31(火) 09:18:05 ID:hmCJ2D6X.net] # RSSの内容を取得 $url="https://rss.itmedia.co.jp/rss/2.0/ait.xml" $webclient = new-object System.Net.WebClient $webclient.Encoding = [System.Text.Encoding]::UTF8 $rss = [xml]$webclient.downloadstring($url) とやった場合に$rssの内容を手早く調べるにはどうやればいいですか? $rss | ConvertTo-Json -Depth 100 $rss | Out-GridView なんかは表示が貧弱すぎてわかりません 多少長くてもいいので正確に(できればJSONで)階層化する方法が知りたいです $rssはあくまで一例で類似の複雑なオブジェクト全般について知りたいです
174 名前:デフォルトの名無しさん mailto:sage [2020/03/31(火) 12:14:42.73 ID:b44czDa9.net] >>172 $rss.rss.channel.item で一覧表示される(もちろんGridViewで見てもよい)けど、そういうことではなくて?
175 名前:デフォルトの名無しさん mailto:sage [2020/03/31(火) 13:02:27.84 ID:UGGIMXD4.net] >>172 JSONとXMLじゃ表現できる範囲が違うから「正確に」と言うなら$rss.OuterXmlとかで見るしかないと思うよ インデントとか付けて見易くしたいならXmlWriter使って整形すればいい https://imihito.hatenablog.jp/entry/2018/01/20/225513
176 名前:172 mailto:sage [2020/03/31(火) 15:56:05.63 ID:hmCJ2D6X.net] ISEからVSCodeに変えてデバッグ&インスペクトしたら大体望み通りの表示が得られました https://i.imgur.com/HRVgQP3.png [xml]な$rssも細部まで階層表示が出来ました 余計なプロパティがあまりにもごちゃごちゃしていて目視で$rssの把握は無理気味でしたが… ありがとうございました
177 名前:デフォルトの名無しさん mailto:sage [2020/04/01(水) 05:14:26.18 ID:T/a2Vy7O.net] VSCode に、XML のお勧め拡張機能はないの?
178 名前:デフォルトの名無しさん mailto:sage [2020/04/01(水) 08:11:20.55 ID:VNCwfYlv.net] >>176 スレタイ1024回読み直せ
179 名前:デフォルトの名無しさん [2020/04/01(水) 20:40:01.19 ID:wuY/0uuQ.net] classとclassを使うスクリプトの場所を分けたい場合 例えば c:\workフォルダに main.ps1 c:\work\class フォルダに class1.ps1 class2.ps1 class2.ps1はclass1.ps1を読込ので先頭に cd $PSScriptRoot . ".\class1.ps1" main.ps1はclass2.ps1を読込ので先頭に cd $PSScriptRoot . ".\class\class2.ps1" これでmain.ps1動かすとディレクトリがc:\work\classに変わっちゃうから class2.ps1を読み込んだ後にもう一度cd $PSScriptRootでディレクトリを移動し直すのが なんか気持ち悪いんですが、絶対パスでやる以外に方法はあるんでしょうか
180 名前:デフォルトの名無しさん mailto:sage [2020/04/02(木) 02:02:55 ID:sgXKVFsI.net] pushd popd
181 名前:デフォルトの名無しさん mailto:sage [2020/04/02(木) 23:47:54.92 ID:W0wv5F0P.net] . "$PSScriptRoot\class1.ps1" と絶対パスでやるのが一般的 カレントディレクトリの移動はやらんほうがいい
182 名前:デフォルトの名無しさん mailto:sage [2020/04/03(金) 01:06:03.07 ID:BrOkETDP.net] なる程その手があったか どうもありがとう
183 名前:デフォルトの名無しさん mailto:sage [2020/04/08(水) 19:04:23.59 ID:bFKpwotA.net] 連想配列をカンマ区切りに置換してファイル出力する方法教えてください 配列の場合はわかるんですが連想配列の場合がわかりません @{id=001;name=hoge} みたいなやつを↓ 001,hoge みたいな感じにしたいんです
184 名前:デフォルトの名無しさん mailto:sage [2020/04/08(水) 19:27:34.84 ID:VOICq9dy.net] @{id="001";name="hoge"}.Values -join ","
185 名前:デフォルトの名無しさん mailto:sage [2020/04/08(水) 20:46:56 ID:u/iW9oDx.net] >>183 なるほど!!
186 名前:デフォルトの名無しさん mailto:sage [2020/04/09(木) 10:17:18 ID:qPytwYgo.net] powershellのエラー発生時のログ出力って皆さんどうやってますか? 単純にpowershellの画面上に出力されてるエラーをログに吐き出したいだけなのですがイマイチやり方が分かりません!
187 名前:デフォルトの名無しさん mailto:sage [2020/04/09(木) 11:37:10.62 ID:ZcR3gUW3.net] $error
188 名前:デフォルトの名無しさん mailto:sage [2020/04/19(日) 17:57:40.84 ID:LL/F5W9x.net] シフト右クリックからpowershellウインドウをここで開くでウインドウ立ち上げた時にアクティブな状態で立ち上がらないから一回クリックしたりして選択し直さないかんのが地味にストレス
189 名前:デフォルトの名無しさん mailto:sage [2020/04/19(日) 18:12:07 ID:wL4NwIK0.net] >>187 おま環
190 名前:デフォルトの名無しさん mailto:sage [2020/04/19(日) 18:14:16 ID:vjiWfekt.net] シフト右クリックするとメニューが出る このとき先にシフトを離してから開く操作をするといい シフトを押した状態でアプリを起動すると非アクティブで開くのはWindowsの昔からの機能
191 名前:デフォルトの名無しさん mailto:sage [2020/04/19(日) 18:18:01 ID:vjiWfekt.net] Windows95の頃からこの機能は変わっていないと思う
192 名前:デフォルトの名無しさん mailto:sage [2020/04/19(日) 19:11:09 ID:jwLUU+vG.net] >>187 シフト押さないで出すようにしたら? suyamasoft.blue.coocan.jp/Windows/Windows10/PowerShell/index.html
193 名前:デフォルトの名無しさん mailto:sage [2020/04/19(日) 19:35:33.27 ID:/0QkS1hn.net] なるほど、勉強になった ありがとう
194 名前:デフォルトの名無しさん mailto:sage [2020/04/21(火) 22:23:31 ID:8Kh2/Vc8.net] >>137 結構古い本だけど今でも読み応えある感じですか?
195 名前:デフォルトの名無しさん mailto:sage [2020/04/23(木) 21:26:18 ID:xCk1mGre.net] 日本語に翻訳された初版じゃなくて第3版でしょ Windows PowerShell in Action, Third Edition https://www.manning.com/books/windows-powershell-in-action-third-edition
196 名前:デフォルトの名無しさん mailto:sage [2020/04/28(火) 10:53:40 ID:+ujIhWuh.net] メンバを呼ぶ.(ドット)の演算子を逆参照演算子と呼ぶらしいんだけど、どこら辺が逆なんだろう
197 名前:デフォルトの名無しさん mailto:sage [2020/04/28(火) 15:39:52 ID:nkgQazrR.net] Cとかでは * で値を得ることをdereferenceということがあるよ。
198 名前:デフォルトの名無しさん mailto:sage [2020/04/28(火) 19:06:19 ID:+ujIhWuh.net] 逆参照演算子もdereferenceの直訳っぽいね 参照の反対の行動という意味で逆なのかな
199 名前:デフォルトの名無しさん mailto:sage [2020/04/29(水) 08:59:09 ID:pj1FfIiR.net] 参照先のオブジェクト実体を見る、参照じゃなくなるからdereference(逆参照)
200 名前:デフォルトの名無しさん mailto:sage [2020/04/29(水) 10:32:55 ID:JJa9UlV/.net] 普通、参照外しって訳すけどな。「逆」じゃ意味が通じない。
201 名前:デフォルトの名無しさん mailto:sage [2020/04/29(水) 11:22:32 ID:HjIuTJYT.net] Powershellに逆参照演算子なんてないでしょ ドットはMember access operatorとDot sourcing operatorの二種類のはず ほかの言語との混同があるのでは C言語の & と * を参照演算子、逆参照演算子と訳すなら分かるし、-> を逆参照演算子と呼ぶのもまあ分かる
202 名前:デフォルトの名無しさん mailto:sage [2020/04/29(水) 12:43:39.55 ID:YtBfjahw.net] 日本語版Windows PowerShell in Actionにそう書いてあった気がするんだが、 確かにMSDN見るとMember access operatorだ
203 名前:デフォルトの名無しさん mailto:sage [2020/04/29(水) 12:50:10 ID:YtBfjahw.net] vscode上だと高度な関数のbeginブロックで定義した変数が、 processブロック中で使ってるにも関わらず未参照の警告が出るんだけど良い解決方法ないでしょうか 未参照確認自体は便利なので黙らせたくはないです
204 名前:デフォルトの名無しさん mailto:sage [2020/04/29(水) 21:28:33 ID:kj6lHAl7.net] >>199 逆参照と訳す人が現実にいるんだから仕方がない https://www.google.com/search?q=dereference+%E9%80%86%E5%8F%82%E7%85%A7
205 名前:デフォルトの名無しさん mailto:sage [2020/04/30(木) 09:42:14 ID:Lei4veWw.net] >>200-201 古い about_Operators には property dereferences operator とあるので、改名されたのかも。 https://docs.microsoft.com/en-us/previous-versions/powershell/module/microsoft.powershell.core/about/about_operators
206 名前:デフォルトの名無しさん mailto:sage [2020/04/30(木) 14:51:17 ID:qeUJHkfv.net] https://docs.microsoft.com/ja-jp/previous-versions/windows/powershell-scripting/hh847732(v=wps.640) . プロパティ逆参照演算子 オブジェクトのプロパティとメソッドにアクセスします。 $myProcess.peakWorkingSet (get-process PowerShell).kill()
207 名前:デフォルトの名無しさん mailto:sage [2020/05/01(金) 00:27:41 ID:iyqswZZm.net] 一般的には 参照 アドレスを取り出す 逆参照 アドレスに入っている値を取り出す だけど値を取り出すことを「逆」と訳した経緯がわからん
208 名前:デフォルトの名無しさん mailto:sage [2020/05/01(金) 05:46:31 ID:XmUvZ7vC.net] 変な翻訳だな 値参照でいい
209 名前:デフォルトの名無しさん mailto:sage [2020/05/01(金) 12:57:54 ID:578ddPng.net] dereferenceはやっぱ参照外しかな referenceってポインタ(または名前)が主語で、実体に向かって矢印が向いている、ポイントしている状態 逆参照というとこの矢印を逆に辿る、変数からポインタを探すになっちゃう 接頭辞de-を「離れる」と理解せずに、かなり派生的な「逆」と訳して定着した誤訳に近い語だと思う
210 名前:デフォルトの名無しさん mailto:sage [2020/05/01(金) 12:58:58 ID:578ddPng.net] いずれにしてもPowershellでdereferenceなんて概念を持ち込む必要がないからメンバアクセス演算子って名前に改善されたんでしょう
211 名前:デフォルトの名無しさん mailto:sage [2020/05/01(金) 16:33:54 ID:5CcYXcTT.net] C系は逆参照じゃないの むしろ参照外しのほうがわからんかったが
212 名前:デフォルトの名無しさん mailto:sage [2020/05/01(金) 17:34:48.85 ID:578ddPng.net] どっちがデファクトスタンダードかって話とどっちが正しいかって話は別だから 確信犯とか姑息みたいに誤用の方が普及して定義が揺らいでる言葉はいろいろあるけどどう使うかは話者次第
213 名前:デフォルトの名無しさん mailto:sage [2020/05/04(月) 01:09:24.67 ID:hArtKUaR.net] 初心者です move-item等でファイル名に[]があるとエラーがある事を知りました ようやく -LiteralPath つければ良いと分かりましたが、 デフォルトの仕様がワイルドカード受け付けるのって初心者殺しというか… なれてる人はこっちの方が便利なんでしょうか
214 名前:デフォルトの名無しさん mailto:sage [2020/05/04(月) 03:59:19.96 ID:eeiLu4M/.net] Powershell好きだけどファイル名の [ ] の扱いは失策だと思う
215 名前:デフォルトの名無しさん mailto:sage [2020/05/04(月) 08:21:59.04 ID:ayLem+RW.net] ?や*すらファイル名に使えるUNIXの世界へようこそ!
216 名前:デフォルトの名無しさん mailto:sage [2020/05/04(月) 09:28:04 ID:hArtKUaR.net] >>213 やっぱりそうですよね・・・ 比較演算子も、-matchで[ ]があるとエラーになって困りました これもいろいろ調べてようやく-match [regex]::escape() にすれば良いと分かりましたが・・・ PowerShellって参考書もあまりなくて古いし、ネットの情報もあまりなくてなかなか学習が進みません・・・ そもそもPowerShell ISEのヘルプで -pathは「ワイルドカード文字を許可する false」って嘘書いてあるのが・・・
217 名前:デフォルトの名無しさん mailto:sage [2020/05/04(月) 11:59:27 ID:dnvbBZmT.net] ファイル名はともかくmatch が正規表現で比較ってのは割と知られているような気もするけど
218 名前:デフォルトの名無しさん mailto:sage [2020/05/04(月) 13:19:22.94 ID:XmeTIU4M.net] 対になるlike演算子があるからなんとなくわかる ところでreplaceの正規表現じゃない版が欲しい・・・
219 名前:デフォルトの名無しさん mailto:sage [2020/05/04(月) 13:22:34 ID:eeiLu4M/.net] たしかに-matchの話に限っては単なる勘違いだな match(一致)と言われて部分一致だと思うかといえば、普通はpattern matchでしょう 参考にしたサイトが悪かったのかもしれない 正規表現を使わないなら "a[b]c".Contains("[b]") でいい
220 名前:デフォルトの名無しさん mailto:sage [2020/05/04(月) 13:25:02.05 ID:eeiLu4M/.net] >>217 上のレスで気付いたかもしれないけど "a[b]c".Replace("[b]", "[d]") で置換できるよ
221 名前:デフォルトの名無しさん mailto:sage [2020/05/04(月) 13:42:36.44 ID:XmeTIU4M.net] なるほどね そういや -replace [regex]::escape()でもOKか
222 名前:デフォルトの名無しさん mailto:sage [2020/05/04(月) 16:06:32 ID:hArtKUaR.net] >>216 >>218 教えていただいてありがとうございます。 自分がやりたかったのは、例えば hoge[hoge] というファイル名で拡張子の違う 複数のファイルの移動だったんですが、最初は $hoge = "hoge[hoge]" Move-Item "C:\test\$hoge.*" "C:\test2" これは失敗しました([ ]があるファイルを処理していて気がつきました) いろいろ調べて Get-ChildItem "C:\test\*.*"|Where-Object{$_.basename -match [regex]::escape("$hoge")}|Move-Item -Destination "C:\test2" してみて成功しました 今回教えてもらって Get-ChildItem "C:\test\*.*"|Where-Object{$_.basename.contains("$hoge")}|Move-Item -Destination "C:\test2" これでOKみたいです。まだ冗長な気もしますが・・・
223 名前:デフォルトの名無しさん mailto:sage [2020/05/04(月) 17:06:49.01 ID:LlR+aKwZ.net] パスの角括弧の扱いはpsの一番いけてないとこだからね 角括弧のみをエスケープする場合は次のようにする move "C:\test\$hoge.*".Replace('[', '``[') "C:\test2" もしくは-Filterパラメータが角括弧をワイルドカード扱いしないことを利用して move "C:\test\*" "C:\test2" -Filter "$hoge.*"
224 名前:デフォルトの名無しさん mailto:sage [2020/05/04(月) 18:54:18.78 ID:hArtKUaR.net] >>222 なるほど。 [ だけエスケープすれば大丈夫なんですね ようやく引っかかってた所から脱出できそうです 皆さん大変ありがとうございました
225 名前:デフォルトの名無しさん mailto:sage [2020/05/06(水) 21:11:41.78 ID:prm5gj7H.net] これってクラス多めのオブジェクト指向でやるべきなのか、 高度な関数多めのパイプライン志向(?)でやるべきなのか、 どっちがいいのかな
226 名前:デフォルトの名無しさん mailto:sage [2020/05/07(木) 01:36:33.14 ID:k5uIH00p.net] オブジェクト使い回す設計のほうが読みやすそうならそうする 高度な関数ってどんなんやねん
227 名前:デフォルトの名無しさん mailto:sage [2020/05/07(木) 02:22:01 ID:GVyLSOna.net] 高度な関数ってずいぶん懐かしい単語だな、普通に関数でいいと思うよ 全ては無理に和訳しようとしたMSが悪い
228 名前:デフォルトの名無しさん mailto:sage [2020/05/07(木) 08:07:17 ID:O8jL8wQb.net] >>224 本来のシェル的な使い方がメインなら 関数でパイプライン多用した方が使いやすい 普通のアプリに近いものを作る場合には クラスでOOPした方が使いやすい
229 名前:デフォルトの名無しさん mailto:sage [2020/05/07(木) 08:26:30 ID:H2g0PsUL.net] PSのクラスって判らんからコード量増えたらC#埋め込むわ
230 名前:843 mailto:sage [2020/05/07(木) 09:38:19 ID:1Drf/TcZ.net] PSのクラスって機能が足りないとかはあるけど特に難しい所はないと思うが…
231 名前:デフォルトの名無しさん [2020/05/07(木) 23:47:47 ID:cnY/r+Lf.net] 教えてください。 WindowsServer2012のADユーザー情報の取得についてです。 testunyo.local ┗ユーザー ┗Users 上記OUにあるユーザーの情報のうち、 ログオンID フルネーム(表示名) 所属するグループ名 の情報をcsvで抽出したいとき、 Get-ADPrincipalGroupMembership -identity test | Select-Object name | Format-Wide -Column 20 | Out-String -Width 500 >> C:\work\logtest.csv とすると所属するグループ名しか抽出できません。 A列にログオンID、 B列にフルネーム、 C列以降に所属するグループ名 と、1ユーザー1レコードで表示させたいとき、 どのようにするのが良いでしょうか? Get-ADPrincipalGroupMembershipではなく、csvdeを使うのが良さそう とは思ったのですが、うまく抽出できませんでした。
232 名前:デフォルトの名無しさん mailto:sage [2020/05/08(金) 01:23:43 ID:GBARQ9Uf.net] Select-Object name で name プロパティしか抽出できてないとか?
233 名前:デフォルトの名無しさん mailto:sage [2020/05/08(金) 12:22:27 ID:Fn4yfVbS.net] >>221 Ruby で作った。 DryRun なので、実際には実行されません require 'fileutils' dest_dir = "C:/test2" keyword = "hoge[hoge]" # 絶対パスのディレクトリ名の後ろに、* を付けること! # . で始まる、隠し directory, file を除く glob_pattern = "C:/test/*" src_dir = File.dirname( glob_pattern ) # ディレクトリパスだけを取り出す Dir.glob( glob_pattern ) .select { |full_path| File.file?( full_path ) } # ファイルのみ .select { |full_path| File.basename( full_path, ".*" ) === keyword } # 拡張子を取り除いた部分のファイル名 .each do |full_path| dest_path = dest_dir + "/" + File.basename( full_path ) # ファイル名 FileUtils::DryRun.move( full_path, dest_path ) end 出力 mv C:/test/hoge[hoge].txt C:/test2/hoge[hoge].txt
234 名前:デフォルトの名無しさん mailto:sage [2020/05/08(金) 13:46:42 ID:fxtS7XW6.net] GetNewClosureで作ったクロージャからトップレベルに定義した関数にアクセスできんのだがスコープどうなってんだ? function Hoge () {} { Hoge }.Invoke() #うごく { Hoge }.GetNewClosure().Invoke() #うごかん
235 名前:デフォルトの名無しさん mailto:sage [2020/05/08(金) 15:09:04 ID:eZ8FT/L5.net] またキチガイが湧いてきたか NG しやすいように、コテハン付けて欲しいわ
236 名前:デフォルトの名無しさん mailto:sage [2020/05/10(日) 09:05:34.07 ID:oQrk4XHl.net] >>233 トップレベルと呼んでいるのは、(仮に) Hoge.ps1 の Script スコープでいいよね? PowerShell のクロージャは、動的モジュールにバインドされたスクリプトブロック。 モジュールの Script スコープは、常に Global スコープの直接の子なので、 クロージャの Local スコープは、Hoge.ps1 の Script スコープの子孫にならない。 スコープの親子関係: [Global] - [Script(Hoge.ps1)] <== Hoge 関数の定義されているスコープ [Global] - [Script(動的モジュール)] - [Local] <== 問題のクロージャ内のスコープ
237 名前:デフォルトの名無しさん mailto:sage [2020/05/10(日) 15:23:52 ID:JjPR8mXC.net] Ruby で作った!
238 名前:デフォルトの名無しさん mailto:sage [2020/05/11(月) 21:37:49 ID:41JmE2xy.net] >>235 なるほど PowerShellって便利で面白いけど時々変な癖あるよな
239 名前:デフォルトの名無しさん mailto:sage [2020/05/12(火) 21:11:03 ID:2xTEfvW8.net] Closures in PowerShell https://devblogs.microsoft.com/scripting/closures-in-powershell/ Windows PowerShell uses dynamic modules to create dynamic closures. A closure in computer science terms (at least as defined in Wikipedia) is “a function that is evaluated in an environment containing one or more bound variables.” A bound variable is, for our purposes, a variable that exists and has a value. The environment in our case is the dynamic module.
240 名前:デフォルトの名無しさん mailto:sage [2020/05/15(金) 09:02:37.24 ID:B71gCNON.net] v6.2.5 https://github.com/PowerShell/PowerShell/releases/tag/v6.2.5 v7.0.1 https://github.com/PowerShell/PowerShell/releases/tag/v7.0.1
241 名前:デフォルトの名無しさん mailto:sage [2020/05/15(金) 09:54:10 ID:JVqn6ak1.net] 昔ながらのPowerShellとPowerShell Coreって共存できんの? PowerShell CoreってクロスプラットフォームだけどWindowsの管理コマンドとか旧PowerShell資産とかとどれぐらい互換性あるのかな
242 名前:デフォルトの名無しさん mailto:sage [2020/05/15(金) 12:11:51 ID:spGK6l8f.net] >>240 共存できる。Core をインストールしても、PowerShell 5.1 を置き換えない。 インストールされるパスが違うし、そもそも実行ファイルのファイル名も違うので。
243 名前:デフォルトの名無しさん mailto:sage [2020/05/15(金) 21:26:49 ID:OwQtRj4C.net] Windows PowerShell 5.1 から PowerShell 7 への移行 https://docs.microsoft.com/ja-jp/powershell/scripting/whats-new/migrating-from-windows-powershell-51-to-powershell-7
244 名前:デフォルトの名無しさん mailto:sage [2020/05/16(土) 02:28:51 ID:LVL/9uGV.net] むしろCore版を上書きしてほしんだが Powershellで検索すると大量に出てきてうざいし、 Win+Xのショートカットから起動したいし
245 名前:デフォルトの名無しさん mailto:sage [2020/05/16(土) 02:29:08 ID:LVL/9uGV.net] 逆、Core版で、ね
246 名前:デフォルトの名無しさん mailto:sage [2020/05/16(土) 21:17:04 ID:I3dvVBqE.net] >>243 タスクバーにピン留めでは駄目なの?
247 名前:デフォルトの名無しさん mailto:sage [2020/05/19(火) 11:55:42.51 ID:1h+Pwucu.net] C#クラスFooをAdd-Typeして Fooを継承するpowershell class Barを定義しようとするとVSCodeの静的解析に型Fooが無いって言われる 実行時には問題なく動作するんだけど鬱陶しい どうにかならんのかこれ
248 名前:デフォルトの名無しさん mailto:sage [2020/05/19(火) 16:52:18 ID:JYrNQD+Z.net] >>246 現状では継承クラスを別ファイルにして読み込み元で先にadd-typeしてから遅延読み込みするしかない core系統ではusing assemblyの実装が保留されてるから 将来的にはおそらくそこをクリアしたusing assemblyが実装されると思うけど >実行時には問題なく動作するんだけど それはどこかしらで自分で先にadd-typeしてるからだと思う。そうじゃないとエラーで止まる 今の段階で最善と思われる方法はマニフェストモジュールにして psd1内でRequiredAssembliesに継承元のアセンブリを設定すること それをusing moduleで読み込むようにすれば最も自然に使える
249 名前:デフォルトの名無しさん mailto:sage [2020/05/19(火) 20:59:56 ID:JYrNQD+Z.net] >>246 ごめんよく読んだら的外れなレスだったわ C#のコードをadd-typeするってことね .NETのクラスを継承すると勘違いした
250 名前:デフォルトの名無しさん mailto:sage [2020/05/19(火) 21:17:33 ID:qw+UaCoQ.net] Suppressing Rules https://github.com/PowerShell/PSScriptAnalyzer#introduction
251 名前:デフォルトの名無しさん mailto:sage [2020/05/19(火) 21:19:20 ID:qw+UaCoQ.net] urlおかしかったからやり直し https://github.com/PowerShell/PSScriptAnalyzer#suppressing-rules
252 名前:デフォルトの名無しさん mailto:sage [2020/05/25(月) 18:56:03 ID:1KC3re4i.net] 教えてください。Windows10です。 クリップボードに次の文字をコピーします。 Get-ChildItem -Path "c:\doc★" これをPowershellに貼り付けると、勝手に★が削除されて Get-ChildItem -Path "c:\doc" になってしまいます。正常に貼り付けるには、 どのようにすればよろしいでしょうか?
253 名前:デフォルトの名無しさん mailto:sage [2020/05/25(月) 20:12:08 ID:zwsFaYDZ.net] Powershellコンソールのバグらしいよ
254 名前:デフォルトの名無しさん mailto:sage [2020/05/26(火) 00:18:53 ID:oj/EjNC2.net] そうですか。バグなのですか。ありがとうございました。
255 名前:デフォルトの名無しさん mailto:sage [2020/05/26(火) 08:41:22.73 ID:Ay3ltgvo.net] コンソールじゃなくてPSReadLineのバグでしょ Remove-Module PSReadLine を実行した後なら普通に貼り付けできる
256 名前:デフォルトの名無しさん mailto:sage [2020/05/26(火) 08:45:00.47 ID:TWTiQG7J.net] >>251 知らんかった、こんなバグが有ったのか。ウチの環境でも再現した。 echo '★★★★' echo '☆☆☆☆' これを貼り付けると、 echo '' echo '' こうなったわ。
257 名前:デフォルトの名無しさん mailto:sage [2020/05/26(火) 08:56:54.86 ID:lYnWhySi.net] >>254 ホントだ、治った
258 名前:デフォルトの名無しさん mailto:sage [2020/05/26(火) 10:38:39.59 ID:DUXfe990.net] なん…だと…
259 名前:デフォルトの名無しさん mailto:sage [2020/05/26(火) 11:36:52.76 ID:fIo6Jhad.net] スクリプトならok?
260 名前:デフォルトの名無しさん mailto:sage [2020/05/26(火) 15:52:47 ID:q+hnim2U.net] スクリプトならOKだよ 画面を色分けする処理がバグってたはず
261 名前:デフォルトの名無しさん mailto:sage [2020/05/26(火) 19:42:26 ID:wDroaLCo.net] echo 'yatta-man★ko-hi-★raita-' いやー、もう少しで社会的に抹殺されるところだったよ
262 名前:デフォルトの名無しさん mailto:sage [2020/05/27(水) 18:03:22.45 ID:8S2S1tlw.net] htmlのdiffでまともな方法ない?
263 名前:デフォルトの名無しさん [2020/05/28(木) 16:49:06.82 ID:NkjBuM4x.net] Get-ADPrincipalGroupMembership -identity testuser1 | Select-Object name | ・・・ というshellを2つ続けて流すと、ログファイルに記載されたとき、 1つ目のshellの結果と2つ目のshellの結果に3行の空白が生まれます。 なぜでしょうか・・・?
264 名前:デフォルトの名無しさん mailto:sage [2020/05/29(金) 08:40:18 ID:GJdaxgw0.net] >>262 shell ってどういう意味ですか?
265 名前:デフォルトの名無しさん mailto:sage [2020/05/29(金) 09:24:43 ID:AL+gVKfO.net] https://ejje.weblio.jp/content/shell shellとは 貝殻、(カキの)殻、(カメ・エビ・カニなどの)甲羅、(カブトムシなどの)硬い外皮、(鳥の卵の)殻、(果実・種子などの)殻、(豆類の)さや、(建物・乗り物などの)骨組み、外郭、船体
266 名前:デフォルトの名無しさん [2020/05/29(金) 09:26:47 ID:d1uEOplb.net] >>263 すみません。 PowerShellスクリプト、です。
267 名前:デフォルトの名無しさん mailto:sage [2020/05/29(金) 12:54:04.01 ID:1C1s9P85.net] ログファイルはフィルターして見るから、どうでも良くね? サーバー運用部門しか見ないし。 一般社員が見ないだろ 数年保存して捨てるだけの、ログファイルの書式にこだわっても、仕方ない
268 名前:デフォルトの名無しさん mailto:sage [2020/05/29(金) 14:16:17.31 ID:8xO19nFy.net] なぜそうなるかを知りたいってことだろ >>262 がどういうスクリプトを流してるのかさっぱり要領を得ないから原因は全くわからんけど
269 名前:デフォルトの名無しさん mailto:sage [2020/05/29(金) 15:24:58.90 ID:GJdaxgw0.net] >>265 (1)1回目と2回目は、パラメータが違うのですか?それとも、全く同じ内容で実行のタイミングが違うだけですか? (2)何度も尋ねるのは煩雑なので、可能であれば端折らずに記述内容を全て記載してもらえませんか?
270 名前:デフォルトの名無しさん mailto:sage [2020/05/29(金) 15:38:08.24 ID:QVnkNeSg.net] まあでも、センスは出るよね
271 名前:デフォルトの名無しさん [2020/05/29(金) 15:53:45 ID:d1uEOplb.net] >>266 正にその通りなんですが、サーバー運用部門としてみる人数が多いので、 可能な限り整った書式で出力したい次第です。 >>267 今までも様々なログを出力してきましたが、 今回のような不思議な現象は初めてで、どうしてなのか解明したいです。 >>268 (1)1回目と2回目はほぼ同じスクリプトです。 (2)端折っていない実行したスクリプトを記載します。 >>269 センス、出ますよね・・・。 端折っていないスクリプトです。 以下二つを、同時に流しました。 Get-ADPrincipalGroupMembership -identity test111 | Select-Object name | Format-Wide -Column 20 | Out-String -Width 1000 >> C:\work\logtest0528.csv Get-ADPrincipalGroupMembership -identity test222 | Select-Object name | Format-Wide -Column 20 | Out-String -Width 1000 >> C:\work\logtest0528.csv よろしくお願いします。
272 名前:デフォルトの名無しさん mailto:sage [2020/05/29(金) 16:13:12.46 ID:1C1s9P85.net] たぶん、1つ目のアプリが、3行の改行コードを出力してるからだろ 例えば、HTML みたいに、データ内の区切りに、CR・LF の改行コードを使っているものもある。 それらを出力すると、空行ができる それか、アプリにバグがあって、 正しくデータが取れず、空行だけが出力されているとか
273 名前:デフォルトの名無しさん mailto:sage [2020/05/29(金) 16:16:40 ID:yQdVc2qs.net] >>262 > というshellを2つ続けて流すと >>270 > 以下二つを、同時に流しました。 相手を混乱させて遊んでるっていう理解でいい?
274 名前:デフォルトの名無しさん [2020/05/29(金) 16:45:48.92 ID:d1uEOplb.net] >>271 バグですか・・・ 必要なデータは取得できているんですが、 その下に不必要な空行が発生するのは、もう、仕方ないんですかね・・・ >>272 混乱させるつもりはなかったのですが、 >>270 のスクリプトは、エクセルで作成をしました。 (A1に1つ目のスクリプト、A2に2つ目のスクリプト・・・という感じです) 作成したスクリプトの全てをコピーし、PowerShellに貼り付ける、 という作業をしました。
275 名前:デフォルトの名無しさん mailto:sage [2020/05/29(金) 16:56:48 ID:xfksWnzq.net] そもそも Get-ADPrincipalGroupMembership が何個の要素をパイプラインに流してるか見てみたら?
276 名前:デフォルトの名無しさん mailto:sage [2020/05/29(金) 17:01:45 ID:GJdaxgw0.net] >>270 ユーザが所属しているグループをファイルに吐きたいわけですよね。 1ユーザごとに1ファイル、グループは横に並べて出力、という条件は必須ですか?
277 名前:デフォルトの名無しさん mailto:sage [2020/05/29(金) 17:11:08 ID:GJdaxgw0.net] >>273 力技だけど、これでどうですかね。うちの環境ではうまく行ってます。 (Get-ADPrincipalGroupMembership -identity testuser111 ).name | %{"$_`t"| Out-File -NoNewline -Encoding ascii -Append -FilePath "C:\a.txt"}
278 名前:デフォルトの名無しさん [2020/05/29(金) 17:38:52 ID:d1uEOplb.net] >>274 その考えは無かったです・・・ 調べてみます。 >>275 >>270 のコードでtest111,test222としているところ、 実際には3000程の数があります。 実行するスクリプトの結果(ログ)は一つのファイルに追記する形で、 理想の出力は、 1ユーザーの所属するグループが、1セル1グループに横並びになることです。 A B C 1 グループ1 グループ2 グループ3 ←1つ目のスクリプトで流したtest111の所属するグループ 2 グループ1 グループ3 グループ4 ←2つ目のスクリプトで流したtest222の所属するグループ というイメージです。 >>276 ありがとうございます! 検証してみます。
279 名前:デフォルトの名無しさん [2020/05/29(金) 18:01:42 ID:d1uEOplb.net] >>276 -NoNewline でエラーになります・・・ Out-FileのパラメーターとしてNoNewLineというものが無いと表示されます。 276さんはうまくいったとのことなので、 環境が違うのでしょうか・・・?
280 名前:デフォルトの名無しさん mailto:sage [2020/05/29(金) 18:11:11 ID:GJdaxgw0.net] >>278 じゃあ、最初の趣旨とは違ってますけどこれでどうでしょう。 "C:\users.txt"には、対象となるユーザ名を1行に一つという形式で記述してください。 まあ、対象ユーザも Get-ADObject で取得したほうがスマートですけどね。「特定のコンテナ内のユーザ」といった条件なら簡単なのですが。 $users = Get-Content "C:\users.txt" foreach ($user in $users) { if($user -eq ''){ break } echo $user $grps = (Get-ADPrincipalGroupMembership -identity $user ).name $line = '' foreach ($grp in $grps){ $line += '"{0}",' -f $grp } echo $line Out-File -InputObject $line -Encoding utf8 -Append -FilePath "C:\grp.csv" }
281 名前:デフォルトの名無しさん [2020/05/29(金) 18:22:56 ID:d1uEOplb.net] >>279 ありがとうございます。 すでに私に理解できる範囲を超えているのですが、、、 データを取得したい対象ユーザーは”特定のコンテナ内”です。 その場合であれば、どこを変更するようになるでしょうか? すみません。ご教示ください。
282 名前:デフォルトの名無しさん mailto:sage [2020/05/29(金) 18:44:52.24 ID:GJdaxgw0.net] >>280 じゃあこれが良いと思います。 3行目の「"OU=Newusers,DC=example,DC=local"」となっている箇所を、実際の環境に置き換えてください。 以下は、ドメイン名が「example.local」、最上階層の「Newusers」という OU 内の UserObject を全て取得する場合の例です。 デスクトップ上に 'yyyyMMdd_hhmmss.csv' を出力します。1カラム目はユーザ名で、2カラム目以降がグループ名です。 $Now = Get-Date -Format 'yyyyMMdd_hhmmss' $logPath = Join-Path -Path ([Environment]::GetFolderPath("Desktop")) -ChildPath ('{0}.csv' -f $Now ) $users = Get-ADUser -Filter * -SearchBase "OU=Newusers,DC=example,DC=local" foreach ($user in $users) { if($user -eq ''){ break } Write-Host ('{0} : ' -f $user.SamAccountName) -NoNewline $grps = (Get-ADPrincipalGroupMembership -identity $user).name $line = '"{0}",' -f $user.SamAccountName foreach ($grp in $grps){ $line += '"{0}",' -f $grp } echo $line Out-File -InputObject $line -Encoding 'utf8' -Append -FilePath $logPath }
283 名前:デフォルトの名無しさん mailto:sage [2020/05/29(金) 18:48:35.39 ID:GJdaxgw0.net] >>280 追伸。まず、 Get-ADUser -Filter * -SearchBase "OU=Newusers,DC=example,DC=local" だけ実行して希望通りのユーザオブジェクトが出力されることを確認してください。 "OU=Newusers,DC=example,DC=local"の記述方法がキモになりますが、 よくわからない場合は「distinguished name」でググってください。
284 名前:デフォルトの名無しさん [2020/05/29(金) 23:38:38 ID:d1uEOplb.net] >>281 >>282 本当にありがとうございます! 今は検証環境に繋げないので、明日、試してみます! また結果を明日の夜します!
285 名前:デフォルトの名無しさん mailto:sage [2020/05/30(土) 00:38:50 ID:AsxV9jzU.net] ふーむcsvde使った方が楽そうだな
286 名前:デフォルトの名無しさん mailto:sage [2020/05/30(土) 07:47:46.25 ID:Z2NT1d95.net] PowerShellを使って結果出す事それ自体が目的になってしまう事はよくある
287 名前:デフォルトの名無しさん mailto:sage [2020/05/30(土) 08:49:02.75 ID:d859mrLa.net] 結果を出すことが目的なのはいいだろw PowerShellを使うことが目的になると言いたいんだろうけど
288 名前:デフォルトの名無しさん mailto:sage [2020/05/30(土) 10:31:28 ID:KjUAf8QQ.net] >>284 このスレでそれを言うのは、料理レシピサイトで「ファミレスで食うほうが楽じゃね?」って言うのと同じ
289 名前:デフォルトの名無しさん mailto:sage [2020/05/30(土) 13:24:05 ID:9sn/rA++.net] 余計なソフトのインストールを禁止している会社って PowerShellでプログラミングするのは認められているの?
290 名前:デフォルトの名無しさん mailto:sage [2020/05/30(土) 16:10:14.39 ID:KjUAf8QQ.net] >>288 会社によるだろう、としか
291 名前:デフォルトの名無しさん mailto:sage [2020/05/30(土) 23:54:06.76 ID:iu9cBMrA.net] 合法とも禁止とも明示してる企業は見たことないな はっきり禁止されてないなら使ってOKって解釈で今まで問題になったことはない
292 名前:デフォルトの名無しさん mailto:sage [2020/05/31(日) 00:40:12 ID:+AbQWtDJ.net] ちなみにレジストリをいじるのは認められているの?
293 名前:デフォルトの名無しさん mailto:sage [2020/05/31(日) 01:57:51 ID:81hmFEht.net] うちは、総務部の担当者に許可を求めることになっているが、 その担当者がよく解らない人のようで、ダメと言われたことはないな。
294 名前:デフォルトの名無しさん mailto:sage [2020/05/31(日) 12:20:40 ID:b/Zu62PW.net] 管理者権限アカウントの申請は必要てのはあるよね
295 名前:デフォルトの名無しさん mailto:sage [2020/05/31(日) 17:04:24.67 ID:rtfQfZlf.net] 部のPC担当じゃなければせいぜいパワーユーザーだと思うけど
296 名前:デフォルトの名無しさん [2020/05/31(日) 23:56:26.74 ID:iB7Renkw.net] >>281 報告が遅くなりました・・・。 検証環境で実行した結果、 A列にログオンID、B列に所属するグループ1、が表示されました。 ここまではかなりいい感じだったのですが、 所属するグループの2つ目以降が出力できませんでした・・・。 2つ目以降を出力できるよう考えてみましたが、 取ってつけた知識では太刀打ちできませんでした。 すみません。2つ目以降を出す方法を教えていただけますでしょうか。 csvdeも考えたのですが、 先に形になったのがGet-ADPrincipalGroupMembershipだったので、 そちらを主軸に考えていました。 理想形が出力されればcsvdeでも全く問題ありません! レジストリはいじれますが、あくまでもシステム管理部であるから、 という感じですね。 あー、PowerShellを使うこと、が目的になってしまってる感はありました。 理想の出力結果が出れば、フリーのツールでもOKなんですが、、、
297 名前:デフォルトの名無しさん mailto:sage [2020/06/01(月) 00:21:41 ID:vdF2NbM2.net] 余分な空白さえ消えればいいなら Out-String -Stream | ?{$_ -ne ""} | %{$_.trim()}
298 名前:281 mailto:sage [2020/06/01(月) 08:58:32.48 ID:Pn8bHbMj.net] >>295 説明がしにくいので、pastebin に貼りました。 https://pastebin.com/g40VkBXe こちらで試している限り、所属グループが複数でも正しく出力されています。 現象的に、12行目の $line += '"{0}",' -f $grp が、「+」が抜けて $line = '"{0}",' -f $grp になっているように思えます。 確認1: コードはコピペされてますか?それとも、画面を見ながら手打ちで転記でしょうか。 もし後者の場合はコピペで試してみてください。 また、仮にコピペだったとしても、5ちゃんからではなく上記 URL の pastebin からコピペしなおしてみてもらえますか。 確認2: ファイルに書き出すものと同じ内容を画面にも出力するようにしています。 グループ名が一つだけ、というのは画面上でもでしょうか?
299 名前:デフォルトの名無しさん [2020/06/01(月) 20:38:24 ID:6WpvIjeC.net] >>296 ありがとうございます。 >>270 に記載のスクリプトを編集して、 Get-ADPrincipalGroupMembership -identity test111 | Select-Object name | Format-Wide -Column 20 | Out-String -Stream | ?{$_ -ne ""} | %{$_.trim()} >> C:\work\logtest0528.csv という感じになるでしょうか? >>297 ありがとうございます。 確認1:5ちゃんをコピペしてました。 明日検証環境を使えるので、URLのpastebinからやってみます。 確認2: グループ名が一つだけ、というのは画面上でもそうなってます。 (実際には所属するグループが3つあるユーザーを作りテストしています) 「+」は確かに抜けているところがありますね・・・。 修正して、もう一度検証してみます。 ありがとうございます!
300 名前:デフォルトの名無しさん [2020/06/01(月) 23:33:53 ID:5NIHbXOS.net] 「慶應卒の学歴なんていらない」10代起業で成功する子の共通点 https://www.excite.co.jp/news/article/President_35457/ 起業で成功するキャリア形成の仕方とは? 元プロサッカー選手で起業家の鈴木啓祐氏に聞いた https://sogyotecho.jp/career-development/ 【アプリ開発で起業】必要な心得とマネタイズ方法のすべて https://www.dreamgate.gr.jp/contents/column/application-development 学生起業家が開発、「人を軸に本を探すアプリ」とは?読書通じて「考える力」養って https://newswitch.jp/p/20168 島田商高生がアプリ考案、発表 ICT起業家育成プログラム https://www.at-s.com/news/article/local/central/730010.html 医師コンビが「治療用アプリ」で起業、禁煙に続き高血圧治療アプリを開発 https://diamond.jp/articles/-/229375 好きが高じて“カレー起業”、キャッシュレス決済アプリ「TOKYO MIX CURRY」の挑戦 https://diamond.jp/articles/-/215868
301 名前:デフォルトの名無しさん [2020/06/02(火) 12:00:25.43 ID:TaVu0Z+0.net] >>297 pastebinに記載いただいたスクリプトをマルっとコピペで、 理想形として出力することができました!! 本当にありがとうございました!! 一文で作成しようと考えていましたが、 こんなに長いスクリプトが必要とは思いませんでした・・・。
302 名前:297 mailto:sage [2020/06/02(火) 13:51:33.65 ID:4gU+uBDd.net] >>300 うまく動いたようで良かったです。 あのスクリプトですが、1行ごとに見ていけば実行してることは単純です。 また、記述する際も省略表記はなるべく避けるようにしましたので、 ググって意味を調べるのも容易かと思います。 Windows 系インフラの構築/運用では PowerShell を活かせる場面が 多くありますので、この機会に覚えておくと強力なスキルになると思います。
303 名前:デフォルトの名無しさん mailto:sage [2020/06/02(火) 16:16:22.57 ID:e5f6kXC+.net] csvdeは全部エクスポートしておけば適当なスクリプトでどこでも試せるけど PSはいちいちAD鯖に繋ぎに行く形だからテストが大変なんよね
304 名前:デフォルトの名無しさん [2020/06/02(火) 18:35:36 ID:TaVu0Z+0.net] >>301 本当にありがとうございました。 次にこの出力したデータを加工して、今度はインポートする作業が待っていますが、 調べて頑張ってみます。 >>302 はい。家庭で検証ができないのでテストが大変でした。 csvdeも今後使うことがありそうですので、注意してみておきます。
305 名前:300 [2020/06/03(水) 17:19:22.25 ID:OSlS0ZCr.net] すみません。頑張り切れませんでした。 >>297 の出力結果に加え、 そのアカウントの有効/無効の情報を同時に取得したいと思い、 Enabledを加えてみましたが、うまく出力できませんでした。 Enabledは、Write-Hostの前に入れればよいと思いましたが、合っていますか?
306 名前:300 [2020/06/03(水) 18:10:05 ID:OSlS0ZCr.net] Write-Hostの前じゃなかったです。 後ろでした。 これで $Now = Get-Date -Format 'yyyyMMdd_hhmmss' $logPath = Join-Path -Path ([Environment]::GetFolderPath("Desktop")) -ChildPath ('{0}.csv' -f $Now ) $users = Get-ADUser -Filter * -SearchBase " OU=ユーザー,DC=test,DC=local " foreach ($user in $users) { if($user -eq ''){ break } Write-Host ('{0} : ' -f $user.SamAccountName) -NoNewline Write-Host ('{0} : ' -f $user.Enabled) -NoNewline ←★★ココ $grps = (Get-ADPrincipalGroupMembership -identity $user).name $line = '"{0}",' -f $user.SamAccountName foreach ($grp in $grps){ $line += '"{0}",' -f $grp } echo $line Out-File -InputObject $line -Encoding 'utf8' -Append -FilePath $logPath } これで画面には出るようになりました。 出力するファイルにも出るようにするには、、、
307 名前:297 mailto:sage [2020/06/04(木) 11:06:18 ID:TeZKrupD.net] >>305 $line = '"{0}",' -f $user.SamAccountName の下に、 $line += '"{0}",' -f $user.Enabled を追加してみてください。 あと、 if($user -eq ''){ break } は、対象のユーザ名をファイルから読み取っていたバージョン (>>279 ) の名残ですので、バッサリ削除しても良いですね。 まとめるとこうです。 https://pastebin.com/8iFFBCA5 念のため解説しておくと、$line は、最終的にファイルに書き込むことになる文字列を格納しています。 で、代入時に「=」ではなく「+=」を使ってますので、代入の都度「置き換え」ではなく「追記」になります(文字列の場合。数値の場合は加算)。 つまり、 $line += '"{0}",' -f $user.Enabled を冗長な書き方に直すと、 $line = $line + ('"{0}",' -f $user.Enabled) ということになります。 文字列の「-f」については以下を参照してください。 https://www.google.com/search?q=powershell+string+%27-f%27 オブジェクトのプロパティを指定したものを文字列に直接記述できないのでこうしています。 (こうは書けない $line += '"$user.Enabled",')
308 名前:300 [2020/06/04(木) 21:01:19.40 ID:7LqTXEt1.net] >>306 解説までいただきましてありがとうございます! ご提案のスクリプトで無事、第1段階のデータを出力することができました。 次の作業がまた待っていますが、教えていただいたことを参考に 作ってみます。 本当にありがとうございます。
309 名前:デフォルトの名無しさん mailto:sage [2020/06/04(木) 22:31:22.80 ID:sBE+PUel.net] powershell学習したいのですが、どのようなことからやっていけばいいでしょうか? とりあえず、バッチファイルを書き換えようかなぁとか思ったりしていますが いかがでしょうか?
310 名前:デフォルトの名無しさん mailto:sage [2020/06/04(木) 22:43:28 ID:7Yb6fwZR.net] 自分で書いたバッチファイルを置き換えるのは効果的な学習だと思う ただ対応するコマンドを置き換えていくだけだと オブジェクトをパイプでつないでいくPowerShellっぽい部分を身につけるのが難しいから Cookbook的な本で先人のコードを写経しつつ改変していくのがいいんじゃないかな
311 名前:デフォルトの名無しさん mailto:sage [2020/06/04(木) 23:21:46.10 ID:hC0MsN2x.net] Ruby の方がよい。 Ruby 内で、powershell, clip コマンドなども呼べる # クリップボード内の複数行文字列の、各行の先頭・末尾から、 # 連続する空白類を除去して、クリップボードに入れる 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
312 名前:デフォルトの名無しさん mailto:sage [2020/06/05(金) 01:16:33.38 ID:amrr7gLk.net] ttps://heetnote.com/semi-auto-ps/#more-2973 ここで公開されているスクリプトを自分なりに書き換えて使っているのですが、 FakeAacWavをfre:ac1.11に置き換えるとWrite-Hostで表示される日本語が全て文字化けするようになってしまいました。 以前はfre:ac0.9を使っていたのですが、その時は文字化けしませんでした。 処理開始時点では日本語は正常に表示されるのですが、fre:acの処理が始まると同時に、正常に表示されていたものも含めて 全ての日本語が「□□□」に置き換わるようになります。 多分ですが文字コードの問題ではないようです。ソフト側の問題であってどうしようもないものでしょうか?
313 名前:デフォルトの名無しさん [2020/06/05(金) 06:07:06.84 ID:Trob9zBU.net] コマンドラインに その@ を張り付けると その だけになるの困る なぜか @ 単独で張り付けると @ が入るのが謎 @あ@あ だと @ああ だったりもう……
314 名前:デフォルトの名無しさん mailto:sage [2020/06/05(金) 08:46:16.13 ID:S6jGROW/.net] >>311 外部コマンド(*.exe)の出力が起因する問題なのであれば、 「& 〜〜」で同一のコンソール内で実行するのではなく、 「Start-Process 〜〜〜」で実行してみてはどうでしょう。 Start-Process の場合は新しいコマンドプロンプトのウィンドウが開いて、 そこで実行されます。
315 名前:デフォルトの名無しさん mailto:sage [2020/06/05(金) 15:49:55 ID:amrr7gLk.net] >>313 ありがとうございます。試行錯誤しているのですがStart-Processでfre:acが起動しません… Start-Process -FilePath (fre:acのパス。""で囲む) -ArgumentList (fre:acの引数。""で囲む) …で書式は合ってますよね?
316 名前:デフォルトの名無しさん mailto:sage [2020/06/05(金) 16:56:17.03 ID:S6jGROW/.net] >>314 CLI の外部コマンドは ※ 上で実行しますので、Start-Process で起動するのは あくまでも ※ です。ですので、引数として CLI の外部コマンドを指定するといいと思います。 こんなかんじですかね。 https://pastebin.com/NFDDXARP ※ コード内の文字列が5ちゃんの NG ワードになっていて書き込めないので、Pastebin にしました
317 名前:デフォルトの名無しさん [2020/06/05(金) 17:15:12.53 ID:O//h2yE5.net] 初心者です。 あるlogフアイルの1行目を新しいlogファイルに書き出し、 続けて同じlogファイルから特定の文字列で検索した結果を上書きしたいのですが、 具体的には Get-Content C:\test\stdout.log -totalcount 1 > C:\test\stdout_bk.log Select-String -Path C:\test\stdout.log -Pattern 2020/0 -Encoding default >> C:\test\stdout_bk.log こう書いてしまうとstdout_bk.log ファイルの2行目が改行してしまいます。 (3行目からSelect-String の結果がかき出される) stdout_bk.log ファイルの2行目からSelect-String の結果をかき出したいのですが どうすればいいでしょうか。また処理全体を2行に分けるのではなく できたら1行にまとめたいのですが、可能でしょうか。
318 名前:デフォルトの名無しさん [2020/06/05(金) 17:50:49.18 ID:Trob9zBU.net] >>316 これであってる? Get-Content C:\test\stdout.log | & { Begin { $header = $true } Process { if ($header) { $_; $header = $false } elseif ($_ -match '2020/0') { $_ } } > C:\test\stdout_bk.log
319 名前:デフォルトの名無しさん mailto:sage [2020/06/05(金) 17:53:48.63 ID:amrr7gLk.net] >>315 丁寧な解説ありがとうございます。しかしうまくいかない…。 ひょっとして外部コマンドになるので引数にPowerShellの変数を使用できないですか? こんな感じですが↓ Start-Process "一部省略" -ArgumentList ("/c","freacのパス","-e sndfile-wave -d $OutputDir $AacItem.FullName")
320 名前:デフォルトの名無しさん mailto:sage [2020/06/05(金) 18:06:39 ID:S6jGROW/.net] >>318 $AacItem.FullName を「"」で囲っても、$AacItem のプロパティ FullName は取り出せないです。 いろんなやり方があると思いますけど、私は「-f」を使うやり方が好みです。 Start-Process "一部省略" -ArgumentList ("/c","freacのパス",("-e sndfile-wave -d $OutputDir {0}" -f $AacItem.FullName)) でもこっちのほうが良さそうですね。 Start-Process "一部省略" -ArgumentList ("/c","freacのパス","-e","sndfile-wave","-d",$OutputDir,$AacItem.FullName)
321 名前:デフォルトの名無しさん mailto:sage [2020/06/05(金) 18:11:37 ID:S6jGROW/.net] >>318 $OutputDir や $AacItem.FullName にスペースが含まれてると失敗するかもしれませんので、その場合はこうでしょうか。 Start-Process "一部省略" -ArgumentList ("/c freacのパス -e sndfile-wave -d '{0}' '{1}'" -f $OutputDir,$AacItem.FullName)
322 名前:デフォルトの名無しさん [2020/06/05(金) 18:22:39 ID:O//h2yE5.net] >>317 }を1個つけると意図する結果が出力されました ありがとうございました。 復習します。
323 名前:デフォルトの名無しさん [2020/06/05(金) 18:52:19 ID:O//h2yE5.net] >>317 すみません、よろしければ少し解説いただけないでしょうか $_の使い方がいまいち理解できません。
324 名前:デフォルトの名無しさん [2020/06/05(金) 19:56:13.96 ID:amrr7gLk.net] >>319 3つとも試してみましたが、どれも正常に動きませんでした…。 一番上は何も処理せずpowershellが終了してしまい、2番めと3番めは黒いウインドウが一瞬表示されるものの freacは何も処理せず次に進んでしまいました。 {0}と-fは ttps://yanor.net/wiki/?PowerShell/%E6%96%87%E6%B3%95/%E6%96%87%E5%AD%97%E5%88%97%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E6%BC%94%E7%AE%97%E5%AD%90 ここの一番上で解説されているものでしょうか。
325 名前:デフォルトの名無しさん [2020/06/05(金) 20:50:39.26 ID:Trob9zBU.net] >>322 Processブロックでは $_ に各行が入ってくるので必要な時だけ出力しました $_の扱いはForEach-Objectと同じなので、そちらでたくさん例が見つかるでしょう >>323 Windows限定かもしれませんが、コマンドラインで prog arg1 arg2 arg3 と起動するプログラムならこれでいい気がします Start-Process "prog" -ArgumentList @('arg1 arg2 arg3')
326 名前:デフォルトの名無しさん [2020/06/05(金) 21:15:18.94 ID:Trob9zBU.net] 例をつけ忘れました。こんな感じ。 Start-Process 'pwsh' -ArgumentList @('-nop -c "1 .. 3 | % { $_; Start-Sleep 1 }"')
327 名前:デフォルトの名無しさん mailto:sage [2020/06/05(金) 21:44:06.19 ID:amrr7gLk.net] Start-Process "freacのパス" -ArgumentList @('-e sndfile-wave -d $OutputDir $AacItem.FullName') 単純にこれではダメでした。
328 名前:デフォルトの名無しさん [2020/06/05(金) 22:10:21.57 ID:Trob9zBU.net] そりゃもちろんこうしないと $args = '-e sndfile-wave -d {0} {1}' -f $OutputDir, $AacItem.FullName Start-Process "freacのパス" -ArgumentList @($args)
329 名前:デフォルトの名無しさん [2020/06/05(金) 22:12:15.54 ID:Trob9zBU.net] ってこれ >>320 に空白考慮版があるね
330 名前:デフォルトの名無しさん [2020/06/05(金) 22:17:17.85 ID:Trob9zBU.net] と思ったけど >>320 は必要ないcmd(?)経由に失敗してる?
331 名前:デフォルトの名無しさん mailto:sage [2020/06/05(金) 23:21:02.62 ID:C2qeZTUp.net] >>324 もう一つご教示ください。 header変数はどこで定義されている(という表現が適切か判りませんが)か教えていただけないでしょうか
332 名前:デフォルトの名無しさん mailto:sage [2020/06/05(金) 23:41:51.74 ID:e4Todh9J.net] >>317 の、Begin { $header = $true } Begin 節で、header という変数を定義して、初期値をtrue にしてるのでは?
333 名前:デフォルトの名無しさん mailto:sage [2020/06/05(金) 23:44:42.07 ID:C2qeZTUp.net] ありがとうございます。 理解できてない。無知をさらけ出してしまいました。
334 名前:デフォルトの名無しさん mailto:sage [2020/06/06(土) 00:12:58.72 ID:7YMZq5d4.net] >>312 @、つまり丸囲みの1 は、CP932 だけの環境依存文字だろ。 UTF-8 で使えるのかどうか、不明 ひょっとして、ファイル名に、半角英数字以外を使っているのか? ファイル名・ユーザー名みたいなシステムに、半角英数字以外を使ったら、ダメ!
335 名前:326 mailto:sage [2020/06/06(土) 00:36:27.86 ID:YeDbVwYY.net] >>372 すみません、それも結果は同じでした。 ここまで色々出していただいた記述例を全て試しても結果は同じで、cmdのウインドウは一瞬出るがfreacは何もせず終了という状態です。 プログラムに触るのが初めてというレベルの初心者で、ここで教えてもらったことを丸写しするくらいしかできないですか、 このままこの話題続けても大丈夫ですか? 大分長いこと占領していて申し訳ないのですが。
336 名前:デフォルトの名無しさん mailto:sage [2020/06/06(土) 01:43:36 ID:7YMZq5d4.net] Powershell で文字コードを変更する(clip.exe へのリダイレクトもね) https://www.vwnet.jp/Windows/PowerShell/CharCode.htm 「powershell 文字コード 変換」で検索! 本当は、込み入った処理は、Ruby でやって、 Powershell・コマンドプロンプトは、 起動部分だけの単純なものにすべき! こういうシェルで、ややこしいプログラミングは無理
337 名前:デフォルトの名無しさん mailto:sage [2020/06/06(土) 07:05:00.74 ID:+ifRGkAL.net] >>312 >>251-254 のバグとは別かな?
338 名前:デフォルトの名無しさん [2020/06/06(土) 07:07:30 ID:3KBpE/OI.net] >>334 ようするに $OutputDir = どこそこ foreach ($InputItem in $Args) { というループの中に $AacItemList = Get-ChildItem 以下略 foreach ($AacItem in $AacItemList) { というループがあって & $fawclPath $AacItem.FullName を書き換えて >>318 のようにしたいって理解であってますか? なら $args を書き換えて使っちゃだめですし、 Start-Process も -Wait を付けた方が良さそうなんで Start-Process 'freacのパス' -ArgumentList @('-e sndfile-wave -d "{0}" "{1}"' -f $OutputDir, $AacItem.FullName) -Wait じゃないかな
339 名前:デフォルトの名無しさん [2020/06/06(土) 07:08:59 ID:3KBpE/OI.net] >>336 それだ! でもPSReadLineなしでは不便過ぎる……
340 名前:デフォルトの名無しさん mailto:sage [2020/06/06(土) 09:15:40.96 ID:hmicP46W.net] PowerShellで多重ループが許されるのは小学生までだよね
341 名前:319 mailto:sage [2020/06/06(土) 09:23:51.93 ID:2MzuylRm.net] >>323 こちらでも freac を入手して試したところ、>>319 のとおりで動作してます。 私は以下のようにして実行してみました。freac は ZIP で配布されていたものです。 ※5ちゃんのNGワードに引っかかりまくって全く書き込みが出来ないため、コードは全て以下の Pastebin に記載しています https://pastebin.com/M5hD1HXj # パラメータ # 例1 実際に試したところ、freac は ※ 経由でなくても動作しますね。 # 例2 【切り分け】 Start-Process で外部
342 名前:の CLI コマンドを実行した場合、終了後にウィンドウが 閉じられるので切り分けが難しくなります。 そこで、「-NoNewWindow」オプションを付けて実行してみてください。 freac (又は※) が出力するエラーが、PowerShell のコンソールに表示されるはずです。 # 例3 # 例4 【-f について】 {0} と -f に関してはご指摘のとおりです。 [] [ここ壊れてます]
343 名前:デフォルトの名無しさん mailto:sage [2020/06/06(土) 10:08:38 ID:B/uunGh7.net] >>333 横レスだが、 > ?、つまり丸囲みの1 は、CP932 だけの環境依存文字だろ。 > UTF-8 で使えるのかどうか、不明 UTF-8というか、Unicodeには、一般的に使われている全ての 文字コードの全ての文字が含まれている。だから、Unicodeと呼ばれる。 > ひょっとして、ファイル名に、半角英数字以外を使っているのか? > ファイル名・ユーザー名みたいなシステムに、半角英数字以外を使ったら、ダメ! それはNEETの発想だ。職場の共有ファイル、取引先とやりとりする ファイル等、一般社会では、ガチガチにファイル名のルールが規定 されていて自分勝手に決められない場合が多いのだよ。
344 名前:デフォルトの名無しさん [2020/06/06(土) 10:17:39.94 ID:3KBpE/OI.net] >>340 端末設定を変えられて文字化けするから Start-Process させるんでしょ -NoNewWindow で端末共有させたらエラーメッセージも化けてるんじゃ…… Start-Process のパラメーターを画面出力して Start-Process せずに exit 出力されたパラメーターが正しいか確認……かな それをスレに貼ってもらえれば即解決な気がする
345 名前:319 mailto:sage [2020/06/06(土) 10:55:21.17 ID:2MzuylRm.net] >>323 すみません、これまでの Start-Process の例では「-Wait」オプションが抜けていました。 そのうえで、>>342 の指摘も考慮して以下の通り3パターンでテストしてみました。 https://pastebin.com/yG2WUtPP test1.ps1 Start-Process を使用するバージョン(-NoNewWindow 無し) test2.ps1 Start-Process を使用するバージョン(-NoNewWindow 有り) test3.ps1 オリジナルに近いバージョン(外部コマンドを「&」で実行)' 結果は以下の通りです。 https://i.imgur.com/b2tNZgy.png test1.ps1、test2.ps1 が動作するのは想定どおりなのですが、test3.ps1 でも文字化けしてないんですよね・・・。 これまで「外部コマンドを Start-Process で別ウィンドウで実行すれば文字化けしない」という前提で 話を進めてきましたが、まったく関係なかったかも知れません。
346 名前:デフォルトの名無しさん mailto:sage [2020/06/06(土) 11:30:16 ID:7wZTkIMZ.net] 外部コマンドの出力をpowershell側で触ったら文字化けするって話してるなら 最初にコンソール出力時のエンコーディング設定変えて $defaultEncoding,[Console]::OutputEncoding = [Console]::OutputEncoding,[Text.Encodi ng]::UTF8 最後に戻してやればいいんじゃない [console]::OutputEncoding = $defaultEncoding
347 名前:デフォルトの名無しさん [2020/06/06(土) 13:53:01 ID:3KBpE/OI.net] ちょっと話が脇にそれるんだけど…… あれ? >>311 を読んで「表示済みの文字まで化ける」謎現象だと思ってたけど 「正常表示できてた文字を、新しく出力すると化ける」だけなの? 化けるのがコンソールアプリの出力だけで、PowerShellのその後の出力は正常なら 端末の受け入れるエンコーディングが変更されただけかも 出力関係のエンコーディングは (a) コンソールアプリの出力を PowerShell がパイプなり代入なりで受け取る場合のエンコーディング (PowerShellが持ってる) (b) 端末が受け入れるエンコーディング (端末が持ってる) があって、PowerShell自身は勝手に(b)に合わせて出力するから化けない コンソールアプリの出力は、PowerShellに食われる時は、(a)なら正常、違えば化ける 食われず直接端末に出力する時は、(b)なら正常、違えば化ける コンソールアプリに(b)だけ変更されたのなら(a)に再設定すればいい [console]::OutputEncoding を設定すると(a)と(b)の両方が設定される (a)は [console]::OutputEncoding だから [console]::OutputEncoding = [console]::OutputEncoding すれば十分な気がする
348 名前:326 mailto:sage [2020/06/06(土) 13:53:57 ID:YeDbVwYY.net] 色々ありがとうございます。 まず結論ですが、>>344 さんの方法で文字化けは一応治りました。 ただ、最初の行に $defaultEncoding,[Console]::OutputEncoding = [Console]::OutputEncoding,[Text.Encodi ng]::UTF8 を記述すると [console]::OutputEncoding = $defaultEncoding が実行されるまで日本語が全て文字化けします。 なのでfreacが実行される行の上下をこれで挟むのが一応の解決方法でしょうか。 他の方々の書き込みですが、まずStart-Processに-waitをを付ける方法では完全に動作が停止して次の処理に進みませんでした。 >>340 さんの例3、4を試してみると、File Not Foundになります。 原因が気になるところではありますが、本末転倒なので>>344 さんの方法でとりあえず解決したことにします。ありがとうございました。
349 名前:デフォルトの名無しさん [2020/06/06(土) 16:15:55 ID:3KBpE/OI.net] [console]::OutputEncodingの退避・復元で解決できるなら 退避なんかせずに freac(?) の実行直後に [console]::OutputEncoding = [console]::OutputEncoding 入れるだけでいい気がするけど、もういいや
350 名前:デフォルトの名無しさん mailto:sage [2020/06/06(土) 17:37:53.88 ID:7YMZq5d4.net] 書き込み禁止ワードは、何かのコマンドだろ cmd.@exe, ls @-l 外人のアプリだから、アプリ内部で、文字コードをASCII に決め打ちしてるのかも。 でも、そのアプリは、起動したPowerShellが親だとすると、子プロセスになるから、 子プロセス内で環境を変えたとしても、親プロセスに伝播しないだろ 親プロセスで環境を指定したら、子プロセスにその環境は引き継がれるけど それかそのアプリは、文字コードをバイナリにしてるとかで、 データを受け取る方がテキストで受け取ると、文字化けするとか
351 名前:デフォルトの名無しさん mailto:sage [2020/06/06(土) 18:47:57.73 ID:2MzuylRm.net] >>344 それ良いですね、勉強になります。 「俺専用ナレッジベース」にメモしときました。
352 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 16:01:29.47 ID:DriXa/wG.net] rem ff.cmd @echo off setlocal cmd /k "pwsh -File ".\firefox-shutdown.ps1"" # firefox-shutdown.ps1 Start-Sleep -Seconds 10; Get-Command; Start-Sleep -Seconds 3; Get-Process firefox* | Stop-Process;
353 名前:デフォルトの名無しさん mailto:sage [2020/06/09(火) 16:26:23 ID:DriXa/wG.net] Start-Sleep -Seconds 10; mspaint "010371104.gif"; Start-Sleep -Seconds 3; Get-Process firefox* | Stop-Process;
354 名前:300 [2020/06/11(木) 17:55:09 ID:fJWIdGby.net] 教えてください。 ADユーザーの最新ログオン日時を取得したいです。 記述としては、 $Now = Get-Date -Format 'yyyyMMdd_hhmmss' $logPath = Join-Path -Path ([Environment]::GetFolderPath("Desktop")) -ChildPath ('{0}.csv' -f $Now ) $users = Get-ADUser -Filter * -SearchBase " OU=ユーザー,DC=test,DC=local " foreach ($user in $users) { Write-Host ('{0} : ' -f $user.SamAccountName) -NoNewline $grps = (Get-ADPrincipalGroupMembership -identity $user).name $line = '"{0}",' -f $user.SamAccountName $line = $line + ('"{0}",' -f $user.Enabled) $line = $line + ('"{0}",' -f $user.LastLogon) と思いましたが、最終ログオン日時を取得するのは LastLogonであっているでしょうか? また、最終ログイン日時の後にフルネームを取得したいときは、 $Now = Get-Date -Format 'yyyyMMdd_hhmmss' $logPath = Join-Path -Path ([Environment]::GetFolderPath("Desktop")) -ChildPath ('{0}.csv' -f $Now ) $users = Get-ADUser -Filter * -SearchBase " OU=ユーザー,DC=test,DC=local " foreach ($user in $users) { Write-Host ('{0} : ' -f $user.SamAccountName) -NoNewline $grps = (Get-ADPrincipalGroupMembership -identity $user).name $line = '"{0}",' -f $user.SamAccountName $line = $line + ('"{0}",' -f $user.Enabled) $line = $line + ('"{0}",' -f $user.LastLogon) $line = $line + ('"{0}",' -f $user.Fullname) となるでしょうか?
355 名前:デフォルトの名無しさん mailto:sage [2020/06/12(金) 09:35:33.43 ID:IRe5SA+Y.net] v6.2.6 https://github.com/PowerShell/PowerShell/releases/tag/v6.2.6 v7.0.2 https://github.com/PowerShell/PowerShell/releases/tag/v7.0.2
356 名前:デフォルトの名無しさん mailto:sage [2020/06/12(金) 10:07:01.73 ID:tUTXhBxn.net] >>352 Get-ADUser は、デフォルトでは一部のプロパティしか取得しません。"LastLogon" が必要な場合は -Properties で指定する必要があります。 $users = Get-ADUser -Filter * -SearchBase "OU=ユーザー,DC=test,DC=local" ↓ $users = Get-ADUser -Filter * -SearchBase "OU=ユーザー,DC=test,DC=local" -Properties 'LastLogon' さらに、LastLogon で取得される日時データはシリアル化されたものですのでヒューマンリーダブルに変換する必要があります。 $line = $line + ('"{0}",' -f $user.LastLogon) ↓ $date = [DateTime]::FromFileTime($user.LastLogon) $line = $line + ('"{0}",' -f $date.ToString("yyyy/MM/dd HH:mm:ss")) 「フルネーム」ですが、プロパティとしては Name が該当するものになります。 $line = $line + ('"{0}",' -f $user.Fullname) ↓ $line = $line + ('"{0}",' -f $user.Name)
357 名前:354 mailto:sage [2020/06/12(金) 10:07:36.18 ID:tUTXhBxn.net] まとめるとこうです(ファイル書き出しの部分は省略)。 $users = Get-ADUser -Filter * -SearchBase "OU=ユーザー,DC=test,DC=local" -Properties 'LastLogon' foreach ($user in $users) { Write-Host ('{0} : ' -f $user.SamAccountName) -NoNewline $grps = (Get-ADPrincipalGroupMembership -identity $user).name $line = '"{0}",' -f $user.SamAccountName $line = $line + ('"{0}",' -f $user.Enabled) $line = $line + ('"{0}",' -f $user.Name) $date = [DateTime]::FromFileTime($user.LastLogon) $line = $line + ('"{0}",' -f $date.ToString("yyyy/MM/dd HH:mm:ss")) Write-Host $line }
358 名前:354 mailto:sage [2020/06/12(金) 10:09:03.73 ID:tUTXhBxn.net] ただし、私自身も 10 年くらい前に AD の情報から LastLogon を取得することを検証したのですが、以下の理由から断念しました。 ・LastLogon のデータは各ドメコンが個別に保持しているデータなので、ドメコンが複数ある場合は各ドメコンごとに値が異なる (各クライアントが認証要求を行ったドメコンでしか更新されず、各ドメコン間で同期されない) ・ユーザが PC でログオンしたタイミング以外でも、LastLogon は更新される (ログオフや長時間離席していた場合など) 正確なログオン日時が取りたい場合は、各クライアント上で取得する必要があります。イベントログを見れば分かります。 私は結局、ファイルサーバのテキストファイルにログオン日時とユーザ名を書き込むログオンスクリプトを作成したと記憶しています。
359 名前:354 mailto:sage [2020/06/12(金) 10:22:05.71 ID:tUTXhBxn.net] 追伸。 >・LastLogon のデータは各ドメコンが個別に保持しているデータなので、ドメコンが複数ある場合は各ドメコンごとに値が異なる 全てのドメコンから値を取得して、最も値の大きいものを採用する、というやり方も出来ます。 それでも、LastLogon がログオン操作以外でも更新されてしまうことには変わりませんので、確実に実行するならやはりログオンスクリプトをおすすめします。
360 名前:デフォルトの名無しさん mailto:sage [2020/06/12(金) 16:10:21.89 ID:6Yfh5mGy.net] Power Shellってアプリケーション作れんですか?
361 名前:デフォルトの名無しさん mailto:sage [2020/06/12(金) 18:18:25.00 ID:Jkz+gOtE.net] アプリケーションって何?
362 名前:デフォルトの名無しさん mailto:sage [2020/06/12(金) 18:44:27.27 ID:/dqGhWwV.net] >>358 普通に作れるよ GUIもWPF使えるし
363 名前:デフォルトの名無しさん mailto:sage [2020/06/12(金) 18:45:58.91 ID:gCbNSmDh.net] window表示するイベントドリブンなexeのことじゃないかな
364 名前:デフォルトの名無しさん [2020/06/12(金) 18:55:49.90 ID:tr06rVi2.net] もうそれ最初からC#でやれば良くね?っていう
365 名前:デフォルトの名無しさん mailto:sage [2020/06/12(金) 19:42:03.65 ID:sTuFS1ZK.net] 大部分C#で書いてパワシェで書きやすい部分だけデリゲートでインジェクションするパターンなら多用しとるわ
366 名前:デフォルトの名無しさん mailto:sage [2020/06/12(金) 20:21:21.09 ID:6LTYSgwt.net] ただのコマンドプロンプトだと思ってた スゲーワケわからん
367 名前:デフォルトの名無しさん mailto:sage [2020/06/12(金) 20:53:03.96 ID:tSkvENox.net] オブジェクト指向シェル言語だからな
368 名前:300 [2020/06/14(日) 00:11:44.27 ID:JXZUsp2d.net] >>354 ありがとうございます! 検証環境で無事出力確認できました! しかし最終ログイン日時の取得は難しいんですね。 今回はそれほど精密な値は求められないので良かったですが、 ドメコンには注意なんですね。
369 名前:デフォルトの名無しさん mailto:sage [2020/06/15(月) 19:20:43.36 ID:KO8t20+1.net] ドメコンにリアルタイム性は期待できないと思ったがやっぱそうだよな
370 名前:デフォルトの名無しさん [2020/06/16(火) 08:27:08.93 ID:flP7FZNr.net] LastLogin を各DCから拾って最新値を取り出すスクリプトあったよ https://gallery.technet.microsoft.com/scriptcenter/Get-Last-Logon-for-Users-c8e3eab2
371 名前:デフォルトの名無しさん [2020/06/16(火) 11:32:29.65 ID:r0rBA9XG.net] コマンドプロンプトでecho a b cを実行すると出力結果は a b c PowerShellでecho a b cを実行すると a b c なのはなんで? エラーにもならずにbやcはどう扱われてるの?
372 名前:デフォルトの名無しさん [2020/06/16(火) 11:55:26.03 ID:dJYiaODe.net] echo a b c とかやってみれば、以下にcmdがクソかよくわかると思うよ。
373 名前:デフォルトの名無しさん [2020/06/16(火) 11:56:36.32 ID:dJYiaODe.net] あ、間のスペースも消えてなくなるのか。 echo___a_____b____c _をスペースに。
374 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 12:32:39 ID:0Yfa1k+l.net] いやいやいや 引数なんだから当然だろ あとは出力で改行するかどうかだけじゃん
375 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 12:44:08.30 ID:zfRgO9so.net] echo "a b c" " " で囲えば、a b c と表示される
376 名前:デフォルトの名無しさん [2020/06/16(火) 12:53:01.50 ID:r0rBA9XG.net] 聞きたいのはそういう類じゃないんだな echo (=Write-Output) のSyntaxが Write-Output [-InputObject] <PSObject> [-NoEnumerate] [<CommonParameters>] だからa が-InputObjectの<PSObject>になるのはわかる bやcはどういう理屈で処理されるの?
377 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 14:16:42.05 ID:PL2rwu//.net] >>374 echo a b c は echo @('a', 'b', 'c') と同じ扱いとするように実装されてるんでしょ
378 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 14:40:34.28 ID:p9YvTGLE.net] まあ調べた374がpowershellの引数展開についてまとめて分かりやすく報告してくれるでしょ
379 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 14:48:49.11 ID:C/0BZ8DU.net] MSの説明では、正確には [-InputObject] <PSObject[]> となってる
380 名前:デフォルトの名無しさん [2020/06/16(火) 16:42:16.77 ID:r0rBA9XG.net] del a b cはちゃんとエラーになる さっぱりわからん😩
381 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 17:12:01.69 ID:MVe0R048.net] Write-Outputの-InputObjectパラメータにはValueFromRemainingArguments属性がついてるから その場合はパラメータ名が明示されてないものはすべてInputObjectにバインドされるんよ 確認はしずらいけど以下で確認できる (Get-Command Write-Output).ParameterSets[0].Parameters | where name -eq InputObject まああんまりこの属性ついてるのはないからecho とかWrite-Hostあたりはこうなってるくらいの認識でいいよ PowerShell7だとJoin-Pathもこの属性がついてる
382 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 17:24:04.82 ID:8ZMUuPb8.net] echoの引数がUNIXとかだとアレだよ
383 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 17:25:39.53 ID:MVe0R048.net] >>379 訂正:パラメータ名が明示されてないものでポジショナルバインディングもできないもの
384 名前:デフォルトの名無しさん [2020/06/16(火) 17:45:58 ID:r0rBA9XG.net] なるほど ありがとう
385 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 19:16:29.09 ID:bkoiHKSB.net] PowerShellの起動がなんか凄いモタつくんだけどおまかん? Windows10Home PS7.01 スクリプト書いて渡しても、 何も出ない黒い画面がしばらく出て怖がられたり、何個も起動されたりするし
386 名前:デフォルトの名無しさん mailto:sase [2020/06/16(火) 21:23:47.76 ID:aR46ypRq.net] >>251 ,312 右クリックじゃなくてCtrl+Vではどう?
387 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 22:43:53.36 ID:Tk9CpyzQ.net] cmd -L 9875 shinjyuku Tokyo Japan の1列目を1行で変数に格納したいのですが、方法がわかりません。 $work=(cmd -L | Select-String "shinjyuku" ) $id=$work -split " " Write-Output $work[1] これを1行で書ける方法を教えてください。 よろしくお願いいたします。
388 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 23:40:23 ID:n71ojSL1.net] cmd -Lが何なのか判らないのでcmd /c echoの例で (cmd /c echo 9875 shinjyuku Tokyo Japan | %{ $_ -split " " })[0]
389 名前:デフォルトの名無しさん mailto:sage [2020/06/16(火) 23:41:31 ID:n71ojSL1.net] 忘れてた頭に$id=付けてね
390 名前:デフォルトの名無しさん mailto:sage [2020/06/17(水) 07:40:39.83 ID:0yXiYm7U.net] >>386 ありがとうございます 特に隠すようなコマンドでもなかったのですが、 インターネット速度の自動計測スクリプトを作ってみようとしてます .>\speedtest.exe -L | select-string 'OPEN Project \(via 20G SINET\)' 15047 OPEN Project (via 20G SINET) Tokyo Japan > $i=(.\speedtest.exe -L | select-string 'OPEN Project \(via 20G SINET\)' | %{$_ -split ' '}[0]) > Write-Output $i[1] 15047
391 名前:デフォルトの名無しさん mailto:sage [2020/06/17(水) 07:50:00.92 ID:PujUJ59z.net] cmd .exeに-Lオプションがあるのかと思った人は俺以外にもたくさんいるはず
392 名前:デフォルトの名無しさん mailto:sage [2020/06/17(水) 08:00:55.98 ID:H0Dcbe9T.net] VSCode で、PowerShell の拡張機能を入れると、構文チェックで、 Write-Host を、Write-Output か、Write-Verbose に変えろって警告される PowerShell/PSScriptAnalyzer https://github.com/PowerShell/PSScriptAnalyzer/blob/master/RuleDocumentation/AvoidUsingWriteHost.md
393 名前:デフォルトの名無しさん mailto:sage [2020/06/17(水) 08:04:57.13 ID:H0Dcbe9T.net] 漏れは回線速度を、NETFLIX で測っている https://fast.com/ja/
394 名前:デフォルトの名無しさん mailto:sage [2020/06/17(水) 10:09:26.78 ID:U7B7s7qz.net] >>388 (.\speedtest.exe -L | select-string 'OPEN Project \(via 20G SINET\)' | %{$_ -split ' '}[0])[1]
395 名前:392 mailto:sage [2020/06/17(水) 10:13:28.30 ID:U7B7s7qz.net] >>388 あれ、speedtest.exe の「-L」って、ネットワーク的に近い場所のサーバを 表示するだけで、実際の計測はしてないようですけど、これで良いんですか? >>388 の続きがある、ってことですかね。
396 名前:392 mailto:sage [2020/06/17(水) 10:21:19.19 ID:U7B7s7qz.net] >>388 タスクスケジューラで回すことを考えてるのかも知れませんが、単に .\speedtest.exe -s 6766 とか .\speedtest.exe -s 15047 といった感じにしないのはなぜですか? speedtest.exe -L を実行する意図がよく分かりません。
397 名前:392 mailto:sage [2020/06/17(水) 10:29:32.27 ID:U7B7s7qz.net] >>388 連投ごめんなさい、speedtest.exe は出力形式を CSV とか JSON とか色々 選べますので、ヒューマンリーダブルのものを加工するよりもそっちのほうが 簡単だと思います。 実行例:近隣サーバの列挙 PS > .\speedtest.exe -L -f csv "ID","Name","Location","Country","Host" "24333","Rakuten Mobile , Inc","Tokyo","Japan","ookla.mbspeed.net" "15047","OPEN Project (via 20G SINET)","Tokyo","Japan","speed.open.ad.jp" "28910","fdcservers.net","Tokyo","Japan","lg-tok.fdcservers.net" 〜以下略〜 実行例:サーバを指定した計測 PS > .\speedtest.exe -s 15047 -f csv "OPEN Project (via 20G SINET) - Tokyo","15047","4.43","0.605","0","72540509","45781634","871440390","582254568","https://www.speedtest.net/result/c/e998102d-d04a-4258-9aae-6dd3afbbf323"
398 名前:デフォルトの名無しさん mailto:sage [2020/06/17(水) 15:45:25.40 ID:UcA8Gcsf.net] ジョブをパイプの途中で使いたいと考えています 1 .. 3 | % { $_; sleep 1 } | & { process { ">$_" }} これは1秒間隔で結果が出ます Start-Job { 1 .. 3 | % { $_; sleep 1} } | Receive-Job -wait これも1秒間隔で結果が出ます 1 .. 3 | % { $_; sleep 1 } | Start-Job { process { ">$_" }} | Receive-Job -wait これは結果がまとめて出ます 1秒間隔で結果を得るにはどうすれば良いのでしょうか # パイプラインで入出力がsjisのコマンドとutf8のコマンドを通すのが最終目的です # データ生成 | sjis入出力 | utf8入出力 みたいなイメージ # パイプラインでエンコーディングを混在させるのに$OutputEncodingの方は # スコープで分ければすみますが、[console]::OutputEncodingはスコープ無関係 # なのでジョブで分けようかと
399 名前:デフォルトの名無しさん mailto:sage [2020/06/17(水) 16:28:19.33 ID:pLBooGKC.net] なんでワンライナーでやる必要があるのかね、こういうの 保守とか考えないのかね
400 名前:デフォルトの名無しさん mailto:sage [2020/06/17(水) 16:55:10.36 ID:/58stVp5.net] パイプの弊害か
401 名前:デフォルトの名無しさん mailto:sage [2020/06/17(水) 17:44:32.75 ID:UcA8Gcsf.net] >>397 コマンドラインで結果をすぐに見たいからですね ページャーにつないで欲しい結果が出てきたら確認して終了 ステップごとに完了待ちしてたら時間がもったいない
402 名前:デフォルトの名無しさん [2020/06/17(水) 23:59:11.03 ID:H0Dcbe9T.net] >>396 >1 .. 3 | % { $_; sleep 1 } | Start-Job { process { ">$_" }} | Receive-Job -wait 1 .. 3 | % { $_; sleep 1 } この部分を、Start-Job の中に入れたら?
403 名前:デフォルトの名無しさん mailto:sage [2020/06/18(木) 05:52:46 ID:7bz/apiR.net] $ary_names = @('太郎','次郎','三郎','四朗','五郎') write-output $ary_name[@] #bashの記法 太郎,次郎,三郎,四朗,五郎 的なことをしたい。※区切り文字はなんでも可。 現状、配列に文字列をくっつけると1行で出るので write-output ("a"+$aaa).trim("a") という強引な方法をとっております。もっとPowershell的にスマートな方法があれば お教えくださいませ。
404 名前:デフォルトの名無しさん mailto:sage [2020/06/18(木) 06:58:53 ID:3wPjj0xg.net] $ary_names -join ','
405 名前:デフォルトの名無しさん mailto:sage [2020/06/18(木) 07:18:11.97 ID:7bz/apiR.net] >>402 ありがとうございます!
406 名前:デフォルトの名無しさん mailto:sage [2020/06/18(木) 09:01:24.17 ID:hwvpLd3O.net] >>400 それだと最終目的のためにはStart-Jobの入れ子が必要になるなあ 制御不能になりそうだし面倒なので避けたい cmd.exeを使うことにします
407 名前:デフォルトの名無しさん [2020/06/19(金) 06:41:17 ID:RNyMoV2a.net] $s=[datetime]::Now; 1 .. 5 | ForEach-Object { Start-Sleep 1; ">{0}" -f $_ } | ForEach-Object { Start-Sleep 1; ">{0} {1}" -f $_, ([datetime]::Now - $s).TotalSeconds} 2秒間隔、トータル10秒という結果に困惑している
408 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 07:30:31.94 ID:JIIBGf6G.net] >>405 二重ループを期待してたってこと?
409 名前:405 [2020/06/19(金) 08:42:12.76 ID:RNyMoV2a.net] 最初は2秒、それから1秒間隔でトータル6秒だと思ってた 1秒待ちをStart-Sleepでなく別のプロセスで待たせても変わらなかった
410 名前:デフォルトの名無しさん [2020/06/19(金) 08:51:47 ID:GhHOGZr1.net] パイプつなぎはいわゆるgenerator(PowerShellでの呼び方は知らない)になるってことかな?
411 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 08:52:39 ID:JIIBGf6G.net] 1に対して最初のfor-eachの中身処理した後に次のfor-eachの中身処理。 2に対して... 3に対して... 4に対して... 5に対して... ふたつのfor-eachの中身がどういう順に処理されてるか確認できるように表示を工夫してみたら?
412 名前:405 [2020/06/19(金) 09:08:23.61 ID:RNyMoV2a.net] そこはなんとなくイメージできたんでもういい パイプラインの各段を別のプロセスにすると6秒で終了する 同じように6秒で終了すると思ってたら違ったんで戸惑ったというお話
413 名前:405 [2020/06/19(金) 11:12:17.79 ID:RNyMoV2a.net] $s=[datetime]::Now; 1 .. 5 | Start-ThreadJob { process { Start-Sleep 1; ">${0}" -f $_ }} | Receive-Job -Wait -AutoRemoveJob | ForEach-Object { Start-Sleep 1; ">{0} {1}" -f $_, ([datetime]::Now - $s).TotalSeconds} 別スレッドを指定したらトータル6秒になった 一人研究発表会になっちまったな。すまぬ。
414 名前:405 [2020/06/19(金) 11:40:12.67 ID:RNyMoV2a.net] よく見たら結果がおかしい。お手上げだ。諦めた。
415 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 17:20:54 ID:qQd5c1Zr.net] >>397 おまえはpythonでもつかってろ
416 名前:デフォルトの名無しさん mailto:sage [2020/06/19(金) 18:23:41.02 ID:OOcqKGQK.net] ラクダが笑ってんぞ
417 名前:405 [2020/06/19(金) 21:01:31.39 ID:RNyMoV2a.net] できたーーーー $s=[datetime]::Now; 1 .. 5 | ForEach-Object { Start-Sleep 1; ">{0}" -f $_ } | ForEach-Object { Start-Sleep 1; ">{0} {1}" -f $_, ([datetime]::Now - $s).TotalSeconds} にちょい足しして $s=[datetime]::Now; 1 .. 5 | ForEach-Object -Parallel { Start-Sleep 1; ">{0}" -f $_ } -ThrottleLimit 1 | ForEach-Object { Start-Sleep 1; ">{0} {1}" -f $_, ([datetime]::Now - $s).TotalSeconds} にしたらStart-ThreadJobを使った時より遅いけど簡単に予想してた結果になった お騒がせしました
418 名前:405 [2020/06/19(金) 21:15:58.78 ID:RNyMoV2a.net] こ、今度こそできたー $s=[datetime]::Now; 1 .. 5 | Start-ThreadJob { $input | ForEach-Object {Start-Sleep 1; ">{0}" -f $_ }} | Receive-Job -Wait -AutoRemoveJob | ForEach-Object { Start-Sleep 1; ">{0} {1}" -f $_, ([datetime]::Now - $s).TotalSeconds} やっぱりこれが最終版ということにしたい お邪魔しました
419 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 00:50:50.12 ID:na6pkPqz.net] はいつぎ
420 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 08:11:14.95 ID:wKnheY+E.net] Powershellを使いこなすにはcomを知らなければならないと聞いたのですが、 comについてはどうやって学ぶのがオススメですか? ググラビリティの悪い単語なので、 思うように検索できません Excellの機能を使ってあれこれしたいです
421 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 09:03:13.32 ID:5oXecify.net] COM の使い方 https://docs.microsoft.com/ja-jp/previous-versions/direct-x/cc351700(v=msdn.10)
422 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 11:29:31 ID:XppcwtFP.net] Powershellを使い始めました 皆さん、こんなの全部覚えてるんですか? どうやって覚えました? ファイル開いて書き込むだけで こんなにもたくさん覚えないといけないって 大変だったんじゃないですか? $output_file = "C:\bin\hoge.txt" $sw = New-Object System.IO.StreamWriter($output_file, $false, [Text.Encoding]::GetEncoding("UTF-8")) $sw.WriteLine("aaa") $sw.WriteLine("あああ") $sw.Close() $sw.WriteLine("あああ") $sw.Close() この辺はまだ、覚えられるのですが、 New-Object System.IO.StreamWriter←InputOutputを、ストリームにライトするんだろうな $output_file, $false, ←ファイル名と、追記、上書を指定するんだろうな。 [Text.Encoding]:: ←なんで[]包むんだ、:: ←このダブルのコロンは何だ、 GetEncoding("UTF-8")) ←何でファイル作ってるのにGetなんだ、 単純に $mojiko-do="UTF-8"で New-Object System.IO.StreamWriter($output_file, $false,$mojiko-do)じゃないんだと、 覚えることや、なぜこうなってるんだに少々ビビってます。 皆さんが、どうやってこんなに複雑で面倒なものを覚えたか、コツがあったら教えてください。
423 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 11:33:23 ID:XppcwtFP.net] ほかにも、メソッド、プロパティ?クラス?で書き方がものすごいたくさんあるようで、めまいがします。 覚えれば仕事が楽になることは分かっているので、頑張りたいところなんですが あまりの複雑さに、皆さんがどうやって覚えたのか、コツがあればぜひともお教えください。
424 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 11:46:07.33 ID:6HpZ1NhN.net] 良くも悪くも.NETが前提だから 先にC#を覚えるのがコツかな
425 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 12:28:41.13 ID:sltMp+ny.net] コード量が多いってことと覚えなきゃいけない知識量は必ずしも一致しないからな Perlみたいに省略できまくるワンライナーのほうがスパゲティったときわけ分からなくなる
426 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 12:29:17.17 ID:dcvMDCGE.net] とにかく書いて動かす やってみる、作ってみる 国語力、英語力は少しつけようとする
427 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 12:31:14.10 ID:E6EedD+K.net] .NETなんて前提にしなくてもマルチプラットフォームで使える文法を身につけるのが先
428 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 13:13:11.69 ID:w0A+CU3q.net] >>420 ファイルに書き込むだけならコマンドレットで足りる 痒い所に手が届かない時にググりながら.NETをボチボチ使って行けば良い
429 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 13:13:46.53 ID:F3e6GYXo.net] 正直言ってPowerShellは覚える必要ない スクリプトファイルを作って使うならC#を使うのと大差ない それならC#を覚えて使う方がいい コマンドラインシェルとして使うなら.NETやらCOMやら取り込む使い方は 何かあった時にシェルが巻きぞえになって、シェルを殺すしかなくなる そうならない程度に言語自体の機能だけで使うなら、とりたて覚えるほどでもない
430 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 13:42:16.03 ID:dcvMDCGE.net] 本番環境その場で場当たり的にコマンド打つのはあり得ないしな まあすごくユルい会社なら知らんが
431 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 13:50:27.59 ID:zwBEwaPL.net] >>420 その書き方は.NETライブラリを使っているのでPowershellの初歩の枠を越えてる 追記するだけならこう $output_file = "C:\bin\hoge.txt" "aaa" | Out-File $output_file -Append -Encoding UTF8 "あああ" | Out-File $output_file -Append -Encoding UTF8 こうしてもいい "aaa", "あああ" | Out-File $output_file -Append -Encoding UTF8 UTF16でいいならこれ "aaa", "あああ" >> $output_file Powershell 5以前には欠陥があって、BOMなしUTF8を新規作成する簡単な手段がなかった だからStreamWriterを持ち出すようなサンプルが普及していて、初歩のはずなのに難しいと感じる要因になってる
432 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 14:13:22.51 ID:Xz+FX1Oy.net] 必要はないけど覚えたら便利
433 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 14:35:58.75 ID:YZMPfrl8.net] 最初から暗記する必要はなくて、機能を一覧表にしておいて 必要に応じてそれを参照、コピペすればいい 出現頻度の高いものは自然と覚える いずれにしても手打ちするのは時間の無駄なので コピペ推奨
434 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 16:51:19.56 ID:KBDfWM5t.net] 習得してない人達のアドバイスは聞く必要がない あっだからできないんだっていう見本にはなるけど
435 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 16:58:42.46 ID:py+iqQxS.net] 俺以外のアドバイスは聞く必要がない
436 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 17:35:07.43 ID:6sC7z1nS.net] >>420 >コツがあったら教えてください。 PowerShell に限った話じゃないけど、学校の授業みたいに「勉強ありき」で 努力するよりも、「これをやるためには PowerShell を使うしか無い」という 状況に追い込まれると覚えやすいですね。 あと、積極的に英語のフォーラムなどから情報を得るようにしたほうが良いと思います。 やはり、日本語と英語では情報量が雲泥の差ですので。 Google 翻訳を使えば何とかなります。
437 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 20:10:35.90 ID:WPfafdOl.net] >>434 > 「これをやるためには PowerShell を使うしか無い」という状況 そんな状況は、普通は無い。 あるとすれば、>>428 が言った > 本番環境その場で場当たり的にコマンド打つ ぐらい。
438 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 23:24:31.04 ID:tXS4Zxv6.net] PowerShell(PS)で、ビジネスロジック・複雑なものを書いたら、ダメ! 基本的に、CSV・JSON などは、Ruby で書いて、 起動部分だけを、コマンドプロンプト・PS・VBS などで作る
439 名前:デフォルトの名無しさん mailto:sage [2020/06/20(土) 23:38:30.06 ID:sltMp+ny.net] Pythonにしてくれ頼む
440 名前:デフォルトの名無しさん mailto:sage [2020/06/21(日) 08:39:56.92 ID:PKUYu7rs.net] >>435 >そんな状況は、普通は無い。 仕事で MS のエンタープライズ系製品を扱ってると、嫌というほど そういう状況に遭遇しますね。 Windows Server, Exchange, SQL Server, Office 365 あたりの 設計、構築、運用に携わってれば日常茶飯事です。 そういう仕事に携わるようになってから PowerShell を覚えた、って人が 多いと思ったけど、そうでもないのかな?プログラム板だから違うのかな?
441 名前:デフォルトの名無しさん mailto:sage [2020/06/22(月) 18:21:34.75 ID:njZ7JPCW.net] >>0438 君は正常。
442 名前:デフォルトの名無しさん [2020/06/24(水) 07:34:20.49 ID:9MFoHisW.net] コマンドプロンプトでバッチを作るとちょっとした自動化に便利というのを最近知って調べたら 今はPowerShellCoreが現行とたどり着いたが やっぱり移行するしないで揉めてる
443 名前:436 mailto:sage [2020/06/24(水) 08:08:25.26 ID:rM4tv+8j.net] さすがに、バッチでプログラミングしてはいけない! 可読性が低すぎる Ruby スクリプトなどを起動するだけにしておくべき
444 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 08:40:10 ID:L+v/qVAN.net] >>440 用途・要件次第。 業務利用という前提だけど、自分だったらこういうポリシーで緩やかに移行する。 ・既存の cmd バッチや WSF、VBS → 基本的には移行(移植)しない ※例外:改修が必要になった場合は個別対応 ・新規 → 基本的には PowerShell で作るべき ※例外:極々単純なもの、自分だけが使い捨てするもの
445 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 08:44:24 ID:/txx2vwO.net] 可読性w 可読性に煩いやつ程低レベルだよね 三項演算子とか
446 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 09:05:28.99 ID:W7e3ICMc.net] >>441 お前はRuby禁止のスレでRubyでは〜Rubyでは〜とやるのをやめろ。ノイズにしかならない糞レスはスレの可読性を下げるだけだ。
447 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 09:51:09 ID:LpqCs0qI.net] 440で思い出したけど、powershell coreって今どうなってるんや 自分は実行環境としては5.1をメインで使ってるけど、みんなどこら辺なんや
448 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 10:09:13.32 ID:wIzfCOgT.net] win10プレインストールしか使っとらんわ というかツール勝手に入れられない客先環境で戦うためのツールって認識
449 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 10:48:39.06 ID:oYgVDO6A.net] >>446 > ツール勝手に入れられない客先環境で戦うためのツール ほんそれ。 いまメインでやってる案件だと、お客さんから貸与されてる作業用 PC があって、 お客さんの環境にはそのマシンしか繋げられない。もちろん、世に数多とある便利ツールを 好き勝手に入れることは出来ない。 でも PowerCLI などの PowerShell モジュールのインストールは純正管理ツール扱いで 許可されてるので、構築とか保守作業では PowerShell スクリプトを使いまくってる。 いちいちマウスでカッチンカッチンやってたら、日が暮れちゃうからね・・・。
450 名前:デフォルトの名無しさん [2020/06/24(水) 12:17:32.10 ID:9MFoHisW.net] >>442 なるほど。 どうも。
451 名前:デフォルトの名無しさん [2020/06/24(水) 21:01:47.98 ID:jVaXlMW4.net] scriptblock[] を受け取って、scriptblockをそれぞれスレッドで動かして パイプでつないで実行するfunctionを書きたいんだがうまく書けない ようするに $s = [datetime]::Now 1 .. 10 | % { sleep 1; ">$_" } | % { sleep 1; ">$_" } | % { sleep 1; ">{0} {1} " -f $_, ([datetime]::Now - $s).TotalSeconds } を実行すると >>>1 3.1179897 >>>2 6.1354357 >>>3 9.1403334 >>>4 12.1434852 と3秒間隔で結果が出るんで $s = [datetime]::Now threadedpipe @( { 1 .. 10 }, { % { sleep 1; ">$_" } }, { % { sleep 1; ">$_" } }, { % { sleep 1; ">{0} {1} " -f $_, ([datetime]::Now - $using:s).TotalSeconds }}) みたいに書いて、最初が3秒目で1秒間隔で結果出力したい いろいろ試して諦めたんだが、そもそもPowerShellではこういうfunctionは書けないの?
452 名前:デフォルトの名無しさん mailto:sage [2020/06/24(水) 22:06:24.12 ID:VGKuFIs7.net] powershellのコマンドはプロセス作らないから無理じゃね マルチスレッドをそんなお手軽に制御できたら夢みたいだけど
453 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 00:26:33.50 ID:GAspYPHa.net] あれでもForeach-object あたりにparallelこなかったっけ
454 名前:デフォルトの名無しさん [2020/06/25(木) 00:40:28.26 ID:BtDpxRK3.net] 並列に動かすってことは普通にやれば1秒間隔じゃなくてほぼ同時に出力されることになる どういう意図なのかはわからないけど無理やりやるんなら入力側で一秒ずつ待ってやるか $sw = [Diagnostics.Stopwatch]::StartNew() 1..10 | % { ">$_"; sleep 1 } | % -pa { sleep 1; ">$_" } | % -pa { sleep 1; ">$_" } | % { "{0} {1:F2} " -f $_, $sw.Elapsed.TotalSeconds } もしくは出力側で一秒ずつ待ってやるか 1..10 | % -pa { sleep 1; ">$_" } | % -pa { sleep 1; ">$_" } | % { sleep 1; "{0} {1:F2} " -f $_, $sw.Elapsed.TotalSeconds }
455 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 00:44:41.05 ID:LTqYJW83.net] シェルスクリプトみたいに各プロセスが並列的に流れてくるテキストを処理して… みたいのをやりたいのかなと推測してる
456 名前:デフォルトの名無しさん [2020/06/25(木) 08:46:34.24 ID:L3VdfOGw.net] そうそうそういうこと イメージとしては https://ja.wikipedia.org/wiki/命令パイプライン パイプラインのステージごとに1スレッド起動して全データで使いまわしたい 4ステージのパイプラインなら4スレッドで動かす ForEach-Object の -Parallel はデータごとにスレッドを起動するから別物 スレッドプールで使いまわすにしてもちょっと違う ちなみに sleep させてるけど時間がかかる処理の代用ね
457 名前:デフォルトの名無しさん [2020/06/25(木) 08:53:56.13 ID:L3VdfOGw.net] こっちの方がイメージが近いかも https://ja.wikipedia.org/wiki/パイプ_(コンピュータ)
458 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 09:37:48.10 ID:piKX+XZq.net] 普通にワンライナー諦めれば次の作業にすすめるんじゃない?
459 名前:デフォルトの名無しさん [2020/06/25(木) 09:50:30.28 ID:L3VdfOGw.net] ワンライナーなんか関係ないんだけど 原理は >>416 にあるから、それを簡単に実現できるように function threadedpipe { param([scriptblock[]] $sbs) を書きたいと言ってる
460 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 09:56:30.77 ID:1+fg5ofc.net] あぁまたこいつだったか
461 名前:デフォルトの名無しさん [2020/06/25(木) 10:49:27.00 ID:dZiolc11.net] >パイプラインのステージごとに1スレッド起動して全データで使いまわしたい これが根本的に間違ってるだろ。 パイプで連結するってことは、前後(依存)関係があるってことで、それぞれをスレッド分割したところで全く意味がない。
462 名前:デフォルトの名無しさん [2020/06/25(木) 11:16:02.92 ID:L3VdfOGw.net] 何言ってんの? パイプラインってものをわかってない これスクリプトファイルにして試してみ function recvdata { foreach ($i in 1 .. 10) { sleep 1; $i }} filter mul10 { sleep 1; $_ * 10 } filter add1 { sleep 1; $_ + 1 } filter fmtresult { "{0} {1}" -f $_, ([datetime]::Now - $script:s).TotalSeconds } "スレッドなし" $s = [datetime]::Now recvdata | mul10 | add1 | fmtresult "ステージごとに別スレッド" $s = [datetime]::Now Start-ThreadJob { filter add1 { sleep 1; $_ + 1 } Start-ThreadJob { filter mul10 { sleep 1; $_ * 10 } Start-ThreadJob { function recvdata { foreach ($i in 1 .. 10) { sleep 1; $i }} recvdata } | Receive-Job -Wait -AutoRemoveJob | mul10 } | Receive-Job -Wait -AutoRemoveJob | add1 } | Receive-Job -Wait -AutoRemoveJob | fmtresult
463 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 11:35:16.74 ID:emOdy//g.net] きたない
464 名前:デフォルトの名無しさん [2020/06/25(木) 11:41:54.06 ID:L3VdfOGw.net] んだからfunction threadedpipeを作って見やすくしたいっつってんだろ
465 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 12:35:03.44 ID:WfI766VN.net] そこじゃないだろ
466 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 13:13:44.27 ID:sZY/v5D+.net] >>462 単に興味本位で聞くんだけど、差し支えなかったら教えて。 具体的にどんなデータをどんな状況で処理しようとしてるの?
467 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 16:37:26 ID:MV6c2Qez.net] なにけんけんしてんの?
468 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 20:19:35.75 ID:hxSOAVLp.net] >>462 繰り返しになるけどPSはunixシェルと仕組みが全然違うから厳しいと思う パイプのバッファリングはどう仕組むつもりなの?
469 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 21:11:04 ID:L3VdfOGw.net] いまだにこんな見当違いを目にしてびっくり 試せるように >>460 を書いたのに試してないのかな Start-ThreadJobが使えない環境なら、代わりにStart-Jobを使っても動くぞ スレッドとジョブの起動速度差で少し遅いけどちゃんと動くから試してみろよ というわけで、動作することはちゃんと確認できてる 俺が聞いたのは、>>460 みたいにごちゃごちゃ書くのが面倒だから threadedpipe @({recvdata}, {mul10}, {add1}, {fmtresult}) のように書けるような function threadedpipe が作れるかどうかなの まあ制約付きで一応できたんだけど
470 名前:420 mailto:sage [2020/06/25(木) 23:05:56.80 ID:ZIjS4UcO.net] とりとめもなく、推敲もなく適当に書き散らかしてごめんなさい レスありがとうございます 理解して、Powershell組むのはかなり困難そうなので Myコピペライブラリでも作って、理解しないでも組めるような 体制を作っていこうと思います ありがとうございました。 ちなみにファイル作成は >>で用は足りました
471 名前:デフォルトの名無しさん mailto:sage [2020/06/25(木) 23:48:32.33 ID:GAspYPHa.net] きたないコードで目的も意味不明 まさに自慰
472 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 01:13:06.63 ID:UcUHbC3j.net] 質問者より明らかにレベル低いのにイチャモンだけは一流だな だまってろよお前は
473 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 05:47:21.88 ID:ZKLfm8jC.net] >>466 > パイプのバッファリングはどう仕組むつもりなの? 普通にFIFOを実装するだけだろ 何が難しいと思ってるんだ?
474 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 06:30:47.02 ID:uqHA56uo.net] >>470 お前もだなw
475 名前:デフォルトの名無しさん [2020/06/26(金) 07:02:56.31 ID:rwBI62Tc.net] ここがどうだとかじゃなくて、 汚いとかって言い方傷つくだろうが
476 名前:デフォルトの名無しさん mailto:sage [2020/06/26(金) 10:47:41 ID:lJi08xny.net] >>449 こんな感じ? ただ動くだけのサンプル。エラー処理とかオブジェクトの後始末とか何もしていない。 function Invoke-ThreadedPipeline([ScriptBlock[]] $ScriptBlock) { $p = $ScriptBlock | % { $p = [RunspaceFactory]::CreateRunspace().CreatePipeline() $p.Commands.AddScript($_) $p.Runspace.Open(); $p.InvokeAsync() $p } while ($p = @($p | ? {-not $_.Output.EndOfPipeline})) { $i = [Threading.WaitHandle]::WaitAny(($p | % {$_.Output.WaitHandle})) $o = $p[$i].Output.Read($p[$i].Output.Count) if ($i -lt $p.Length - 1) { $null = $p[$i + 1].Input.Write($o, $true) if ($p[$i].Output.EndOfPipeline) {$p[$i + 1].Input.Close()} } else { $o } } } $o = Get-Date Invoke-ThreadedPipeline ( {1..10}, {process {Start-Sleep 1; ">$_"}}, {process {Start-Sleep 1; ">$_"}}, {process {Start-Sleep 1; ">$_"}} ) | % {'{0} : {1}' -f $_, (New-TimeSpan $o).TotalSeconds}
477 名前:474 mailto:sage [2020/06/26(金) 10:49:06 ID:lJi08xny.net] スクリプトブロックのバインドとか、スコープとか、面倒な問題は見ないふり。 そもそも、PowerShell のスコープはスレッドセーフにはできていないので、 問題に対処するのは、ほとんど不可能なのかも。
478 名前:デフォルトの名無しさん [2020/06/26(金) 12:23:31.85 ID:hzH3p+iw.net] IT掲示板群 ttp://x0000.net/forum.aspx?id=15 学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net 数学 物理学 化学 生物学 天文学 地理地学 IT 電子 工学 言語学 国語 方言 など simulationライブラリで純粋な関数式プログラミングをする ttp://x0000.net/topic.aspx?id=3631-0 UIライブラリ (C#, 2D) を作ったよ ttp://x0000.net/topic.aspx?id=3688-0 連続と離散を統一した! ttp://x0000.net/topic.aspx?id=3709-0 4Dエンジン(画像有り) ttp://x0000.net/topic.aspx?id=3677-0 matrixのライブラリ ttp://x0000.net/topic.aspx?id=3711-0 ある強力なFor関数 ttp://x0000.net/topic.aspx?id=3630-0 SQLライブラリ ttp://x0000.net/topic.aspx?id=3675-0 PS malloc / free を実装してみた (C#) ttp://up.x0000.net/files/TMallocTest.zip
479 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 04:12:29.94 ID:sb7IOZLx.net] 教えてください。 powershell.exeに "powershell.exe"が見つかりません。名前を正しく入力したかどうかを確認してから、やり直してください。 ってダイアログが出て怒られるのだが、 これってどういうことですか?
480 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 08:19:48.13 ID:EbIp5fqD.net] >>477 単なるウケ狙いなら別だけど、本気でなんとかしたいのならば、 前後の経緯を含めて詳細に説明してもらわないとなんとも言えない
481 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 09:06:15.18 ID:sb7IOZLx.net] そうですねすみません。 Python3.6、Bazel 2.0.0、MSYS2、Visual C++ Build Tools 2019、WMF5.1、 CUDA toolkit 10.1、cuDNN 7.6を入れて、Tensorflow 2.2をビルド。 x64 Native Tools Command Prompt for VS 2019から、bazel buildでビルド中に、 「powershell.exeが見つかりません。〜」のダイアログが出る。ダイアログの左上はpowershell.exe。 放置すると最大4個出てビルトが一時停止するが、ダイアログの「OK」で閉じると再開する。しばらくすると、また出る。 PCは、 OS:Windows7pro sp1 x64 CPU:Core2Quad Q9550 GPU:Geforce GTX1650super MEM:8G
482 名前:デフォルトの名無しさん mailto:sage [2020/07/05(日) 09:07:58.29 ID:sb7IOZLx.net] です。 何か気が付くところがあれば教えてください。
483 名前:デフォルトの名無しさん [2020/07/06(月) 15:26:47.18 ID:ENMHKR++.net] powershell.exeが見つからない。 だからこそ、poweshell.exeが見つからなくてはと思っている。
484 名前:デフォルトの名無しさん mailto:sage [2020/07/06(月) 16:00:54.38 ID:AV85qEaL.net] はいすべった
485 名前:デフォルトの名無しさん mailto:sage [2020/07/06(月) 19:14:17.53 ID:mGwQnOrU.net] PATHが通ってないんじゃないの サポート切れのWindows7を使い続けてて大丈夫か
486 名前:デフォルトの名無しさん mailto:sage [2020/07/06(月) 19:34:12.08 ID:BdiDJNUx.net] 建前上esuあるから必要な部署はそれ当てて使ってるよ
487 名前:デフォルトの名無しさん mailto:sage [2020/07/06(月) 20:54:49 ID:zdAH+P0d.net] win7だって(自分で削除しなけりゃ)普通にpathは通っているはずだけど まあ確かめてみることだね
488 名前:デフォルトの名無しさん mailto:sage [2020/07/06(月) 20:56:13 ID:0H1iFJXS.net] ダイアログが出てる時にタスクの中にpowershell.exeがいませんでした。 誰が出しているのか追いかけてみます。 お騒がせしました。
489 名前:デフォルトの名無しさん mailto:sage [2020/07/06(月) 21:05:43.69 ID:fLXZOc4N.net] 32bit版 or 64bit版を探しにいってるんじゃないの?
490 名前:デフォルトの名無しさん [2020/07/07(火) 12:27:32.25 ID:Csl+eNq2.net] Windows 10 なら、コマンドプロンプトで、 where powershell と入力すると、 C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
491 名前:デフォルトの名無しさん mailto:sage [2020/07/07(火) 21:09:26.46 ID:IcFS4Epu.net] whereは10だけじゃなくて7にも標準搭載されてる 98や2000ならリソースキットに含まれてる
492 名前:デフォルトの名無しさん mailto:sage [2020/07/11(土) 09:02:38.89 ID:n9XGFFVi.net] NuGetパッケージ使いたい時ってどうすれば使えんの 例えばSeleniumを使いたい場合C#なら dotnet add package Selenium.WebDriver これで使えるようになるけどPSの場合はどうすれば
493 名前:デフォルトの名無しさん mailto:sage [2020/07/11(土) 21:53:51.85 ID:I6xaQmI+.net] Make using NuGet packages installed with Install-Package easier to use - make Add-Type support NuGet packages https://github.com/PowerShell/PowerShell/issues/6724
494 名前:デフォルトの名無しさん mailto:sage [2020/07/17(金) 09:19:06 ID:6MuP2T5H.net] v6.2.7 https://github.com/PowerShell/PowerShell/releases/tag/v6.2.7 v7.0.3 https://github.com/PowerShell/PowerShell/releases/tag/v7.0.3
495 名前:デフォルトの名無しさん mailto:sage [2020/07/24(金) 01:22:35.38 ID:r0N61jeX.net] 明治の「 おいしい牛乳 」ってあるけど 「 おいしい 」って自分で付けちゃうなんて 強気というかふてぶてしいよな? 「 PowerShell 」からも同じにおいがするぜ
496 名前:デフォルトの名無しさん mailto:sage [2020/07/24(金) 01:48:02.23 ID:UQ3TOH2s.net] Apple & IBM「…」
497 名前:デフォルトの名無しさん mailto:sage [2020/07/24(金) 10:09:22 ID:860vhoVN.net] Powerこそ力
498 名前:デフォルトの名無しさん mailto:sage [2020/07/24(金) 10:37:13 ID:56CkEgqB.net] shellこそ貝殻!
499 名前:デフォルトの名無しさん mailto:sage [2020/07/24(金) 14:36:37.83 ID:jOZb/2Gr.net] 💪🐚
500 名前:デフォルトの名無しさん mailto:sage [2020/07/24(金) 14:40:35.13 ID:30uJqngI.net] powerpoint 力点?
501 名前:デフォルトの名無しさん mailto:sage [2020/08/05(水) 12:02:30 ID:gYncIR+S.net] >>131 >>132 pwshw 普通のコンソールアプリだとリンクオプション変えるだけでできる気がするが 何が長引いとるんや? windows以外にも対応するのが大変なんかな
502 名前:デフォルトの名無しさん mailto:sage [2020/08/13(木) 17:41:10.43 ID:e4hfVbk2.net] ある値で、とあるファイルをgrep検索かけて grepで引っかかったら 変数に0、grepで引っかからなかったら変数に1 ということをしたいのですが、どんな方法で実現できますでしょうか。 linux でいうとこういうものです # cat hoge.txt | grep abc ←知りたいのはここ相当のもの # echo $? 0 ←abcが引っかかった # # cat hoge.txt | grep abc ←知りたいのはここ相当のもの # echo $? 1 ←abcが引っかからなかった # よろしくお願いいたします。
503 名前:デフォルトの名無しさん mailto:sage [2020/08/13(木) 18:00:29.06 ID:3scCogHG.net] $r = gc hoge.txt | sls abc if ($r -ne $null) { # 引っかかった & $rにはslsの結果 } else { # 引っかからない }
504 名前:デフォルトの名無しさん mailto:sage [2020/08/13(木) 18:07:53.30 ID:e4hfVbk2.net] >>501 ありがとうございます!ばっちりです。 追加で申し訳ないんですけど、これを変数をgrep対象にして 戻り値を取得する事ってできますでしょうか? > Write-Output $hoge aaa ←こんな感じで複数行はいってる変数 bbb ccc ddd eee ffff
505 名前:デフォルトの名無しさん mailto:sage [2020/08/13(木) 18:56:58.07 ID:3scCogHG.net] $hoge | sls abcでいいんじゃね
506 名前:デフォルトの名無しさん [2020/08/13(木) 19:18:09 ID:rGVB7rFL.net] (cat hoge.txt) -as [string] -cmatch "abc" とか? TrueFalseになっちゃうけど
507 名前:デフォルトの名無しさん mailto:sage [2020/08/13(木) 20:45:21.78 ID:hEr1UF+A.net] ふつーはifに直接つっこむ if (Select-String abc hoge.txt -CaseSensitive -Quiet) { if ($hoge | Select-String abc -CaseSensitive -Quiet) {
508 名前:デフォルトの名無しさん mailto:sage [2020/08/13(木) 21:13:55.51 ID:takIe+yE.net] 個人的には>>504 のTrueFalse管理が好きかな 01なら簡単に変換出来るし $r = (cat hoge.txt) -as [string] -cmatch "abc"; [int]!$r;
509 名前:デフォルトの名無しさん mailto:sage [2020/08/13(木) 22:02:49.13 ID:hEr1UF+A.net] 巨大ファイルを全部なめたいの?
510 名前:デフォルトの名無しさん mailto:sage [2020/08/14(金) 05:21:16 ID:SCMnTycc.net] 漏れは、Windows 10, WSL, Ubuntu 18.04 を入れているから、 grep は、Linux 側でやるか、Ruby などを使う Windows側のPowerShell などでは、やらない。 複雑なスクリプトは、Linux側のRubyでやる
511 名前:デフォルトの名無しさん mailto:sage [2020/08/14(金) 07:16:55.02 ID:fFUBtJk9.net] >>501 gcの結果って配列でしたっけ? 配列の$nullとの比較の場合、nullを左辺にしないといけないんじゃなかったでしたっけ? もうpowershell側で修正されてるかな
512 名前:デフォルトの名無しさん mailto:sage [2020/08/14(金) 08:15:51.24 ID:beR79RQl.net] 推奨 NG ワード: Ruby 漏れ
513 名前:デフォルトの名無しさん [2020/08/14(金) 23:17:26.92 ID:SCMnTycc.net] >>502 Linux のgrep なら、 AND 検索、パイプで grep -i 単語1 ./* | grep -i 単語2 OR 検索、-e で grep -i -e 単語1 -e 単語2 ./* 途中で改行しても、同じ grep -i "単語1 単語2" ./*
514 名前:デフォルトの名無しさん mailto:sage [2020/08/15(土) 16:13:38.92 ID:qyy6aN9C.net] >>509 -eqの配列フィルタのことだと思うけどgcやslsは$nullを含む配列は返さないから問題ない
515 名前:デフォルトの名無しさん mailto:sage [2020/08/24(月) 20:47:25.66 ID:VQq4kdHe.net] ストアにPowerShell Preview登場 https://www.microsoft.com/ja-jp/p/powershell-preview/9p95zzktnrn4
516 名前:デフォルトの名無しさん mailto:sage [2020/08/25(火) 20:56:27.18 ID:+ct4ya2Y.net] GitHubのPreviewとどう違うのかと思ったら、アイコンが違うな なんか気持ち悪い色になってる
517 名前:デフォルトの名無しさん mailto:sage [2020/08/25(火) 22:59:28.31 ID:SeBJUZXv.net] powershellスクリプトで高DPI対応をしたいのですが、可能でしょうか? やりたい事は高DPI環境で画面キャプチャを取ることですが、 スケーリングに応じて実際の解像度より小さい値が画面サイズとして返ってきてしまいます。 SetProcessDPIAware()を最初に呼んでも効果がありませんでした。 普通のアプリのようにEXEにmanifestファイルを埋め込むこともできないので無理でしょうか?
518 名前:デフォルトの名無しさん [2020/08/29(土) 13:02:51.79 ID:z6uRv8YY.net] 使ってるエクセルアドインのアプデが不定期に入るんだけど、 その時はエクセルを閉じなきゃいけないので、エクセルVBAでアプデ処理できない なのでVBSでセンドキーしてたんだけど、APIなら画面ロック状態でもOKと でも素のVBSでAPIを使うには、エクセルを呼び出すと(エクセル4マクロ) お、パワーシェルはAPIが使えるスクリプトか、やっと使う時が来た ググると MessageBox のサンプルはあるものの、肝心の FindWindow と PostMessage のサンプルがない MessageBox なんかどんなバッチで使うんだと 適当に書いてみたら、しれっとウィンドウハンドル0で沈黙 ググったら、管理権限がどうとかいう話もあり、それ以上は調べてないけどハマり警戒で断念 その話がほんとだとすると、サードパーティー製のアドインを起動してる標準ユーザーに管理権限を持たせるわけにいかない(スパイ警戒) お、ワードにもVBAあるじゃんかで普通に解決w VBA最強w バッチはVBAとDOSが安定 ドキュメントを持たないVBAのみのスクリプト、「VBAS」をリリースした方が良かったんじゃないかね (パスワードの暗号化だけパワーシェル使ってるが) もっと言うと、VBAでドットネットコンポーネントを呼べるようにするとか(呼べる?) んでパワーシェルはわざわざ長い名前のドットネットコンポーネントを呼び出してセンドキーのサンプルばかり センドキーならVBAでもVBSでもいいじゃんていう 名前も短いし
519 名前:デフォルトの名無しさん [2020/08/29(土) 13:37:55.53 ID:z6uRv8YY.net] 関係ないけどアクセス権て、最重要が情報漏洩、つまり読み取り権限であって、インストール権限なんかどうでもいいんだよな ソフトなんか他社製だし秘密でもなんでもない 壊れても、再インストールするだけ
520 名前:デフォルトの名無しさん [2020/08/29(土) 13:53:57.66 ID:z6uRv8YY.net] ていうか WindowsUpdate や OfficeUpdate がまさにその考え方だよね 最新化は自動であるべきで権限は不要 Officeのアドインもそうあるべき 初回だけ許可が必要で、アプデは自動
521 名前:デフォルトの名無しさん mailto:sage [2020/08/29(土) 16:26:04.73 ID:BYm68LqT.net] ID:z6uRv8YY スレ住民に言いたいこと・聞きたいことがあるのであれば、もう少し簡潔に書いてもらえませんか? あと、2〜3行ならともかく >>516 ぐらいのボリュームで書くなら、読点だけじゃなく句点も省略しないほうが良いですよね。正直、読みづらい。 申し訳ないのですが、斜め読みすら断念しました。
522 名前:デフォルトの名無しさん mailto:sage [2020/08/29(土) 17:29:18.45 ID:uW7NzDft.net] >>519 読む必要ないよ PS腐してVBAマンセーしてるだけ セキュリティの基本も知らず、rwxのxなんて無意味って宣ってる
523 名前:デフォルトの名無しさん mailto:sage [2020/08/29(土) 21:29:35.58 ID:2f/XylsB.net] スタートメニューを右クリックしたら、 一般ユーザー用・管理者用の、2種類のPowerShell がある コードも管理者用では、ExecutionPolicy だったか忘れたけど、特別な書き方がある
524 名前:デフォルトの名無しさん [2020/08/30(日) 10:18:34.85 ID:j2JU6h3h.net] >>520 セキュリティの基本が分かってないのはマイクロソフト マイクロソフトはメーカーだからシステムを守ることをセキュリティと勘違いしてる 守るべきはユーザーの持つ秘密情報 プログラムが改変されようとも、最終的にそのユーザーコンテキストで読めてはいけないデータにアクセスできなければよい プログラムは壊れても再インストールできるが、情報漏洩は回復できない
525 名前:デフォルトの名無しさん [2020/08/30(日) 10:21:08 ID:j2JU6h3h.net] 相変わらず、無内容の人格攻撃文化 腐ってんね
526 名前:デフォルトの名無しさん mailto:sage [2020/08/30(日) 11:22:28.54 ID:roK+ZKVb.net] >>522 「MS は基本がなってない!MS よりも、俺のほうが正しいぞ!」 で、あなた様はどんなバックグラウンドを持つお方で、これまでどんなことを成してきた方なのですか?
527 名前:デフォルトの名無しさん mailto:sage [2020/08/30(日) 11:25:22.99 ID:6EFwsuE9.net] >>523 自分の無理解を棚上げしてスレ違いでむやみにあちこち叩くの辞めた方が良いよ 人に教えを請う立場の書き込みにはとても見えない PSスクリプトの実行に必要なのは監理者権限ではなく適切な実行ポリシーの設定 これだけ教えてあげたんだからもうここには書き込まず一人で調べてね
528 名前:デフォルトの名無しさん mailto:sage [2020/08/30(日) 13:47:22.04 ID:e/T9q/5N.net] 昔からマイクロソフトをdisって一人前面する技術者は一定数いた
529 名前:デフォルトの名無しさん mailto:sage [2020/08/30(日) 14:37:48.96 ID:Y6JzX6tf.net] 「Microsoftのバグ」との戦い https://xtech.nikkei.com/it/article/COLUMN/20080819/312956/
530 名前:デフォルトの名無しさん mailto:sage [2020/08/30(日) 15:57:42.01 ID:PraMtyj1.net] >>526 M$とか書く奴おるねw
531 名前:デフォルトの名無しさん [2020/08/30(日) 17:34:08 ID:6ShNfOXb.net] >>521 管理者権限じゃないと実行出来ないコマンドを使う時用くらいの認識しかなかったわ
532 名前:デフォルトの名無しさん [2020/08/30(日) 21:51:36.19 ID:g5q4aE3p.net] Microsoftは「製品の問題点」と「仕様」を最初に明確にするので、それも批判されてたよね。 Linuxの場合、サポートを提供するベンダーで「バグと仕様を明確にできる」のはRedhatくらい。 その他のベンダーは明確にすることが出来ない。 Kernel作ってるのは他人だから。 「仕様として今後も維持される動作」か「バグとして修正される動作」か即座に知ることが出来るのは、待たずに作業を続けられるので、とても良いことのように感じるけど、実際は批判が多い。
533 名前:デフォルトの名無しさん [2020/08/31(月) 01:56:18.43 ID:Sr2UUXBk.net] ついに公務員の副業が解禁される時代が到来した https://hybridstyle.net/side-job065/ フリーランス市場規模が20兆円を突破 -副業は8兆円- https://hybridstyle.net/work-style020/ 時代は週休3日制へ【週休3日制導入企業まとめ】 https://hybridstyle.net/work-style016/ 会社員の副業が急増、副業フリーランス4年で3倍、経済規模は約8兆円??副業収入は平均74万円 https://www.businessinsider.jp/post-165077#cxrecs_s 本業のストレス解消、副業で月70万、転職のお試し…会社に内緒で副業する人たちの本音 https://www.businessinsider.jp/post-176835#cxrecs_s どんな仕事でいくら稼いでいる? 副業をしている13人に聞いたそのリアル https://www.businessinsider.jp/post-180772#cxrecs_s 会社が個人を縛り付ける時代は終わった。これからは、個人が仕事を求めて、チャンネルのように会社を切り替えていく。 https://www.wantedly.com/companies/newpeace/post_articles/65530 誰も教えてくれなかった「フリーランスは厳しい」ではなく「甘い」という真実。 https://www.wantedly.com/companies/newpeace/post_articles/54124 【特集】年収1000万円以上「フリーランスの流儀」vol.2 https://tabi-labo.com/286733/journey-six-figure-freelance-nathan 「排出物ゼロ、廃棄物ゼロ、貧困ゼロ」究極のエコ・リゾートがフィリピンに https://tabi-labo.com/284193/nautilus-eco-resort 仕事は9割外注すれば売り上げが爆増する https://headlines.yahoo.co.jp/article?a=20190416-00028392-president-bus_all
534 名前:デフォルトの名無しさん [2020/09/01(火) 22:23:09.69 ID:cXm81OcM.net] >>525 だって教えを請う立場じゃないから それはそっちの勝手な思い込み 「普通に解決w」と言ってる通り、文字通り 出来事の感想を述べただけ
535 名前:デフォルトの名無しさん mailto:sage [2020/09/01(火) 22:34:51 ID:mz7Z6faK.net] >>532 「MS は基本がなってない!MS よりも、俺のほうが正しいぞ!」 の次は 「俺は教えを請う立場じゃない」 ですか。Ruby厨に次次ぐ逸材が登場ですね。 で、あなた様はどんなバックグラウンドを持つお方で、これまでどんなことを成してきた方なのですか?
536 名前:デフォルトの名無しさん mailto:sage [2020/09/01(火) 22:57:48.88 ID:XzhpNrm1.net] >>532 そんなのここじゃなくてTwitterにでも書いてろよ
537 名前:デフォルトの名無しさん [2020/09/01(火) 23:15:36.13 ID:cXm81OcM.net] >>524 ところで 建物でいうと、プログラムは家電等の快適装備 ユーザー情報は金庫 A.家電の設置 B.金庫の開錠 どっちがセキュリティレベル上かね? どうも(MSというより)メーカーは、Aを最高権限と考えてる様子 (コンピューターでは物理的に、金庫機能も家電の1つに過ぎないからだろうけど) ボタンをユーザーが押したからなんなのか コンビニの年齢確認と同じで、何を確認したのか ダイアログでベンダーを確認したか? リアルな名称のダイアログなんか簡単に作れる(続く)
538 名前:デフォルトの名無しさん [2020/09/01(火) 23:15:52.09 ID:cXm81OcM.net] >>524 (続き) たとえ本物でも、ベンダーに悪意がないことをどうやって確認するのか まして国が株価操縦してるモラル破壊な社会、大企業だからって信用できない そこで A.保護ユーザー(管理者) B.実行ユーザー(標準) こう分け、Bでベンダーソフトを実行すれば、Aの機密情報を読めない と思いきや、アプデ時に昇格ボタンを押してしまうと、なんでも読める権限で実行される ボタンをユーザーが押そうがバッチで押そうが同じ 全くセキュリティになってない ならば、あえてBを管理者にし、B自身のコンテキストでアプデさせる Aのフォルダから「Administrators」を外しておけば、 インストール権限がありながら、Aの機密情報を読めない、はず (この時、所有権や偽装でUACが反応しない状態なら、 その特権からも「Administrators」を外し、かわりにAを設定しておく)
539 名前:デフォルトの名無しさん [2020/09/01(火) 23:16:32.08 ID:cXm81OcM.net] >>524 くしくも偶然一部を書いてたが mevius.5ch.net/test/read.cgi/tech/1451927425/876-877 さらに言うと、複数の権限があり、ケルベロスによってサーバー機能による高速取込までユーザーコンテキストを通したシステム ユーザー問合せに即時対応するため、操作ログも一元管理される 操作ログは全ユーザーに追加権限だけがあり、閲覧はシステム権限が必要 アクセス権はテーブル自身にあり、どのようなルートからも突破不可能 行政手続に係る深いプライバシーを大量に扱うので、情報漏洩が命取りになる企業 しかし、そういう別件逮捕のようなことを、「人格攻撃」と言う 別件が議論に関係してはならない それにプライバシー侵害は「誹謗中傷」の要件の一つ @嘘(無根拠な憶測)、Aプライバシーの侵害、B人格攻撃、「誹謗中傷」の3要件を全部兼ね備えるというw で、お前は何をしたのか こっちは人格攻撃気質じゃないので、当然興味ないが
540 名前:デフォルトの名無しさん mailto:sage [2020/09/01(火) 23:29:07 ID:XzhpNrm1.net] >>535 下手な例えをだすのは無理解の証 >>536 昇格ボタン押せる時点で既に怪しい まともな運用してたら昇格ボタン押すのに監理者のアカウントが必要 例え昇格ボタンを押しても読み取り権限が得られるとは限らない これもまともな運用してたら所有者にしか読み取り権限は得られない つまりユーザーフォルダ内は当該ユーザーしか読み取れないのがまともな運用 結局無理解由来の誤解なわけで、まさに>>527
541 名前:デフォルトの名無しさん [2020/09/04(金) 06:56:56.59 ID:BT/SeEq8.net] 客先も何も自社もポリシー変更できないからバッチは実行できないわ 簡単なファイル操作とかも.batでやることになってる Powershellに移行できない
542 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 08:30:44.47 ID:PFscGLUJ.net] ps1をポリシー付きで呼び出す1行バッチを書けばいいんじゃない? 冗長だけどbatをメンテするのに比べたらずっといいと思う
543 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 09:00:17.63 ID:nHf7diD2.net] CurrentUserすら許さずbatはOKって 客先はともかく自社でそれは謎
544 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 10:38:48.17 ID:HOWqt3vZ.net] >>539 まともな情シスを抱えていて、かつ運用ルールが徹底している会社なら、 きちんと申請すれば大丈夫なように思えるけど。
545 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 10:55:49.00 ID:9bn0no2k.net] Powershellってマイクロソフト提供のスクリプトですら証明書の期限切れがあるからちょっと不安になる
546 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 11:00:10.92 ID:Z5LzkW/+.net] >>543 無期限の証明書作れる方がヤバいでしょ
547 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 17:55:32.72 ID:pFNwt9H1.net] まぁそれはそうなんだけど10年後にいきなり動かなくなると軽くパニックになるのは容易に想像できる って言うか何件か証明書切れを経験すると不安になるのも理解できる
548 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 21:29:53.57 ID:GUj1t4WA.net] MSの怖いところはいつサポートを切られても文句が言えないんだよな よくそんなもん使うよ
549 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 22:08:14.36 ID:r9WlhdFA.net] vbsなんてもうサポートされてないけどドメインのログオンスクリプトでいまだに大活躍ですよ
550 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 22:37:22.42 ID:2uatcP4v.net] >>546 いつ切られるかなんて話ならApple製品の方が問答無用
551 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 22:48:13.98 ID:HXgxD56a.net] MSほど後方互換性に配慮する企業はない
552 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 22:50:13.00 ID:yQcUkcYq.net] >>546 Googleって知ってる?
553 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 23:13:47.33 ID:pFNwt9H1.net] サポートガーとか言い出したらすべてのソフトメーカーも同じだしMSはサポート期間を明示してる分マシな方
554 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 00:41:16 ID:/H4NwAXT.net] オープンソースじゃないから的なやつでしょどうせ
555 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 01:11:02.97 ID:F930ZZ+s.net] しかもMSは予告したサポート期間切れたようなのでも なんだかんだズルズルと最低限のサポートはしよるしな
556 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 09:05:47.68 ID:Z+0szYX9.net] オープンソースでも、誰もメンテしなくなったらサポート切れたと同じになるけどな
557 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 09:29:26 ID:5bXKo+C7.net] >>549 Win10 で未だに VB6 が公式にサポートされているのは驚異的だわな
558 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 14:23:09.94 ID:NgOfEUV/.net] VB6のサポートって切れたんではないの? でも実際にWin10でもそれなりに動くってことは 相当配慮してるんだろうね
559 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 14:38:02.26 ID:poolRPMo.net] >>556 > VB6のサポートって切れたんではないの? IDEの話と混同してないか? Microsoft は、Windows Vista、Windows Server 2008 (R2 を含む)、Windows 7、Windows Server 2012、Windows Server 2012 R2、Windows Server 2016、Windows 8.x、および Windows 10 上で実行される既存の Visual Basic 6.0 アプリケーションをサポートすることにコミットしています。 https://docs.microsoft.com/ja-jp/lifecycle/faq/developer-tools#what-lifecycle-policy-does-visual-basic-60-follow
560 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 14:41:51 ID:5bXKo+C7.net] >>556 これ。言葉足らずだったけど、ランタイムのほうね。 https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-basic-6/visual-basic-6-support-policy
561 名前:556 mailto:sage [2020/09/06(日) 12:44:28.70 ID:K+uwWPzG.net] >>557-558 ああ、そうなのか。 どうりでうちの開発現場でエラーが出まくってるのに 無理やりIDEをインストールしてた訳だわ。 当然まともに動かなくてソース見る用になってたがw
562 名前:デフォルトの名無しさん mailto:sage [2020/09/06(日) 21:35:48.31 ID:zycnfOVF.net] PowerShell Core6.xはサポート終了したけどね https://docs.microsoft.com/ja-jp/powershell/scripting/powershell-support-lifecycle#powershell-releases-end-of-life
563 名前:デフォルトの名無しさん mailto:sage [2020/09/07(月) 10:29:11.62 ID:LrNxLO4b.net] 教えてください! 数学関数よく使うので、[math]打たなくていい方法ありませんか? pythonだと from hoge import *みたいなやつです。 usingの使い方はよく分かりませんでした…
564 名前:デフォルトの名無しさん [2020/09/08(火) 13:39:15 ID:Czt9vV5Q.net] RubyってNGした方がいいの?
565 名前:デフォルトの名無しさん mailto:sage [2020/09/08(火) 14:06:08.38 ID:4U/U3HlV.net] うん
566 名前:デフォルトの名無しさん mailto:sage [2020/09/08(火) 21:32:03.60 ID:gglleEZ2.net] >>561 クラス名なので省略出来ない $m = [System.Math]; $m::PI; でちょびっとだけ短くなるけど
567 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 14:10:00.30 ID:dcbbv6DU.net] >>564 ありがとうございます!
568 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 17:56:46.99 ID:COY4N7BF.net] >$m = [System.Math]; これって$mに何を代入してることになるの?
569 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 21:07:17.97 ID:Mz5kQg8j.net] System.Mathを表すTypeクラスのインスタンス C#のtypeof(System.Math)に相当する
570 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 23:13:42.66 ID:COY4N7BF.net] >>567 ありがとうございます インスタンスとして受け取ったからstaticメンバーは参照できるのか 何でもありだな
571 名前:デフォルトの名無しさん mailto:sage [2020/09/10(木) 18:44:59.29 ID:tjN1C/3z.net] Typeクラスのインスタンスが特定のクラスとして振る舞うのか。 オブジェクト志向のメタ構造というか自己言及的というか、 頭の悪い俺はクラクラしてくる。
572 名前:デフォルトの名無しさん mailto:sage [2020/09/10(木) 21:10:45.59 ID:Cm2gzsSs.net] "".GetType()::IsNullOrEmpty("foo") なんてものもちゃんと動く わざわざこんな書き方するメリットは知らん
573 名前:デフォルトの名無しさん mailto:sage [2020/09/11(金) 22:50:14.76 ID:7Cy3Hp6X.net] Type型クラスがクラスとして振る舞うんじゃない 静的メンバ演算子(::)がRuntimeType型の値と文字列値を取って、静的メンバを返す だから $parent = [System.Math]; $child = "E"; $parent::$child; はちゃんと評価される
574 名前:デフォルトの名無しさん mailto:sage [2020/09/13(日) 12:34:16.51 ID:pT8kzvft.net] whileの条件式がうまく動かないので教えてください。 Test-NetConnectionでサーバのポートが開いているかチェックして 開いていなかったら、開くまで待つ処理をしたいのですが、 なぜかWhileループに入ってくれません。 条件を$result -ne "True"にすればうまく動くのですが、なぜFalseの条件だと動かないのでしょうか あとTest-NetConnectionでポート開いていないときにWARNINGメッセージが表示されるのですが これって表示抑止できませんか? コード $ProgressPreference="SilentlyContinue" $ErrorActionPreference = "silentlycontinue" $server = "127.0.0.1" $result = Test-NetConnection $server -port 22 -InformationLevel Quiet while ($result -eq "False") { Write-Output "OFF" $result = Test-NetConnection $server -port 22 -InformationLevel Quiet } write-host "kaishi"
575 名前:デフォルトの名無しさん mailto:sage [2020/09/13(日) 12:53:42.29 ID:NB1HNIe8.net] Booleanと文字列を比較してるからかなぁ while ($result -eq $false) { にするとか while ($result.ToString() -eq "False") { にするとか
576 名前:デフォルトの名無しさん mailto:sage [2020/09/13(日) 12:59:04.71 ID:gjBM/R2S.net] >>572 $result -eq $false
577 名前:デフォルトの名無しさん mailto:sage [2020/09/13(日) 13:03:07.97 ID:pT8kzvft.net] while ($result -eq $false) { でうまく動きましたー!ありがとうございました trueは文字列比較で動くのにfalseはダメなのは不思議です。
578 名前:デフォルトの名無しさん mailto:sage [2020/09/13(日) 13:10:32.29 ID:NB1HNIe8.net] trueの場合には-neにしてたから、動いてる様に見えただけなんじゃね?
579 名前:デフォルトの名無しさん mailto:sage [2020/09/13(日) 16:28:25.02 ID:Bx4nil+B.net] while (!$result)でよくね
580 名前:デフォルトの名無しさん mailto:sage [2020/09/13(日) 18:29:23.50 ID:NpK7vu/k.net] 当世風だなw
581 名前:デフォルトの名無しさん mailto:sage [2020/09/13(日) 22:52:54.65 ID:XEIeaeUL.net] /1GBとかやると容量計算が捗るのを今日知った
582 名前:デフォルトの名無しさん mailto:sage [2020/09/13(日) 23:32:26.16 ID:NpK7vu/k.net] >>579 こういう風には使えないんだね。残念。 get-childitem C:\Windows | select fullname, length/1KB
583 名前:デフォルトの名無しさん mailto:sage [2020/09/14(月) 08:38:10.64 ID:Cd/NVq2C.net] get-childitem C:\Windows | select fullname,@{N="length";E={$_.length/1KB}}
584 名前:580 mailto:sage [2020/09/14(月) 15:59:14.68 ID:O60yV8/t.net] >>581 ( ;゚Д゚)マジカ…
585 名前:デフォルトの名無しさん mailto:sage [2020/09/14(月) 21:11:25.52 ID:zNRePcSL.net] ドキュメントにも載ってる公式機能よ https://docs.microsoft.com/ja-jp/previous-versions/dd315291(v=technet.10)#-property-object https://docs.microsoft.com/ja-jp/previous-versions/dd315291(v=technet.10)#%E4%BE%8B-4
586 名前:デフォルトの名無しさん mailto:sage [2020/09/14(月) 22:36:01.27 ID:O60yV8/t.net] おみそれしました。参考にしまつ (=゚ω゚)ノ
587 名前:デフォルトの名無しさん mailto:sage [2020/09/15(火) 17:44:30.49 ID:vvfuKi+i.net] 会社のパソコンでvscodeでのスクリプト作成 しようとしているのですが 下記問題に当たって苦しんでいます。 助言ください 1.vscodeのextentionのインストールができない。 →会社ネットワークは認証付きプロキシ環境なのでその設定が必要ぽいが設定してもダメ、とりあえずファイルを個別にインストールして対処 2.powershellデバッグしようとすると、初めて使うモジュールの分析をしています。と表示されて進まない 対象モジュールはpackagemanegement.psm1 1.4.7 これもプロキシの問題でインストールに苦労しました。
588 名前:デフォルトの名無しさん mailto:sage [2020/09/15(火) 17:51:28.05 ID:7Yffzl/8.net] >>585 認証付きプロキシでも普通に使えてるけど…って思ったらいくつもissue上がってるし、こっちの環境でも「XHR failed」ってエラーになるな
589 名前:デフォルトの名無しさん mailto:sage [2020/09/24(木) 09:55:49.02 ID:R8JuKz31.net] >>262 selectに -expandpropatye みたいなのを足せば何とかなるかも…
590 名前:デフォルトの名無しさん [2020/09/25(金) 01:41:03.68 ID:hFZS0B6G.net] ヒアドキュメントの変数使う時に変数を前方参照(後方参照?)したいんですが、 できませんかね # スクリプトの頭の方で参照したい $heredoc # ヒアドキュメントはスクリプトの後ろにまとめたい $heredoc = @` abc `@
591 名前:デフォルトの名無しさん mailto:sage [2020/09/25(金) 01:55:05.65 ID:mGml3uVc.net] Ruby でも、出来ない
592 名前:デフォルトの名無しさん mailto:sage [2020/09/25(金) 04:02:41.97 ID:pAwXdRR4.net] >>588 それって静的変数みたいなものですかね?考え方は
593 名前:デフォルトの名無しさん [2020/09/25(金) 22:07:41.04 ID:hFZS0B6G.net] UNIX系のシェルの仕様見ても前方参照できるようなことは書いてなありませんでした だめっぽいですね 一旦ファイルとして後ろまで読むみたいなアクロパティックな方法しかなさそう
594 名前:デフォルトの名無しさん mailto:sage [2020/09/25(金) 22:15:02.42 ID:5mEzuFCz.net] 自分自身をファイルオープンして末尾を読み出すとか。 昔、自分自身を解凍するシェルスクリプトがUNIX系アプリのインストーラとしてよく使われてたよね
595 名前:デフォルトの名無しさん mailto:sage [2020/09/25(金) 22:17:06.26 ID:5mEzuFCz.net] おっと書かれていたか
596 名前:デフォルトの名無しさん mailto:sage [2020/09/25(金) 23:45:08.08 ID:BU0fUt+3.net] 処理をスクリプトブロックや関数の中に入れてもいいなら $f = { echo $heredoc } $heredoc = @` abc `@ . $f
597 名前:デフォルトの名無しさん mailto:sage [2020/09/26(土) 22:07:47.79 ID:BjfAYIo4.net] わけがわからん現象にでくわした シンボリックリンク作成権限を付けたユーザーなんだけど New-Item -Type Directory -Name dir New-Item -Type SymbolicLink -Name sym -Target dir これを管理者で実行すると SYMLINKD になるんだけど 管理者にならずに実行すると SYMLINK になるのはどういうこと?
598 名前:デフォルトの名無しさん mailto:sage [2020/09/27(日) 09:30:31.69 ID:HvAokpg1.net] chcp 65001 をやっても画面のユニコード文字列が文字化けするのはなんで?
599 名前:デフォルトの名無しさん mailto:sage [2020/09/27(日) 11:16:54.85 ID:4AaMSaam.net] >>596 [Console]::OutputEncoding = [Text.Encoding]::UTF8 これだとどう?
600 名前:デフォルトの名無しさん mailto:sage [2020/09/27(日) 11:18:33.39 ID:4AaMSaam.net] >>596 あと、いちどここ見てみたら https://www.vwnet.jp/Windows/PowerShell/CharCode.htm
601 名前:デフォルトの名無しさん mailto:sage [2020/09/27(日) 12:01:00.23 ID:45wzgCn0.net] Windows Terminalは絵文字とかもちゃんと表示できるらしい、使ってないけど
602 名前:デフォルトの名無しさん mailto:sage [2020/09/27(日) 16:37:33.79 ID:zpUujZFe.net] 管理者にならずに New-Item でフォルダーへのシンボリックリンクを張ると SYMLINKD でなく SYMLINK ができるという >>595 なんだが PowerShell を C:\Users\ユーザー で起動した場合だけ起こるっぽい Windows PowerShell では起きないし、起動フォルダーを変えても起きない なんだこれ?
603 名前:デフォルトの名無しさん mailto:sage [2020/09/27(日) 18:25:49.52 ID:4AaMSaam.net] >>600 うちの環境 (Win10 2004) だと以下の通り。いずれもシンボリックリンク作成権限を与えた一般ユーザ。 PowerShell 5.0 開始ディレクトリに関わらず、再現せず PowerShell 7.0.3 開始ディレクトリに関わらず、再現する よく分からんね。
604 名前:デフォルトの名無しさん mailto:sage [2020/09/27(日) 21:02:03.10 ID:qVXRXcgH.net] 昔からpsのアクセス権周辺の実装は怪しいと思ってる 専用コマンド呼ぶなり.NET呼ぶなりした方がいいよ
605 名前:デフォルトの名無しさん mailto:sage [2020/09/27(日) 22:00:17.33 ID:zpUujZFe.net] なぜうち(Win10 1909 18363.1082)では起動フォルダーで挙動が変わるんだろう C:\Users\ユーザー で起動した PowerShell 7.0.3 だと、どこで New-Item しても発生する その PowerShell で、さらに PowerShell を起動すると C:\Users\ユーザー で起動した場合は、どこで New-Item しても発生する 別のフォルダーで起動した場合は、どこで New-Item しても問題ない こうなる理由が予想もできない
606 名前:デフォルトの名無しさん mailto:sage [2020/09/27(日) 23:03:00.71 ID:zpUujZFe.net] あーごめん 管理者でも C:\Users\ユーザー で起動したら発生した 管理者になるかどうかは関係なかった 理由はさっぱりだが……
607 名前:デフォルトの名無しさん mailto:sage [2020/09/28(月) 10:27:40.26 ID:6RK1A/yN.net] >>601 >>604 もしかすると、 1. ターゲットをフルパスで指定する 2. ターゲットの相対パスを「.\\」か「./」で始まる形式で指定する 3. New-Item の直前に [Environment]::CurrentDirectory = Get-Location を実行する のどれかを試すと、PowerShell 7 でも問題は起こらなかったり?
608 名前:デフォルトの名無しさん mailto:sage [2020/09/28(月) 20:33:13.25 ID:1OU6a08X.net] 試した 1 〇 (でも張りたいのは相対パスのリンク) 2 × 3 〇 [Environment]::CurrentDirectory を基準
609 名前:ノターゲットのフルパスを求めて フォルダーだったら SYMLINKD 、それ以外は SYMLINK を作ってるっぽい # >>603 を書く時 C:\Users\ユーザー では試してなかった……。 カレントディレクトリを移動しても [Environment]::CurrentDirectory は変わらない となると悪いのは カレントディレクトリを返さない [Environment]::CurrentDirectory ? それとも [Environment]::CurrentDirectory を参照する New-Item ? [] [ここ壊れてます]
610 名前:デフォルトの名無しさん mailto:sage [2020/09/29(火) 11:44:19.44 ID:xkYzZNyK.net] >>606 ごめん。ソースの履歴を見たら、v7.0.3 のときは、2. の方法は無意味だったみたい。 v7.0.3 の実装は、>>606 さんの想像のとおり。 そもそも、ターゲットの相対パスを解決するときの基準は、カレントのパスではなくて、 シンボリックリンクそのもののパスだよね。 なので、プロセスのカレントディレクトリ([Environment]::CurrentDirectory)の代わりに、 PowerShell のカレントロケーション($PWD)を基準にしたとしても、やっぱりバグる。 New-Item -Type Symbolic -Name Foo\Bar -Target .\Zot みたいなケースとか。 でね。最新のソースには、相対パスのターゲットのための修正が施されているのだけれど、 これが、「.\」か「./」で始まるパスのときは、基準にカレントロケーションを使う、 という中途半端かつ誤ったもので...。
611 名前:デフォルトの名無しさん mailto:sage [2020/09/29(火) 20:49:56.27 ID:J7wCjMtV.net] 常に リンクのフルパス → ターゲットのフルパス とたどるだけなのに……w 早く修正されますように
612 名前:デフォルトの名無しさん mailto:sage [2020/09/30(水) 08:50:32.18 ID:6kAerFE6.net] [Environment]::CurrentDirectoryや[IO.Directory]::GetCurrentDirectory()の罠 他のモジュールも同じ問題を抱えてないか心配になる
613 名前:デフォルトの名無しさん mailto:sage [2020/10/01(木) 10:19:36.95 ID:tnCBqate.net] New-Itemはハードリンクもバグってる こっちはWindows以外のOSでも問題になるはず New-Item -Type Directory -Name linktest New-Item -Name linktest\target New-Item -type HardLink -Name linktest\hardlink -Target linktest\target に対して、こんなメッセージでエラーになってしまう New-Item: Could not find item linktest\target. 興味深いのは New-Item -Type HardLink -Name linktest\hardlink -Target target と間違えてみると New-Item: Cannot find path 'カレントディレクトリ\target' because it does not exist. ちゃんと正しいエラーメッセージが返る 不思議だ
614 名前:デフォルトの名無しさん mailto:sage [2020/10/01(木) 21:05:38.94 ID:NSqrZd61.net] >>610 >New-Item -type HardLink -Name linktest\hardlink -Target linktest\target 5.1と7.0.3で試したけどエラーにならなかったぞ
615 名前:デフォルトの名無しさん mailto:sage [2020/10/01(木) 21:26:37.01 ID:tnCBqate.net] これでどう? (長すぎて切れるかも) $origCurDir = [System.Environment]::CurrentDirectory New-Item -ItemType Directory -Path linktest Push-Location linktest New-Item -ItemType Directory -Path dir Push-Location dir # linktest/dir New-Item -ItemType Directory -Path subdir Set-Content -Path file -Value "hello" New-Item -ItemType HardLink -Path hardlink_1 -Value file New-Item -ItemType SymbolicLink -Path symlink_1 -Value subdir Pop-Location # linktest New-Item -ItemType HardLink -Path dir/hardlink_2 -Value dir/file New-Item -ItemType SymbolicLink -Path dir/symlink_2 -Value subdir Push-Location dir # linktest/dir [System.Environment]::CurrentDirectory = $PWD New-Item -ItemType HardLink -Path hardlink_3 -Value file New-Item -ItemType SymbolicLink -Path symlink_3 -Value subdir Pop-Location # linktest [System.Environment]::CurrentDirectory = $PWD New-Item -ItemType HardLink -Path dir/hardlink_4 -Value dir/file New-Item -ItemType SymbolicLink -Path dir/symlink_4 -Value subdir Pop-Location [System.Environment]::CurrentDirectory = $origCurDir Get-ChildItem -Path linktest/dir | Sort-Object -Property CreationTime | Format-Table Attributes,LinkType,Target,Length,Name
616 名前:デフォルトの名無しさん mailto:sage [2020/10/02(金) 13:25:40.85 ID:1QpEVKY8.net] mklink一行でええじゃん
617 名前:デフォルトの名無しさん mailto:sage [2020/10/02(金) 13:57:48.64 ID:w3BWfVBY.net] >>613 これを思い出した ******** アメリカのNASAは、宇宙飛行士を最初に宇宙に送り込んだとき、 無重力状態ではボールペンで文字を書くことができないのを発見した。 これではボールペンを持って行っても役に立たない! NASAの科学者たちはこの問題に立ち向かうべく、10年の歳月と120億ドルの開発費をかけて研究を重ねた。 その結果ついに、無重力でも上下逆にしても
618 名前:水の中でも氷点下でも摂氏300度でも、 どんな状況下でもどんな表面にでも書けるボールペンを開発した!! 一方、ソ連は鉛筆を使った。 [] [ここ壊れてます]
619 名前:デフォルトの名無しさん mailto:sage [2020/10/02(金) 14:35:00.30 ID:Ck+HovvX.net] リンクを張ることが目的なのではない PowerShellの不具合を見つけることが目的なのだ
620 名前:デフォルトの名無しさん mailto:sage [2020/10/02(金) 21:34:24.75 ID:ljpWPhwK.net] 誰か英語ができる人 >>612 のテストを添えて「New-Itemでのhardlink/symlink作成に [Environment]::CurrentDirectoryが影響する」ってタイトルでイシューを立てて欲しい
621 名前:デフォルトの名無しさん mailto:sage [2020/10/03(土) 01:55:55.82 ID:0vVVHGK+.net] 昔はよくConnectに投稿したりしたんだけどねぇ
622 名前:デフォルトの名無しさん mailto:sage [2020/10/03(土) 10:45:42.05 ID:68v91MPk.net] よろしくお願いします
623 名前:デフォルトの名無しさん mailto:sage [2020/10/03(土) 22:48:38.93 ID:7NrhvCrT.net] バージョン上がって使いやすくなってきたねpowershell Shellより扱いやすいからmacにもインスコしたわ コンソールに貼り付けて実行した時に右クリックの貼り付けとctlvの貼り付けで動きが違うのは何で?
624 名前:デフォルトの名無しさん mailto:sage [2020/10/04(日) 17:12:39.48 ID:Pj4o9N0c.net] 遅レスすまんね >>597 だめだった >>598 見てみる
625 名前:デフォルトの名無しさん mailto:sage [2020/10/07(水) 01:28:53.25 ID:OLUeUK9d.net] あるファイルを消そうとしたら「このファイルは開かれているため〜」と表示されて消せなかった。 こういう場合、自分はリソースモニターでファイルを開いているアプリを探すんだけど 最近入った現場では管理者以外はリソースモニターを使えないように設定されていて困った。 それで質問なのですが、powershellのコマンドでファイルを開いているアプリを探す方法はあるのでしょうか?
626 名前:デフォルトの名無しさん mailto:sage [2020/10/07(水) 02:03:23.70 ID:HMBCuleJ.net] https://stackoverflow.com/questions/39148304/fuser-equivalent-in-powershell こんなん出てきたがどう?
627 名前:621 mailto:sage [2020/10/08(木) 03:04:42.09 ID:daaVvwfY.net] >>622 めっちゃ参考になります。っていうかこれでやります。 サンクス!
628 名前:デフォルトの名無しさん mailto:sage [2020/10/08(木) 19:15:35.07 ID:zkqa7tbj.net] 試せば判るけど >>622 はプロセスがロードしてるDLLとかのモジュールしか得られないよ 開いてるファイルはプロセスに紐付いてるハンドル取得して一個一個チェックするしかないよ 実装はpowershellじゃかなり大変だからhandle.exeっていうMSが公開してるツール使ったらいいよ
629 名前:デフォルトの名無しさん mailto:sage [2020/10/14(水) 06:30:09.66 ID:JjVHZHwh.net] セキュリティガチガチでネットにも繋がらないうちの現場じゃ無理だな
630 名前:デフォルトの名無しさん mailto:sage [2020/10/14(水) 11:09:36.08 ID:s64A8YK8.net] うちの会社は「キッコーマン」のHPが見れません、”コーマン”がフィルターに引っかかるのですw
631 名前:デフォルトの名無しさん mailto:sage [2020/10/15(木) 21:32:35.73 ID:vPm9QJ4K.net] openfiles コマンドでファイルを開いているプロセスを調べる 【 Windows】 tooljp.com/windows/doc/Server2008/openfiles/openfiles.html Openfiles https://web.archive.org/web/20120424081342/technet.microsoft.com/ja-jp/library/cc772842 (v=ws.10).aspx
632 名前:デフォルトの名無しさん mailto:sage [2020/10/17(土) 17:51:59.12 ID:2b9DYeQb.net] 職場で「さすがパワーシェラー!」って言われたんだけど パワーシェルを使う人のことをそう呼ぶものなの?
633 名前:デフォルトの名無しさん mailto:sage [2020/10/17(土) 17:57:10.05 ID:Ske6VIT2.net] 聞いたことないな むしろ馬鹿にされてる気分
634 名前:デフォルトの名無しさん mailto:sage [2020/10/17(土) 23:05:50.24 ID:DNKik4OU.net] 洋書で良い本ないですか? 和書だと数冊しか出てないので…
635 名前:デフォルトの名無しさん mailto:sage [2020/10/18(日) 21:28:34.46 ID:6x+7Jy+N.net] in actionは読んだのかね あとはCoreのソース読んでくのが手っ取り早い
636 名前:デフォルトの名無しさん mailto:sage [2020/10/19(月) 22:58:13.20 ID:TaaQ8sH/.net] >>631 原書は第3版まで出てるんですね ありがとうございます
637 名前:デフォルトの名無しさん [2020/10/24(土) 21:41:19.65 ID:1s91cR1z.net] 多次元配列(ジャグ配列ではなく)を1次元配列に平坦化する高速な方法ありませんか? データ数は100万個くらいです。 @($a | % {$_}) 検索したら↑のカッコいい方法が出てきましたが、 私の環境で6秒ほどかかり速度に不満があります。
638 名前:デフォルトの名無しさん mailto:sage [2020/10/24(土) 23:22:07.28 ID:ZaC2aARH.net] パイプとForeach-Object自体が遅いからね データがオンメモリにあるならforeach文のが速い
639 名前:デフォルトの名無しさん mailto:sage [2020/10/24(土) 23:28:40.40 ID:ZaC2aARH.net] あとは万個の繰り返し処理になるわけだからpowershellで書いたら全体的には当然遅い 対策としては繰り返し部分だけC#に渡すとかだね
640 名前:デフォルトの名無しさん mailto:sage [2020/10/24(土) 23:45:12.07 ID:V4Y88WB8.net] 万個とかエッチ!
641 名前:633 [2020/10/25(日) 00:13:47.38 ID:orpbcY2p.net] foreach文にすると0.8秒まで速くなりました! とりあえずこの方法でやってみます $b = foreach($x in $a){$x}
642 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 02:13:33.54 ID:8PerFZ8f.net] >>636 美人穴が「この商品は累計○万個も売り上げたということです!」とかいうとおっきする
643 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 20:51:17.25 ID:Bltg1B/v.net] >>633 >多次元配列(ジャグ配列ではなく)を1次元配列に平坦化する高速な方法ありませんか? なんでジャグ配列ではなく多次元配列なんだろう
644 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 23:05:57.46 ID:Ny8q0G3C.net] ジャグラーは定番だ
645 名前:デフォルトの名無しさん mailto:sage [2020/10/25(日) 23:57:20.55 ID:sGr6+tXm.net] 多次元配列のほうがメモリ上で綺麗に配置されている分、高速化の選択肢が多いかもしれないって発想じゃね
646 名前:633 [2020/10/26(月) 00:00:33.37 ID:R7zaLxag.net] >>639 ExcelファイルからCOM経由で範囲データを取ってくるとobject[,]になるためです
647 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 08:09:54.14 ID:mujdTIU3.net] なんでそれを1次元にするんだろう
648 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 12:01:58.05 ID:bVz9LMJg.net] >>641 実際には多次元配列の方が遅い
649 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 13:22:10.82 ID:l+r11Fp5.net] >>644 理由は?
650 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 14:41:24.14 ID:RInXL5ja.net] PowerShellというか.NETの仕様 .NETには1次元配列の要素にアクセスするための専用命令があるので速い 多次元配列の要素にアクセスするにはプロパティみたいなアクセサメソッドを使わなきゃいけないので遅い
651 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 16:19:55.73 ID:l+r11Fp5.net] >>646 多次元だと倍以上遅いと言う根拠あるの?
652 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 16:27:11.02 ID:RDi5ol2j.net] めんどくせー奴だな
653 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 17:00:59.84 ID:XYschmPc.net] 体感速度は変わらん
654 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 17:43:17.64 ID:jItJ//Mq.net] >>647 自分で試せば良いんじゃね
655 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 17:46:52.74 ID:l+r11Fp5.net] 要は根拠もなしに > 実際には多次元配列の方が遅い と妄想をほざいてただけって話かよw
656 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 17:56:32.09 ID:jItJ//Mq.net] >>651 うん、良いんじゃね、そういう結論で。 以上でよろしいか?
657 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 17:58:32.50 ID:j+tAxxjP.net] >>651 質問に答えず茶化すだけかよw
658 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 19:30:32.27 ID:l+r11Fp5.net] >>653 >>652 に言ってくれよw
659 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 19:43:09.27 ID:/01g7c5c.net] >>ID:l+r11Fp5 たくさん構ってもらえて良かったね
660 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 20:06:18.23 ID:l+r11Fp5.net] >>655 恥の上塗りかなw
661 名前:633 mailto:sage [2020/10/26(月) 20:09:14.97 ID:5qWbLIDu.net] >>643 Excelファイルから取得したデータを更に別の処理に使うのですが、その際に1次元で渡す必要があるためです
662 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 20:09:30.70 ID:/TCFG/M1.net] 実装としては添え字でメモリの位置を計算して参照するだけだから 一次元でも多次元でも原理的には速さは変わらないぞ
663 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 20:13:28.15 ID:jItJ//Mq.net] >>656 きみが絶対的に正しいことはスレ住人の総意で共通認識なのだから、もう十分だろう? そのへんで勘弁してもらないかな。なんなら土下座して謝るよ。
664 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 20:17:45.03 ID:mujdTIU3.net] ちゃんとアンカー追えよ ジャグ配列vs多次元配列が1次元vs多次元配列に化けてるぞ >>647 >多次元だと倍以上遅いと言う根拠あるの? 「倍以上遅い」なんてどこから来たんだろう
665 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 20:28:30.59 ID:l+r11Fp5.net] >>658 >>646 によると専用命令があるらしいけど、嘘なのかね? >>660 ああすまん、脳内で二次元配列 ⇔ ジャグ配列 って思ってたわ まあ3次元以上なら専用命令とやらがもっと速くないとダメだけど
666 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 20:36:57.75 ID:mujdTIU3.net] あんたはまず「倍以上」の出所を説明しないと
667 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 21:11:41.27 ID:EAm4Av0T.net] www5b.biglobe.ne.jp/~yone-ken/VBNET/IL/il15_UseArray.html > ILにも1次元配列については専用の命令が用意されています。
668 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 21:49:29.23 ID:AmD6br2D.net] #2次元配列初期化 Measure-Command { $i = 0; $array = New-Object "object[,]" 1000,1000 for ($x = 0; $x -lt $array.GetLength(0); $x++) { for ($y = 0; $y -lt $array.GetLength(1); $y++) { $array[$x,$y] = $i++ } } } #ジャグ配列初期化 Measure-Command { $i = 0; $array = New-Object "object[]" 1000 for ($x = 0; $x -lt $array.length; $x++) { $array[$x] = New-Object "object[]" 1000 for ($y = 0; $y -lt $array[$x].length; $y++) { $array[$x][$y] = $i++ } } } たしかに初期化の段階でジャグ配列のが速いね
669 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 22:09:49.38 ID:l+r11Fp5.net] >>662 ジャグ配列知らんの? 二次元相当のジャグ配列だと2回辿らないとダメだから倍は速くないとトータルで遅くなるでしょ
670 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 22:22:45.88 ID:5/h2v6nN.net] >>665 PSで例見せてよ
671 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 22:37:25.27 ID:l+r11Fp5.net] ILの話にPSとか言われてもw
672 名前:デフォルトの名無しさん mailto:sage [2020/10/26(月) 22:48:42.22 ID:l+r11Fp5.net] 軽くググったら最近の.Net Coreとかだと状況次第って感じやね https://takap-tech.com/entry/2020/02/24/213932 原理考えたらまあ妥当な結果だと思う
673 名前:デフォルトの名無しさん mailto:sage [2020/10/27(火) 01:23:06.66 ID:IPa2oLl3.net] なるほど勉強になります
674 名前:デフォルトの名無しさん mailto:sage [2020/10/27(火) 13:37:08.15 ID:bD3kPd/D.net] なるほど理解できません
675 名前:デフォルトの名無しさん mailto:sage [2020/10/27(火) 15:37:54.18 ID:az6RTKF7.net] 処理系の実装に寄るけど、うまくインデックスを張れば 速度的には同等になるはずだけどな
676 名前:デフォルトの名無しさん mailto:sage [2020/10/27(火) 19:29:05.55 ID:k9DNZwa6.net] >>671 どういう理論なんだ? ランダムアクセスだとジャグ配列は次元毎にメモリーアクセスして辿らないとダメだけど多次元配列ならインデックスの計算してその場所にアクセスするだけだから多次元配列の方が速い シーケンシャルアクセスだとアクセスの多くは最後の次元のアクセスだから毎回インデックスを計算する多次元配列よりジャグ配列の方が速いと思う まあめっちゃ最適化して多次元配列を1次元配列に展開するようなコードにまで落とせたら多次元配列の方が微妙に速くなるかも
677 名前:デフォルトの名無しさん mailto:sage [2020/10/27(火) 19:52:31.91 ID:Sd8akiyh.net] なんにせよ多次元配列を1次元配列に高速に平坦化する方法分からないんだろ グダグダスレ引き延ばしておきながらなw
678 名前:デフォルトの名無しさん mailto:sage [2020/10/27(火) 21:46:07.02 ID:UFBDJ7q0.net] @($a) Foreach-Objectもforeach分も要らない
679 名前:デフォルトの名無しさん mailto:sage [2020/10/27(火) 21:47:10.61 ID:UFBDJ7q0.net] foreach分 → foreach文
680 名前:デフォルトの名無しさん mailto:sage [2020/10/27(火) 22:27:25.79 ID:6aj92Tm3.net] >>673 そんな低レベルなことでドヤれるとか羨ましいわw
681 名前:デフォルトの名無しさん mailto:sage [2020/10/28(水) 19:54:09.10 ID:RpzUgl/d.net] >>674 >@($a) PSってこんなオチが多いね $aって打てば全部列挙されて出てくるんだからあれれとは思うんだけどさ
682 名前:633 mailto:sage [2020/10/29(木) 21:32:08.09 ID:/oXwNFXj.net] >>674 返信遅れてすみません。 0.2秒まで速くなりました。 シンプルかつナンバーワンですね 目からウロコでした。
683 名前:デフォルトの名無しさん mailto:sage [2020/10/29(木) 23:08:28.85 ID:u3CTd5OP.net] >>677 こういうトリッキー系?は趣味PGならいいんだけど 業務PGに実装するには躊躇するんだよなあw
684 名前:デフォルトの名無しさん mailto:sage [2020/10/29(木) 23:35:09.18 ID:ebCj94Ij.net] え? これは常識では・・・
685 名前:デフォルトの名無しさん mailto:sage [2020/10/30(金) 08:08:54.65 ID:xvehW8+X.net] PowerShell使うならほぼ常識、てか知らないと辛いレベル そもそもPowerShell自体が色々トリッキーな動作するし、特に配列周り
686 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 13:12:42.29 ID:cgiVh2xg.net] $a = [Object[,]]::new(3,3); $a.Rank は 2 $b = $a; $b.Rank は 2 $b = & { $a }; $b.Rank だと 1 $b = $a + @(); $b.Rank でも 1 もちろん $b.Length はどれも 9 $b = $a が特例のように思えてきた どうしてこうなるのかきちんと理屈が知りたい
687 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 14:39:03.01 ID:Q6ZeZ8N8.net] 配列での foreach の使用 (C# プログラミング ガイド) https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/arrays/using-foreach-with-arrays 多次元配列の場合、右端の次元のインデックスが最初に加算されていき、次にその左の次元、またその左、というような方法で各要素がトラバースされます。 int[,] numbers2D = new int[3, 2] { { 9, 99 }, { 3, 33 }, { 5, 55 } }; // Or use the short form: // int[,] numbers2D = { { 9, 99 }, { 3, 33 }, { 5, 55 } }; foreach (int i in numbers2D) { System.Console.Write("{0} ", i); } // Output: 9 99 3 33 5 55
688 名前:682 mailto:sage [2020/11/02(月) 17:29:09.65 ID:cgiVh2xg.net] 明示的な foreach の使用は興味がないなあ $b = $a も $b = & { $a } も $a を $b に代入するのに なんで結果が違うのかが知りたい
689 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 17:46:27.91 ID:O692h/lZ.net] 最初のやつ以外はシンプルな代入じゃなくて演算してるから、演算の結果が一次元配列になっただけじゃないの
690 名前:682 mailto:sage [2020/11/02(月) 17:50:23.99 ID:cgiVh2xg.net] $b = & { $a } も演算? 具体的にどういう演算になるのかわからない
691 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 17:54:46.38 ID:Razdsa9H.net] >>682 >$b = & { $a }; $b.Rank だと 1 >$b = $a + @(); $b.Rank でも 1 この2つは$aがそれぞれ評価されて1次元になって$bに代入されてる $b = & { $a } の場合$aの前にカンマを入れれば型は保たれる $b = & { ,$a } PowerShellの謎仕様
692 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 18:05:40.51 ID:Razdsa9H.net] おそらくスクリプトブロックを通過するときと 右辺や左辺に置いて演算するとき それぞれ1次元に変換されてしまう仕様みたい
693 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 18:07:36.92 ID:O692h/lZ.net] >>686 起動演算子にスクリプトブロックを渡してるんだから演算でしょ スクリプトで $a とだけ書くと$aが評価されて左上から順に9行分の出力が得られる $b=&{$a}はその出力の代入になってる
694 名前:682 mailto:sage [2020/11/02(月) 18:14:48.39 ID:cgiVh2xg.net] じゃあやっぱり単純な代入 $b = $a だけが特別で それ以外は配列が展開されるってことか 理解した >>687 & { $a } だと配列 $a が展開される & { ,$a } にすれば配列の配列 ,$a が展開されて配列 $a がそのまま渡される
695 名前:682 mailto:sage [2020/11/02(月) 18:50:05.02 ID:cgiVh2xg.net] あれ違うな 単純な代入だけでなく Comma operator も特例になるのか
696 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 18:58:29.51 ID:WQUINiFK.net] >>691 特例だとか自分勝手な解釈をする癖を直さないと、他人とのコミュニケーションで苦労するぞ(主に周囲の人間の方が...)。 自分が既に頭の中に描いているイメージに合わせて無理に解釈方法を寄せていくのではなくて、本来理解すべき仕様の方に自分の中の理解を修正して近づけていく方がいいぞ。
697 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 19:13:13.99 ID:eTL99CIn.net] ウザっ
698 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 19:59:31.61 ID:D4NZ1UY1.net] >>692 TPO をわきまえられずトンチンカンな御高説垂れる人も、他人とのコミュニケーションで苦労するぞ(主に周囲の人間の方が...)。
699 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 20:30:51.76 ID:Razdsa9H.net] >>690 原理的にはジャグ配列にして空評価させて返すで合ってると思う 恐らく処理系のソース読み込まないと判らないよ 配列返す関数作る時も同じ方法
700 名前:682 mailto:sage [2020/11/02(月) 20:44:58.19 ID:cgiVh2xg.net] ,$a は Comma operator で1要素の配列を返すけれど その時に $a は展開されずに2次元配列のまま これは単純な代入と同じ扱いだよね
701 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 21:48:13.16 ID:Qlwbnxz+.net] { $a } は { Write-Output $a } の事 Write-Output に配列を渡した時の挙動を考えればいい https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/write-output By default, Write-Output enumerates through collections provided to the cmdlet. However, Write-Output can also be used to pass collections down the pipeline as a single object with the NoEnumerate parameter.
702 名前:デフォルトの名無しさん mailto:sage [2020/11/02(月) 22:48:01.97 ID:O692h/lZ.net] ウザかろうと思って特例云々につっこむのやめたけどやっぱり書くわ 代入は代入でしかなく特例も何もない いつだって右辺の値をありのままの型と値で代入するだけ $b=&{$a} というのを代入として認識するからおかしくなる $b=$a.Rank と書いたら$bは数値になるわけだけど、代入したから数値になった!とは思わないでしょ あくまで.Rankを評価した結果が数値になって、その数値を$bに代入したに過ぎない $b=&{$a} も &{$a} の評価結果が一次元配列になる仕様なだけで、代入が何かの法則性に寄与している訳ではないし、一次元配列になるという一貫したルールや思想があるわけでもない
703 名前:682 mailto:sage [2020/11/03(火) 00:15:03.20 ID:Da50zhuo.net] operand を展開してから operator にわたすんじゃなくて operand をそのままわたして operator が展開したりしなかったりする たぶん理解した
704 名前:デフォルトの名無しさん mailto:sage [2020/11/03(火) 08:59:33.05 ID:HUEo3Cdu.net] >>682 の$b = $a は$aの参照を$bに代入している $a = [Object[,]]::new(3,3) $b = $a $b[0,0] = 1 echo $a[0,0] #=> 1 $b = & { $a } は { $a }というスクリプトブロックを実行して戻り値を代入する { $a } の意味は >>697 を見ろ
705 名前:デフォルトの名無しさん mailto:sage [2020/11/04(水) 10:50:57.08 ID:ZJcGuVz6.net] >>694 初学者が変な誤解すると二度と修正する機会ないからな みんな巡り巡って自分が被る迷惑を未然に防ごうと必死なわけよ
706 名前:デフォルトの名無しさん mailto:sage [2020/11/04(水) 20:48:58.85 ID:0afqdDmu.net] いつの間にかヘルプの翻訳作業が始まってた https://github.com/MicrosoftDocs/PowerShell-Docs.ja-jp/tree/live/reference/7.1
707 名前:デフォルトの名無しさん mailto:sage [2020/11/07(土) 21:29:59.64 ID:AAgSLehy.net] こんなシェルを書きました。 function get_stop_code { $hoge=(Get-Content stop_code.txt) } while ($true) { get_stop_code Write-Output $hoge } シェル実行中に、stop_code.txtの中身を書き換えても get_stop_codeがファイルの中身を拾ってくれません いろいろ試したら、こうしたらうまくいきました。がすっきりしません。 function get_stop_code { $hoge=(Get-Content stop_code.txt) Write-Output $hoge } while ($true) { $stop_code=(get_stop_code) write-output $stop_code } get_stop_codeがファイルの中身を、while ($true)の中でうまく拾ってくれる 書き方を教えてください。
708 名前:デフォルトの名無しさん mailto:sage [2020/11/08(日) 00:25:05.60 ID:gCrk6dnE.net] これって遅延展開系の話なのかな?
709 名前:デフォルトの名無しさん mailto:sage [2020/11/08(日) 02:53:16.74 ID:mlfH60EQ.net] スコープの話だと思うよ 関数の内側で変数を書き換えてもローカルスコープ内の変数の更新にしかならないので、関数から戻ったら値は書き換わってない 関数を次のように書き換えて明示的にスクリプトスコープの変数を更新してやればいい function get_stop_code { $script:hoge=(Get-Content stop_code.txt) } PSのスコープって特殊で悩ましい 特にループの初回、ほかの言語みたいに未宣言の変数だぞとエラーになってくれればまだいいんだけど、変数が作られて親からも見えちゃうから混乱する
710 名前:デフォルトの名無しさん mailto:sage [2020/11/08(日) 08:09:56.71 ID:0BM2Z5Uf.net] おれも一瞬ではなく数分、>>703 の問題がわからなかった とりあえず頭にSet-StrictMode -Version Latestを付けとけばエラーにはなる
711 名前:デフォルトの名無しさん mailto:sage [2020/11/08(日) 10:11:33.41 ID:vf10kFcr.net] >>705 ありがとうございます。 >関数の内側で変数を書き換えてもローカルスコープ内の変数の更新にしかならないので、関数から戻ったら値は書き換わってない というのは、 >>703 だと、 同じシェル内にある$hogeであっても、 @get_stop_code関数内の$hoge Awhile ($true)内にある$hoge の2種類があり、 while ($true)内で、get_stop_code関数を実行しても、 @の$hogeしか書き換わらないから、求める結果が得られない。 って事でしょうか。
712 名前:デフォルトの名無しさん mailto:sage [2020/11/08(日) 12:20:50.04 ID:mlfH60EQ.net] そんな感じ 関数はローカルスコープを作る whileの方はその外側にあたるから親スコープになる ちなみにPSではwhileブロックはローカルスコープを作らないのでスクリプト全体のスコープと同じ
713 名前:デフォルトの名無しさん mailto:sage [2020/11/08(日) 14:40:55.27 ID:vf10kFcr.net] >>708 ありがとうございます。 スコープですね、勉強になりました。 きっと、しっかり理解すれば便利な仕様なんでしょうが、 初学者にとっては罠でしかありませんね・・・こういうの・・・。
714 名前:デフォルトの名無しさん mailto:sage [2020/11/08(日) 21:23:36.42 ID:TgcNdU0w.net] about_Scopes https://docs.microsoft.com/ja-jp/previous-versions/windows/powershell-scripting/hh847849(v=wps.640)
715 名前:デフォルトの名無しさん mailto:sage [2020/11/09(月) 11:42:35.91 ID:tOFQB4no.net] ダイナミックスコーン
716 名前:デフォルトの名無しさん [2020/11/09(月) 13:18:24.63 ID:hpK1fX+1.net] >>707 その前にシェルという単語の使い方がおかしい ファミリーベーシックで「ファミコン書きました」と言ってる感じで 恥ずかしいのでやめたほうがいい
717 名前:デフォルトの名無しさん mailto:sage [2020/11/09(月) 13:43:05.15 ID:6e3D9VGJ.net] シェルスクリプトはシェルスクリプトであってシェルではない
718 名前:デフォルトの名無しさん mailto:sage [2020/11/09(月) 18:13:48.88 ID:XoDGsHQu.net] 今どきファミリーベーシックに例えても人に通じないぜーっ!!
719 名前:デフォルトの名無しさん mailto:sage [2020/11/09(月) 18:47:25.54 ID:8i+JRxOJ.net] べーしっ君はもっと通じないだろw
720 名前:デフォルトの名無しさん mailto:sage [2020/11/09(月) 21:56:26.60 ID:zTstc6LM.net] ショットシェルだったら散弾のことでちょっとかっこいいぐらいなのに… hb-plaza.com/wp/wp-content/uploads/2013/12/00buck001.jpg
721 名前:デフォルトの名無しさん mailto:sage [2020/11/09(月) 22:20:12.83 ID:7qqOuQ5J.net] ちょっと知れるね
722 名前:デフォルトの名無しさん [2020/11/09(月) 22:31:51.42 ID:NYGqo7nG.net] ポンタポイントが付くか楽天ポイントが付くかの違いで基本的には一緒だよ
723 名前:デフォルトの名無しさん mailto:sage [2020/11/10(火) 02:41:01.00 ID:TotITmpP.net] スクリプトスコープ以外にも、関数スコープがあるのは便利。 C, Ruby と同じ 関数スコープが無い言語は、プログラミングが異常に難しい
724 名前:デフォルトの名無しさん mailto:sage [2020/11/10(火) 04:19:48.53 ID:UHXHz0W1.net] その程度の事で「異常に」難しいんじゃ向いてないんじゃない? 多少面倒臭いなと思う事はあっても
725 名前:デフォルトの名無しさん mailto:sage [2020/11/10(火) 04:24:34.34 ID:/n5BB76T.net] 再帰呼び出しで・・・
726 名前:デフォルトの名無しさん mailto:sage [2020/11/10(火) 09:42:32.98 ID:v1zmG+Gm.net] むしろローカル変数の恩恵に理解を示し、グローバル変数を強制されたら不安だと思う感性の方が普段たくさんプログラミングしてるんだろうなと感じる 変数iを使ったループの中でさらに別の変数iを使った関数を呼ぶと無限ループのバグになる 代わりにjにしようとか考えてると早晩行き詰まるので「i_関数名」みたいな変数名を常に使うことを思い付く 関数名は短くしたいと考えるようになって可読性がまずいことに 短いスクリプトしか書かない用途の言語ならいいけど、そうでないなら品質の低いコードを招く言語になるだろうな
727 名前:デフォルトの名無しさん mailto:sage [2020/11/10(火) 13:37:25.83 ID:xsn7mmhw.net] ローカルとグローバルの話はまあややこしいな
728 名前:デフォルトの名無しさん mailto:sage [2020/11/10(火) 13:43:57.86 ID:xsn7mmhw.net] 自分のいる世界の常識が他の場所で通用するかどうか それを生きていて初めて見せられた例がプログラミングのローカルとグローバルだった なんていうPCヲタも少なくないだろうなあw ブロック過ぎたらまっさらに戻る言語なら 関数が動かないと思ったらちゃんと戻り値にして出さないとなあ 報告連絡相談 と同じ
729 名前:デフォルトの名無しさん mailto:sage [2020/11/12(木) 08:30:03.86 ID:HWijez2q.net] Announcing PowerShell 7.1 https://devblogs.microsoft.com/powershell/announcing-powershell-7-1/
730 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 01:15:46.84 ID:TgKG6lgf.net] プログラム経験ほぼゼロの初心者です。 プログラムのコマンドラインの引数に変数を使うと上手く動作しません。 ttps://aji0.web.fc2.com/ ←ここのAviUtlControlというソフトを使ってコマンドラインでAviUtlに動画ファイルを送りたいんですが、 「& auc_open.exe(AviUltでコマンドラインからファイルを開くプログラム) "$args"」とすると 「ファイルの読み込みに失敗しました。このファイル形式には対応していないか対応するコーデックやプラグインが登録されていない可能性があります」 とエラーが出て読み込めません。 同じファイルを「& auc_open.exe "(読み込ませたいファイルのフルパス)"」とすると開けます。 「Start-Process -FilePath auc_open.exe "(読み込ませたいファイルのフルパス)"」とした場合auc_open.exe自体が動作しません。 書き方を間違えているでしょうか? 普通に開ける動画ファイルもあるので相性の問題かもしれないのですが…。
731 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 02:31:24.83 ID:8Ha10j62.net] >>726 Paramで宣言してないなら、$argsじゃなくて$args[0]じゃない? https://microsoftou.com/ps-arguments/ 文字列じゃなくて「配列」のまま渡しちゃってるんじゃないかな? Start-Process -FilePath auc_open.exeでauc_open.exeが開かないなら、auc_open.exeのあるディレクトリとは違うディレクトリで実行してるとか? auc_open.exeのあるディレクトリに移動するか、auc_open.exeをフルパスで指定してみたら?
732 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 03:29:17.05 ID:TgKG6lgf.net] ありがとうございます。$args[0]に書き換えてみましたが、結果は同じでした。 リンク先に従ってParam($Arg1)と一行目に書いてみると「空の文字列が渡されている」とエラーになりました。 もちろん$args1に書き換えています。 GetType().FullNameで$args[0]を調べてみましたが、System.Stringになっていました。 上記では省略しましたが、auc_open.exeはフルパスで書いています。 変数を使っていますが、write-hostで調べたところパスに間違いは無かったです。 windowsやpowershellのバージョンのせいな気もしてきた。windows10は1906でpowershellはバージョン5.1です。
733 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 03:41:57.52 ID:TgKG6lgf.net] あ、そうそう、このAviUtlControlというソフトは、もともとコマンドラインの無いAviUtlに 強引にコマンドラインを外付けにするため、実際の動作はAviUtlの「ファイルを開く」を遠隔操作しているだけみたいですね。 windowsのファイルを開くダイアログボックスが表示されるので。 そういう動作をしているのに、ps1ファイルにフルパスで直接ファイルを指定した場合は正常に開けて $argsを使ってps1ファイルにD&Dした場合は「ファイルが対応していない」というエラーが出るよく分からない挙動になります。 $argsもwrite-hostしてみましたが、ちゃんと目的のファイルがフルパスで格納されています。
734 名前:726 mailto:sage [2020/11/13(金) 03:56:04.19 ID:TgKG6lgf.net] $args[0]ではなく$argsをGetType().FullNameしてみるとsystem.object[]になっていました。 $args = [string]$argsとして文字列に変換してみましたが結果は同じ。 あと、$args[0]をwrite-hostしてみると拡張子の末尾に[0]がついていましたがこれは正常ですか?
735 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 05:04:21.79 ID:HX9sr4kC.net] >>726 & auc_open.exe(AviUltでコマンドラインからファイルを開くプログラム) "$args" ↓ & auc_open.exe(AviUltでコマンドラインからファイルを開くプログラム) $args それでだめなら & auc_open.exe(AviUltでコマンドラインからファイルを開くプログラム) $args[0] こんな簡単な話じゃ無いよなあ?
736 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 10:40:00.19 ID:3YZH6rMm.net] どうせパス名に()や[]が付いているというオチなんでしょ
737 名前:726 mailto:sage [2020/11/13(金) 12:38:30.15 ID:TgKG6lgf.net] >>731 >>728 で試しました。 バッチファイルで (フルパス)auc_open.exe %1 とし、動画ファイルをD&Dしたら正常に開けました。 powershellと動画の相性か、書き間違えているかです。 pastebinに貼っておきます。 ttps://pastebin.com/Dupj68Z4 このスクリプトで何がやりたいのかというと、録画したテレビ番組のCMカットするのに 動画ファイルを開く→音声ファイルを追加読み込みという手順を踏まなきゃいけないのをボタン一発で済ませたいんです。
738 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 13:31:59.37 ID:907SkV9V.net] "$args" は$argsって文字列と解釈されるから、 $argsは参照されない & $open "$args"は$argsという引数として解釈されてる "$m2v" + "*.wav"も$m2v*.wavと解釈される 変数を参照したいなら変数はダブルクォートで囲ってはダメ & $open $args $m2v + "*.wav" のようにする
739 名前:726 mailto:sage [2020/11/13(金) 13:57:21.84 ID:TgKG6lgf.net] >>734 ありがとうございます。結果は変わりませんでした。 最初に書いたように正常に開ける動画ファイルもあるので本当に相性問題かもしれません…
740 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 16:35:19.24 ID:907SkV9V.net] すぐ相性問題で解決したことに使用とする奴嫌い 変数内にダブルクォート付きの文字列を格納してないのは分かってる?
741 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 19:25:55.17 ID:pkjRHYH3.net] "$args"と書いたらinterpolationされるので$argsの内容は参照されるよ PSもモダンなので "my name is $name" みたいな書き方ができる リテラルになるのは'$args'と書いた場合 でも"$args[0]"と書いたらダメ どこまで変数でどこから文字列なのかが想定と合わない "$($args[0])"と書く必要がある [0]を付けないと配列への参照になるから"$args"だと引数間に改行コードが入る 読み込めない動画はパスに空白に含まれているのかもしれないな
742 名前:デフォルトの名無しさん [2020/11/13(金) 19:30:14.24 ID:34jLv13e.net] >>726 cmd[.]exe(コマンドラインと呼んでいるものの実体)に引数が渡るときの パースの問題の可能性がある フルパスに空白が入っているかどうかで成否が変わったりしない? "$args" を ""$args"" or `"$args`" にしてみたら
743 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 19:33:35.59 ID:pkjRHYH3.net] あと "$($args -join ' ')" も試すといいかもな
744 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 19:37:05.80 ID:pkjRHYH3.net] これスペースが連続するファイル名があると失敗するな… 切り分けにはなるからいいか
745 名前:デフォルトの名無しさん [2020/11/13(金) 19:40:36.71 ID:lrdHTx5A.net] psって難しいんだな
746 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 19:55:31.96 ID:8Ha10j62.net] >>728 $argsは配列なので、その中身の一番目を取り出すために$args[0]って書くってことだよ 自分でGetTypeして$argsはobject[]、$args[0]はStringだって確認出来てるじゃん それに加えて、$argsを書き換えて使うのは混乱するから、$args = [string]$args じゃなくて、$m2v = $args[0] みたいにして、$m2vの方を使ったら? その上で、>>734 のアドバイスに従って修正したものをpastebinに貼ってみて 相性が気になるなら、「正常に開けない動画ファイル」を「正常に開ける動画ファイル」と同じ場所に同じ名前で置いてみて開けるなら相性じゃないって確認できるよ c:\abc.m2v ←開ける d:\[movie]\zz xyz.m2v ←開けない みたいな状況だとして、(abc.m2vを退避してから)zz xyz.m2vをabc.m2vにリネームしてc:\に置いてみたら開けるんじゃないかな?
747 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 20:45:29.62 ID:HX9sr4kC.net] >>738 >フルパスに空白が入っているかどうかで成否が変わったりしない? 空白とかマルチバイトとかあっちの問題か!
748 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 21:24:00.55 ID:34jLv13e.net] >>738 \"$args\" かも 昔自分で書いたもののひとつはそうなってた 理由の説明はできん
749 名前:デフォルトの名無しさん [2020/11/13(金) 21:28:03.15 ID:n6TD+JMZ.net] ぱわーしぇるがシェルではない事が証明されたな
750 名前:デフォルトの名無しさん mailto:sage [2020/11/13(金) 23:47:58.29 ID:LLS1FCOb.net] ファイルパス・ユーザー名に、空白・日本語を使うと、バグる。 半角英数字・ハイフン・アンダーバーだけにする Windows のパスには、空白が入っているものがあるので、ヤバイ
751 名前:726 mailto:sage [2020/11/14(土) 00:23:47.78 ID:8FDial4y.net] あああああ原因分かったあああ! 全角スペースだああ! 駄目なファイルの全角スペースを削除したら読み込めました! しかし修正方法が分からない…。とりあえず>>742 さんの言う通り$m2v = $argsとして、以下ここで貼られていた改善案の結果 "$args"の場合:$m2vの中身→フルパス $args[0]の場合:$m2vの中身→最初の半角スペースまで ""$args"" →スクリプト自体がすぐに終了 `"$args`" →コマンドレット、関数、スクリプトファイル、または操作可能なプログラムの名前として認識されていません。 "$($args -join ' ')" →ファイル読み込みに失敗 $m2vの中身→フルパス \"$args\" →コマンドレット、関数、スクリプトファイル、または操作可能なプログラムの名前として認識されていません。 "$($args[0])"→ファイル読み込みに失敗、$m2vの中身は最初の半角スペースまで 正直$args[0]を理解できてない気がします。殆ど変わってませんが、とりあえずpastebinに貼っておきます。ttps://pastebin.com/AQZqQ6aX
752 名前:726 mailto:sage [2020/11/14(土) 01:10:54.25 ID:8FDial4y.net] あ、下記忘れましたが"$args"と$args[0]も最初と変わらずファイル読み込みに失敗します。
753 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 01:52:08.34 ID:OfQ57GBv.net] -joinじゃ空白の連続があるとバグることには気付いてたけど、PSが全角空白をホワイトスペースとして扱うのは盲点だったわ こういうところPSは厄介だな…… そのスクリプトは呼び出された時点で既に引数が復元不能になってるので、スクリプトの呼び出し元を変える必要がある powershell C:¥your-script.ps1 "a b c.avi" のように呼び出しているのだとしたら powershell -file C:¥your-script.ps1 "a b c.avi" と書き換えると動く ちなみにスクリプト内でParamを明示的に定義して powershell C:¥your-script.ps1 -oreore_arg0 "a b c.avi" のように呼んでもいいらしい
754 名前:726 mailto:sage [2020/11/14(土) 03:06:15.72 ID:8FDial4y.net] >>749 行けました! ありがとうございます! 後半の意味がちょっと分からないんですが、動画ファイル名を明確にしろということでしょうか?
755 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 04:21:18.02 ID:C2BVBS/P.net] 引数をシングル・ダブルクォーテーションで囲む事で、 1つの引数として解釈される 囲っていないと、複数の引数として解釈されてしまうから こういうのは、Linux では、うるさいぐらいに注意する
756 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 05:26:16.13 ID:/XxpwyFY.net] 最初にPCに自分の名前を流用した名前を付ける時点で 半角英数にする、空白入れないというのを徹底しないと自動化には程遠い
757 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 05:35:00.14 ID:YIajn/qh.net] おめやで(*´▽`*)
758 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 07:04:37.55 ID:4EKVBZXC.net] おめやで?
759 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 10:49:04.93 ID:OfQ57GBv.net] >>750 自分で引数名を定義して渡すやり方 引数ひとつひとつの範囲を明確にできるのでPSにおかしな解釈をされようがなくなる どちらかというと経験者向けの参考として書いたから動いたなら気にしなくていいと思う Powershell Paramで検索したら詳しく出てくる
760 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 11:12:05.60 ID:OfQ57GBv.net] >>751 今回はその常識に反するPS固有の問題だよ powershell C:¥foo.ps1 "a b c" d e f # 全角半角空白混在 のように書くと、経験的な常識では $args[0] = "a b c" $args[1] = "d" $args[2] = "e f" の3つに分解されることを期待するけど、今回は a 〜 f が全部バラされて$argsは6個の配列になるという事象 経験から問題を矮小化しがちになるのは老化による成長鈍化だと思う 自戒を込めて
761 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 11:18:40.57 ID:xztQReuw.net] 省略しないで実際に流したコマンドをそのまま晒したほうがいいような気はする せいぜい数行だろうし
762 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 13:03:46.86 ID:eAmLQM6Q.net] WindowsのD&Dによるバグ仕様を回避するためにはpathに半角spを含めておいた方が良い
763 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 14:43:52.28 ID:vnxWLQnj.net] >>756 > a 〜 f が全部バラされて$argsは6個の配列になる どのバージョンだよ 5.1、7.0、7.1で試したけど $args[0] は "a b c"、$args.Length は 4 になるぞ
764 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 15:37:31.99 ID:OfQ57GBv.net] >>759 バージョン5.1をcmdから呼び出して確認した 再現しなかったのは-fileを指定したからじゃない?
765 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 15:44:28.74 ID:cwgCwaC3.net] >>759 Windowsのパラメーターの分解は呼ばれ側プロセスで処理すんだけど powershellは起動時のバージョンと実行時のバージョンが違うことがある powershellのバージョン違いを複数入れてる場合が恐らく該当する 引数4になるパターンはpowershellバージョン2で実行されてる powershell -v 2 で起動した場合は引数4 powershell -v 5 は全部バラけて引数6 俺はこういうバグだか仕様だかに付き合うの嫌だから一時ファイルや環境変数とかでやりとりする
766 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 16:04:59.98 ID:cwgCwaC3.net] [Environment]::CommandLine や [Environment]::GetCommandLineArgs() を使うとpowershellに因らない.NETで処理したパラメーターが得られるからこれが安全かもね
767 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 16:05:13.61 ID:OfQ57GBv.net] -v 2 で起動したらたしかに引数4になったけど $args[0] は a になったわw -v 2 だと全角スペースが区切りとして解釈されない
768 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 16:21:10.31 ID:OfQ57GBv.net] 原理はこんな感じかな? まずPS外から呼び出したときは引数はいわゆる普通にparseされる powershell C:¥foo.ps1 "a b c" d e f → C:¥foo.ps1、"a b c"、d、e f の4引数 powershell.exeに-fileも-commandも指定されなかったとき、powershellはすべての引数を-commandの対象として扱う powershell.exeは引数をワンライナーのスクリプトとして処理しようとする 複数に分割されて受けたパラメーターをコードで例えると $args -join ' ' のような残念な方法で結合する & "C:¥foo.ps1 a b c d e f" 相当のスクリプトが実行される 全角スペースを区切りと見なすかどうかはPSのバージョン次第
769 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 20:24:33.59 ID:6rE1W4Lt.net] シングルクォーテーションならいけるんじゃなかったっけ
770 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 20:25:14.57 ID:ojc3zNUJ.net] これはひどい PS由来の機能は信用しない方がいいな
771 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 21:14:45.67 ID:BVcYkKlk.net] 全角スペースを許すプログラミング言語まとめ https://pronama.jp/2015/09/06/allows-ideographic-space-programming-languages/
772 名前:デフォルトの名無しさん mailto:sage [2020/11/14(土) 21:25:00.22 ID:OfQ57GBv.net] >>765 シングルで試したらいけたわw シングルならPS外では単なる文字として扱われるからcmdから呼び出したとき C:¥foo.ps1 'a b c' d e f の5引数になって、連結結果は & "C:¥foo.ps1 'a b c' d e f" 相当になるからうまくいく模様
773 名前:デフォルトの名無しさん mailto:sage [2020/11/16(月) 22:11:59.00 ID:ssVCI5qt.net] Excelのセル内の文字列全部ではなく、セル内の一部の文字列だけ文字色を変更する事は出きますか?
774 名前:デフォルトの名無しさん mailto:sage [2020/11/16(月) 22:33:49.14 ID:lpvH3HhJ.net] 自決しました。かおもじ
775 名前:デフォルトの名無しさん mailto:sage [2020/11/27(金) 20:48:34.28 ID:0Gsdb/Fk.net] >>756 powershell C:\foo.ps1 "a` b` c" d e` f
776 名前:デフォルトの名無しさん mailto:sage [2020/11/28(土) 20:01:43.24 ID:ako3hAti.net] .Net Frameworkの質問になるかもしれんが、Powershellから使うのでこちらに 対話型のスクリプト作っててユーザーからファイルやフォルダのパスの入力を求めるのにGUIにしようと思って System.Windows.Forms.FolderBrowserDialogとか FileBrowserDialogとかを使ってやろうとしてますが、 ダイアログ画面が他のウインドウに隠れてユーザーが気づきません。 最前面表示させるにはどうすればよいでしょうか?
777 名前:デフォルトの名無しさん mailto:sage [2020/11/28(土) 21:23:54.75 ID:ako3hAti.net] 自決しました。 topmostプロパティをtrueに設定したFormオブジェクトを FolderBrowserDialogオブジェクトのShowDialogメソッドの引数に渡すんですね。 こういう方法はマニュアル読んでもまったくわからない。苦手。
778 名前:デフォルトの名無しさん mailto:sage [2020/11/28(土) 22:56:50.75 ID:goyIH8CW.net] >>773 待て早まるな
779 名前:726 mailto:sage [2020/12/03(木) 20:12:26.39 ID:AP2X4U04.net] >>726 です。先日は貴重なアドバイスをどうもありがとうございました。 申し訳無いんですがまた詰まってしまったので助けて下さい。 Trim(2505,6665) ++ Trim(9815,34297)〜 という内容のテキストファイルを整形して 2505 6665 9815 34297 という形にしたいんですが、改行が出来ません。 ttps://orahoview.com/replacetextinfilebypowershell/ ここを参考に $utltrimfile = $(Get-Content (テキストファイルのパス)) -replace ") ++ Trim(" "`n" $utltrimfile = $trimfile -replace "," "`n" $utltrimfile > (テキストファイルのパス) と書いてみたんですが「`nを使用できません」とエラーが出ます。\nでも同様の結果でした。 改行をする方法はありますか?
780 名前:デフォルトの名無しさん mailto:sage [2020/12/03(木) 20:44:02.20 ID:gj1mOZdT.net] >>775 数字以外が出てきたらそこで区切ることで配列にする 配列要素のうち空文字列であるものを除外 配列をまるごとファイルにリダイレクトして改行された出力結果を得る $utltrimfile = $(Get-Content (テキストファイルのパス)) -split '\D' | ?{$_ -ne '' } $utltrimfile > (テキストファイルのパス)
781 名前:726 mailto:sage [2020/12/03(木) 21:29:21.46 ID:AP2X4U04.net] 出来ました! ありがとうございました!
782 名前:デフォルトの名無しさん [2020/12/07(月) 00:00:56.83 ID:8Ddysj0U.net] PowerShellにinterfaceありますか? 空のクラス定義するしかないですか?
783 名前:デフォルトの名無しさん mailto:sage [2020/12/07(月) 00:09:24.05 ID:rAKRPC/o.net] ■Powershellコマンドを実行する PS C:\Users\hoge> Get-NetIPConfiguration InterfaceAlias : Wi-Fi InterfaceIndex : 10 InterfaceDescription : TP-Link Wireless USB Adapter NetProfile.Name : Buffalo-A-428D (以下略) なんかたくさん出る ■(Powershellコマンド).列の名前 を実行する PS C:\Users\hoge> > (Get-NetIPConfiguration).NetProfile.Name Buffalo-A-428D .列の名前で指定したものしか出ない。 こういう(コマンド).列名っていうので、出力を絞る方法に名前ってありませんか?
784 名前:デフォルトの名無しさん mailto:sage [2020/12/07(月) 00:52:35.54 ID:fL+10lW/.net] grep
785 名前:デフォルトの名無しさん mailto:sage [2020/12/07(月) 00:55:50.26 ID://YuCj5S.net] interfaceってたぶんJava的な意味でのやつか
786 名前:デフォルトの名無しさん [2020/12/07(月) 00:57:24.19 ID:8Ddysj0U.net] >>781 そうなのよ
787 名前:デフォルトの名無しさん mailto:sage [2020/12/07(月) 01:07:36.68 ID:nVLltyNc.net] : だね
788 名前:デフォルトの名無しさん mailto:sage [2020/12/07(月) 07:14:39.74 ID:Zb+BuNXc.net] >>779 . はプロパティ逆参照演算子だよ Property dereference operator
789 名前:デフォルトの名無しさん mailto:sage [2020/12/07(月) 07:24:15.67 ID:Zb+BuNXc.net] . で出力を絞る方法、正確には対象を選ぶ方法は、一般的にはプロパティアクセスが該当するかな
790 名前:デフォルトの名無しさん mailto:sage [2020/12/07(月) 08:49:51.37 ID:Qq2AGx/W.net] メンバーアクセス演算子 . https://docs.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_operators#member-access-operator- オブジェクトのプロパティおよびメソッドにアクセスします。 メンバー名は式にすることができます。 $myProcess.peakWorkingSet (Get-Process PowerShell).kill() 'OS', 'Platform' | Foreach-Object { $PSVersionTable. $_ }
791 名前:デフォルトの名無しさん mailto:sage [2020/12/07(月) 15:48:31.93 ID:5uzreY+I.net] copy-itemでディレクトリを指定して、内部のファイルがパス260文字以上でエラーを出すとき、そのパスを取得する方法はあります?
792 名前:デフォルトの名無しさん mailto:sage [2020/12/07(月) 16:04:01.41 ID:8iO4bdx+.net] >>787 Set-ItemProperty "Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem" -Name LongPathEnabled -Value 1
793 名前:デフォルトの名無しさん mailto:sage [2020/12/07(月) 18:20:51.52 ID:5uzreY+I.net] >>788 ありがとう ただそのやり方はwin10にしか出来ないようで、win8.1ではLongPathEnabledは存在しないようです ググってもLongPathEnabledのwin8.1版は見つからないもので……
794 名前:デフォルトの名無しさん mailto:sage [2020/12/07(月) 22:33:03.33 ID:wvARFKZP.net] >>789 単に制限回避したいなら \\?\ 使えば良いんじゃないかな https://stackoverflow.com/a/53099257 https://superuser.com/a/760601 そうじゃなくて、260文字以上のパスを探したいなら、そういうツールがいくつかあるよ https://sourceforge.net/projects/tlpd/
795 名前:デフォルトの名無しさん mailto:sage [2020/12/07(月) 23:37:26.80 ID:5uzreY+I.net] >>790 試してみます ありがとなす
796 名前:デフォルトの名無しさん mailto:sage [2020/12/08(火) 15:51:45.96 ID:CDSpQQd3.net] 外部コマンド | PowerShellの関数って風にパイプでつないで処理するとき 出力側が終わるまで一旦全部バッファリングしてから、ようやくPowerShellに処理が移る感じになるんですが 並列で処理するようにするにはどうすればいいでしょうか?
797 名前:デフォルトの名無しさん mailto:sage [2020/12/10(木) 21:12:35.73 ID:6BQNLUy5.net] #1個めループ for($i=0; $i -le 10; $i++) { $hoge="ikkaime_" Write-Output $hoge$i } #2個めループ for($i=0; $i -le 10; $i++) { $hoge="nikaime_" Write-Output $hoge$i } これを1個のforにまとめる素敵なアイデアございませんでしょうか。 何がしたいかというと、1個めのループ(10回)が終わったら、$hogeをniakieme_にして、 もう10回ループさせて終わるようにしたいです。
798 名前:デフォルトの名無しさん mailto:sage [2020/12/10(木) 21:25:03.78 ID:3lwwmG32.net] $hoge="ikkaime_" for($i=0; $i -le 20; $i++) { if ($i -eq 10) { $hoge="nikaime_" } Write-Output $hoge$i }
799 名前:デフォルトの名無しさん [2020/12/10(木) 21:59:45.86 ID:/iej8cKu.net] foreach ($hoge in 'ikkaime_', 'nikaime_') { for ($i = 0; $i -lt 10; $i++) { Write-Output $hoge$i } }
800 名前:デフォルトの名無しさん mailto:sage [2020/12/10(木) 23:27:25.70 ID:uqnVDABe.net] $ikkaime = @() $nikaime = @() for($i = 0; $i -le 10; $i++) { $ikkaime += "ikkaime_$i" $nikaime += "nikaime_$i" } Write-Output $ikkaime Write-Output $nikaime
801 名前:デフォルトの名無しさん mailto:sage [2020/12/11(金) 03:49:50.69 ID:bpjP0VBu.net] "ikkaime_","nikaime_"|%{$hoge=$_;0..9|%{$hoge+$_}}
802 名前:793 mailto:sage [2020/12/11(金) 23:44:28.19 ID:YtFbF7ro.net] ありがとうございました。 書き方がいくつもあるんですね。 非常に脅されたました。 ありがとうございます。 ちなみに、>>795 で処理しました。
803 名前:デフォルトの名無しさん mailto:sage [2020/12/11(金) 23:55:43.98 ID:BGcESmPN.net] インクリメントのループはこう書いたほうがスッキリする foreach ($i in 0..9) {
804 名前:デフォルトの名無しさん mailto:sage [2020/12/13(日) 00:05:08.43 ID:w0iK+TRN.net] >>797 こういうパイプがネストしてるのに違和感あるんだけど 多少効率悪くてもパイプ1本にできないかな
805 名前:デフォルトの名無しさん [2020/12/13(日) 01:22:24.35 ID:cCJaeZ7C.net] for ($i=1; $i -le 2; $i++){ Switch($i) { 1 {(1..10) | %{"ikkaime_"+$_}} 2 {(1..10) | %{"nikkaime_"+$_}} } }
806 名前:デフォルトの名無しさん mailto:sage [2020/12/13(日) 07:32:06.23 ID:5EW0FlRD.net] パイプは繋げてナンボ UNIX文化からの流れで、シンプルなコマンド群からの組み合わせの可能性は無限大 長いパイプラインが違和感? いやロシアからウクライナを経由してドイツまで延びてもいい…!ゴルビーもそう言ってるよ
807 名前:デフォルトの名無しさん mailto:sage [2020/12/13(日) 08:18:38.20 ID:6TpS+NE1.net] 0..9 | % { "ikkaime_$_"; "nikaime_$_" } | sort
808 名前:デフォルトの名無しさん mailto:sage [2020/12/13(日) 08:21:28.01 ID:7zDtZqQK.net] function hoge($fuga) { 0..9 | ForEach-Object {Write-Output "$fuga$_"} } hoge 'ikkaime' hoge 'nikaime'
809 名前:デフォルトの名無しさん mailto:sage [2020/12/13(日) 08:23:17.62 ID:7zDtZqQK.net] >>800 "ikkaime_","nikaime_" | %{$hoge=$_;0..9} | %{$hoge+$_}
810 名前:デフォルトの名無しさん mailto:sage [2020/12/13(日) 10:24:56.32 ID:aJyBOeQT.net] >>802 長いパイプじゃなく、パイプライン処理の名にそぐわない、 行って帰ってくるようなネストされてるのが気持ち悪い
811 名前:デフォルトの名無しさん mailto:sage [2020/12/13(日) 20:15:51.92 ID:w0iK+TRN.net] >>803 >>805 そうそうこういうのがいいね
812 名前:デフォルトの名無しさん mailto:sage [2020/12/13(日) 22:17:37.96 ID:aJyBOeQT.net] ゴルビーのパイプライン大作戦にだって行って帰ってくるようなパイプは無いだろ
813 名前:デフォルトの名無しさん mailto:sage [2020/12/14(月) 13:38:52.97 ID:MCQs+fzK.net] 変数を事前に全部固めた書いたほうがわかりやすいと思うのですが、 ループ前に定義した変数の値に、ループ時の変数を入れ込む方法がわかりません $mynameis変数をループ中(コメントの位置)に持ってくると、問題ないんですが、 なんとか#変数ってしてあるところにもってきたいんです 定義したときには空で、あとから追加で変数に値をいれることってできないんでしょうか? ソース #変数 $watashi = "私は" $fname = "佐藤" $mynameis = "$watashi$fname$lname" foreach ($lname in "一郎","二郎","三郎"){ #$mynameis = "$watashi$fname$lname" #名を名乗る Write-Output $mynameis }
814 名前:デフォルトの名無しさん [2020/12/14(月) 14:58:28.73 ID:0uVb17k3.net] $mynameis = { "$watashi$fname$lname" } $watashi = "私は" $fname = "佐藤" foreach ($lname in "一郎","二郎","三郎"){ #名を名乗る Write-Output (mynameis) }
815 名前:デフォルトの名無しさん [2020/12/14(月) 15:01:37.07 ID:0uVb17k3.net] >Write-Output (mynameis) Write-Output (&$mynameis) こうかも、PowerShell難しすぎ
816 名前:デフォルトの名無しさん mailto:sage [2020/12/14(月) 21:21:03.56 ID:vj7TAroN.net] foreachはスコープ作らなかったと思うけど 何が問題なの?
817 名前:デフォルトの名無しさん mailto:sage [2020/12/14(月) 21:31:50.90 ID:vj7TAroN.net] ごめんようやく理解した 最初にNew-Variableなり空文字で宣言するだけじゃ納得いかんのかな 変数が自動で書き変わるのは正直気持ち悪い
818 名前:デフォルトの名無しさん mailto:sage [2020/12/14(月) 21:43:34.54 ID:MBsazS7x.net] $watashi = "私は" $fname = "佐藤" $mynameis = "$watashi$fname{0}" foreach ($lname in "一郎","二郎","三郎"){ Write-Output ($mynameis -f $lname) }
819 名前:デフォルトの名無しさん mailto:sage [2020/12/14(月) 22:30:25.12 ID:LFps+YXF.net] モダンな言語を使って書くレガシープログラミングだね 先頭宣言教から改宗してもらうのが一番丸く収まるとか言ったらダメなんだろうな
820 名前:デフォルトの名無しさん mailto:sage [2020/12/14(月) 22:33:35.98 ID:/tZ0PSGV.net] そこは鈴木にしようぜ
821 名前:デフォルトの名無しさん mailto:sage [2020/12/14(月) 23:10:29.87 ID:EXeKWskh.net] できないことはないってだけで、やめたほうがいい 他の人がコードを読む時にとても困惑させるし 半年後に自分が読んでも理解に苦しむかもしれない
822 名前:デフォルトの名無しさん mailto:sage [2020/12/14(月) 23:57:40.98 ID:CBAGo1je.net] 意外とPerl的なスパゲッティの罠がある言語なのね
823 名前:デフォルトの名無しさん mailto:sage [2020/12/15(火) 03:55:48.18 ID:eKJAj5sp.net] >>810 みたいにスクリプトブロックで評価順序制御するのは別におかしくないと思うけど
824 名前:デフォルトの名無しさん mailto:sage [2020/12/15(火) 07:38:16.79 ID:T2M/UCWI.net] 変数宣言を冒頭に集めるという、昔の言語ではルールだったけどデメリットの方が多いとして廃れた風習 その実現にスクリプトブロックを多用するのは可読性を落とすからやめとけという話じゃないかな 古典言語には存在しなかった文字列補間は、宣言したスコープで即時解決されるものだから冒頭部でリテラルを宣言する風習と相性が悪い 記法が似ていて混同したのだろうけど、質問者が暗に期待していたであろうフォーマットパターン文字列としてはPowershellでは -f 演算子が用意されているのでそれを使えばいい
825 名前:デフォルトの名無しさん mailto:sage [2020/12/15(火) 07:38:27.49 ID:T2M/UCWI.net] この話をPowershellの罠とされてしまうのはさすがにかわいそう
826 名前:デフォルトの名無しさん mailto:sage [2020/12/15(火) 13:15:17.29 ID:HMGpB1Xp.net] $watashi = "私は" $fname = "佐藤" $lname = "一郎","二郎","三郎" $lname.ForEach{Write-Output "$watashi$fname$_"}
827 名前:デフォルトの名無しさん mailto:sage [2020/12/15(火) 13:34:51.98 ID:/uFuBiiy.net] "私は"と"佐藤"を分ける意味がない 気持ちは分からなくもないけど
828 名前:デフォルトの名無しさん mailto:sage [2020/12/16(水) 09:44:04.15 ID:VCJoAcsJ.net] 1. webからテキストをDLしてカレントディレクトリに Shift-JIS で保存したい。どう書けばいいですか? https://example.com/test.txt 文字コード:UTF-8 コマンドプロンプトから以下でDL出来るのまでは調べて分かったんだけど文字コードを変えて保存するのが分かりません powershell -Command "Invoke-WebRequest https://example.com/test.txt -OutFile test.txt" コマンドプロンプトにコピペかバッチから使いたいのでワンライナーで出来ると嬉しいです 2. 1に似た処理でweb上のUTF-8のtest.txtをカレントディレクトリのShift-JISのabc.txtに追記したい こちらもコマンドプロンプトから powershell -Command "〜 みたいに出来ればワンライナーで
829 名前:デフォルトの名無しさん mailto:sage [2020/12/16(水) 13:22:09.75 ID:JHzHImy2.net] >>824 Invoke-WebRequestのOutFileオプションじゃなくて、EncodingオプションのあるOut-Fileコマンドレットの方を使ったら? (cmdじゃなくてpowershellから実行すれば、powershell -Command ""の部分はいらないよ) Invoke-WebRequest https://example.com/test.txt | Out-File -Encoding default test.txt 追記するなら、Appendオプション Invoke-WebRequest https://example.com/test.txt | Out-File -Encoding default abc.txt -Append
830 名前:デフォルトの名無しさん mailto:sage [2020/12/16(水) 19:10:36.45 ID:VCJoAcsJ.net] >>825 レスありがとうございます。ですが出来ませんでした Fileは作られるのですが内容が以下のようになります StatusCode : 200 StatusDescription : OK Content : ここに中身が複数行 尻切れ RawContent : HTTP/1.1 200 OK Connection: keep-alive x-robots-tag: noarchive, nofollow, noindex なんか色々 Forms : {} Headers : 諸々 Images : {} InputFields : {} Links : {} ParsedHtml : mshtml.HTMLDocumentClass RawContentLength : 中身、Content +尻切れ部分 で保存するにはどう書けばいいですか? Win10.0.18363.1256 PSVersion 5.1.18362.1171
831 名前:デフォルトの名無しさん mailto:sage [2020/12/16(水) 20:03:25.26 ID:kYgyiRJ/.net] (Invoke-WebRequest https://example.com/test.txt).Content | Out-File -Encoding default test.txt
832 名前:デフォルトの名無しさん mailto:sage [2020/12/16(水) 20:37:34.73 ID:VCJoAcsJ.net] >>827 出来ました!ありがとうございます! なんかオリジナル(UTF-8 LF)に比べ変換した(Shift-JIS CRLF)では末尾に改行コード1つ余分に追加されてしまいますが。。 バッチで読み直して再保存すれば行けそうです やりたいことが可能になりました。感謝!
833 名前:デフォルトの名無しさん mailto:sage [2020/12/16(水) 21:11:10.07 ID:CXRufgbD.net] >末尾に改行コード1つ余分に追加されてしまいます こういうの気持ち悪い! 誰か助けてあげて!
834 名前:デフォルトの名無しさん mailto:sage [2020/12/16(水) 23:24:39.55 ID:kYgyiRJ/.net] ググって出てくるやつだとPowershellのVer5以上なら (Invoke-WebRequest https://example.com/test.txt).Content | Out-File -Encoding default test.txt -NoNewline
835 名前:デフォルトの名無しさん mailto:sage [2020/12/16(水) 23:38:36.87 ID:VCJoAcsJ.net] >>829 ありがとうございます。私もモヤモヤしてたので調べて報告するつもりでした >>830 ありがとうございます -NoNewline で末尾改行追加されませんがLFのままになってしまうようです たぶんLFをCRLFにreplaceしてからOut-File -NoNewline で行けそうかも、というところまで来ていたのですが、、 置換のコマンドレットが分からず苦戦しています
836 名前:デフォルトの名無しさん mailto:sage [2020/12/17(木) 04:50:30.78 ID:aeRfyZfG.net] >>831 .NETのString.Replace()
837 名前:デフォルトの名無しさん mailto:sage [2020/12/17(木) 05:23:59.73 ID:P27ySftq.net] powershell -Command "%{((Invoke-WebRequest https://example.com/test.txt).Content) -join '`r`n'}|Out-File abc.txt -Encoding default -Append -NoNewline" powershell -Command "%{((Invoke-WebRequest https://example.com/test.txt).Content) -replace '`n,`r`n'}|Out-File abc.txt -Encoding default -Append -NoNewline" リファレンスとにらめっこし何百回と色々試してこれに行き着いてこれなら行けそうと思ったのですがLFのまま。。 Get-ContentとかSet-Contentとかも試してみたのですが基礎的な書き方も知らず当てずっぽうではダメなようです 基礎的な事から覚えないとちょっと自分には無理かもです^^;
838 名前:デフォルトの名無しさん mailto:sage [2020/12/17(木) 11:05:46.69 ID:IMvwa6Jv.net] >>833 -replace '`n,`r`n' のところは -replace '`n','`r`n' じゃない? https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_comparison_operators?view=powershell-5.1#replacement-operator
839 名前:デフォルトの名無しさん mailto:sage [2020/12/17(木) 11:14:10.52 ID:aoellUFv.net] SurfacePro8の、一応待たれてはいるがあまり期待されてない感は異常
840 名前:デフォルトの名無しさん mailto:sage [2020/12/17(木) 14:29:13.42 ID:hxo0ZZXM.net] >>833-834 "`n", "`r`n" じゃねーの?
841 名前:デフォルトの名無しさん mailto:sage [2020/12/17(木) 17:50:06.55 ID:P27ySftq.net] >>836 ヒントありがとうございます 最終的に以下で出来ました ren jane2ch.brd jane2ch.brd.bak &© jane2ch.brd.bak jane2ch.brd &&powershell -Command "(Invoke-WebRequest https://example.com/bbsmenu.brd).Content -replace \"`n\",\"`r`n\"|Out-File jane2ch.brd -Encoding default -Append -NoNewline" アドバイス下さった方皆ありがとう
842 名前:デフォルトの名無しさん mailto:sage [2020/12/18(金) 21:36:03.86 ID:NKeMhQjy.net] Invoke-WebRequestはaliasで短くできるよ (Get-Alias -Definition Invoke-WebRequest).Name curl iwr wget Out-Fileはaliasが無い
843 名前:デフォルトの名無しさん mailto:sage [2021/01/01(金) 16:52:16.58 ID:jgut+Hkv.net] 関数とクラスメソッドでreturnまわりの振舞い全然違うのかよ ほんまクソやな
844 名前:デフォルトの名無しさん mailto:sage [2021/01/01(金) 17:32:29.13 ID:iwrlPpxO.net] 自分が言語を知らないだけなのに言語を叩くやつは技術力があれだって書込みをLinuxスレで見た 謙虚になって勉強もせずに自分の知ってる言語に固執するらしい
845 名前:デフォルトの名無しさん mailto:sage [2021/01/01(金) 18:39:57.15 ID:K4bi2CUk.net] 詭弁だね
846 名前:デフォルトの名無しさん mailto:sage [2021/01/02(土) 12:59:00.83 ID:6NGWiCza.net] そんなウンコになるほど振る舞い違ったっけ
847 名前:デフォルトの名無しさん mailto:sage [2021/01/02(土) 14:38:10.21 ID:SsQKjWAu.net] 関数のreturnは単に関数を抜けるだけ 出力はストリームを使う クラスのメソッドはreturn文でのみ値を返す 多くの言語でよくみられるやつ Write-Outputしても無視される
848 名前:デフォルトの名無しさん [2021/01/02(土) 14:45:10.44 ID:o3T1iAcx.net] 変数のスコープも違うよねー function f() { echo $a } $a = "test" f 関数はこれが気持ち悪すぎてメソッドしか使わなくなった
849 名前:デフォルトの名無しさん mailto:sage [2021/01/03(日) 01:23:46.88 ID:RCSnKIYE.net] >>843 ,844 なるほどありがd
850 名前:デフォルトの名無しさん [2021/01/03(日) 01:30:49.55 ID:BT1KEPia.net] 質問です。 .NETのKeyedCollectionクラスを使用したいのですが、 パイプラインに関するエラーメッセージが出てうまくいきません。 解決方法を教えていただけませんか。 環境はWindowsPowerShell 5.1をVSCode上で実行しています。 ソースコードとエラーメッセージは下記のとおりです。 ◆ソースコード class Record { [string] $Key [double] $Data } class MyCollection : System.Collections.ObjectModel.KeyedCollection[string, Record] { [string] GetKeyForItem([Record] $item) { return $item.Key } } $r = [Record]@{ Key = "pi"; Data = 3.14 } $c = [MyCollection]::new() $c.Add($r) $c["pi"].Data # 3.14と表示されてほしい ◆エラーメッセージ: パイプラインの作成中にエラーが発生しました。 + CategoryInfo : NotSpecified: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : RuntimeException 以上、よろしくおねがいします。
851 名前:デフォルトの名無しさん mailto:sage [2021/01/03(日) 04:03:05.06 ID:leX2V3Ud.net] クラスごとにファイル分けてドットソースで読み込んで
852 名前:デフォルトの名無しさん mailto:sage [2021/01/03(日) 04:09:59.45 ID:ORVbOLX2.net] >>847 うちでも再現したわ Win10 1909 一応定義をC#で書いたら動いたから載せておく Add-Type @" public class Record { public string Key; public double Data; } public class MyCollection : System.Collections.ObjectModel.KeyedCollection<string, Record> { protected override string GetKeyForItem(Record item) { return item.Key; } } "@ $r = [Record]@{ Key = "pi"; Data = 3.14 } $c = [MyCollection]::new() $c.Add($r) $c["pi"].Data # 3.14と表示されてほしい
853 名前:デフォルトの名無しさん mailto:sage [2021/01/03(日) 04:29:20.63 ID:ORVbOLX2.net] ごめん >>846 宛ね >>847 まじですか でもPSの運用的にクラス定義で複数ファイルに分けるとかありえないわ コンソールからだと丸ごとコピペじゃなくて定義を1個ずつコピペするとエラーにならないし なんなのかね
854 名前:デフォルトの名無しさん mailto:sage [2021/01/03(日) 08:40:29.46 ID:MW0NgZmT.net] PowerShellのclassってどの段階で解釈されるんだろう
855 名前:デフォルトの名無しさん mailto:sage [2021/01/03(日) 12:17:05.18 ID:n1qZMfJK.net] 実行文が入っていない 単にコンパイルされる文、型の宣言・定義しか入っていない。 インスタンスを作ったりする、実メモリの割り付けをされる文がない
856 名前:846 [2021/01/03(日) 17:02:17.09 ID:BT1KEPia.net] >>851 クラス定義のps1ファイルの中身はそうすべき、ということでしょうか? >>849 確かにコンソールで全て定義すると動きますね。 クラス周りの動きが難しいです。。。 >>847 ありがとうございます。 下記のように書き直したところうまく動きました。 ◆Record.ps1 class Record { [string] $Key [double] $Data } ◆MyCollection.ps1 . .\Record.ps1 # ←これは無くても動く…?? class MyCollection : System.Collections.ObjectModel.KeyedCollection[string, Record] { [string] GetKeyForItem([Record] $item) { return $item.Key } } ◆Test.ps1 . .\Record.ps1 . .\MyCollection.ps1 $r = [Record]@{ Key = "pi"; Data = 3.14 } $c = [MyCollection]::new() $c.Add($r) $c["pi"].Data # 3.14と表示されてほしい
857 名前:851 mailto:sage [2021/01/03(日) 18:34:59.83 ID:n1qZMfJK.net] ファイルA の中で、ファイルB を読み込むと、 依存ファイルであるファイルBが、先に実行される事が確定するのだろう 一方、同じファイルに、複数のクラスを書くと、依存関係が分からないのだろう
858 名前:デフォルトの名無しさん mailto:sage [2021/01/07(木) 01:13:26.70 ID:MvQgNxU+.net] すいません、Powershellって、変数が空だった場合の デフォルト値を設定する方法ってありますか? bashでいうところの、 ${hoge:-fuga} って方法です。
859 名前:デフォルトの名無しさん mailto:sage [2021/01/07(木) 02:45:37.83 ID:CsAW39lY.net] ねーよ VBSで言うIsEmpty相当すらない せいぜい$nullかどうか調べてちっ仕方ねーなってやるしかない
860 名前:デフォルトの名無しさん mailto:sage [2021/01/07(木) 08:03:25.19 ID:1A0NtNS9.net] ($nullでなく)空って状態はないと思うから、しいてやるならGet-Variableで変数が存在するか調べるくらいかね
861 名前:デフォルトの名無しさん mailto:sage [2021/01/07(木) 08:17:46.65 ID:7KuEq4Kq.net] >>854 PowerShell 7の??演算子はいかがでしょうか
862 名前:デフォルトの名無しさん mailto:sage [2021/01/07(木) 08:28:41.55 ID:6ewH2FY0.net] >>854 変数が空の定義次第だけど$nullでよくてPowerShell 7以降なら$hoge ?? 'fuga' でいける 空の定義に空文字を含むとかPowerShell 6以下とかなら素直に if([string]::IsNullOrEmpty($hoge)){ 'fuga' } else { $hoge } とやればいい
863 名前:デフォルトの名無しさん mailto:sage [2021/01/07(木) 08:34:36.49 ID:6ewH2FY0.net] >>856 変数の存在確認ならTest-Path Variable:hogeの方が楽だと思う
864 名前:デフォルトの名無しさん mailto:sage [2021/01/07(木) 13:21:05.91 ID:ht1NLYQc.net] 7って便利なんだな
865 名前:デフォルトの名無しさん mailto:sage [2021/01/07(木) 21:21:38.47 ID:R2rezzh3.net] >>854 >${hoge:-fuga サザエさんかよw
866 名前:デフォルトの名無しさん mailto:sage [2021/01/07(木) 21:59:07.15 ID:o0FdcV6b.net] えっ?
867 名前:デフォルトの名無しさん mailto:sage [2021/01/07(木) 22:43:44.97 ID:IvTx7xdj.net] foo,barも知らない人でしょ
868 名前:デフォルトの名無しさん [2021/01/07(木) 22:50:20.03 ID:iqGL0Mlk.net] ほげふがの語源ってサザエさんだったの!? マジで!
869 名前:デフォルトの名無しさん mailto:sage [2021/01/08(金) 00:22:33.24 ID:s1r0Khta.net] 来週もまた観てくださいね $hong -or $fouf
870 名前:デフォルトの名無しさん mailto:sage [2021/01/08(金) 10:41:54.36 ID:zUQduDYO.net] 逆にメタ変数でhoge、fugaってそこまでマイナーか?
871 名前:デフォルトの名無しさん mailto:sage [2021/01/08(金) 11:27:10.91 ID:3ONG9Jp/.net] >>866 誰もマイナーとか言ってない
872 名前:デフォルトの名無しさん mailto:sage [2021/01/08(金) 11:53:36.70 ID:zUQduDYO.net] >>867 そうか、それはすまなかった。 早とちりでございました。 お詫び申し上げます。
873 名前:デフォルトの名無しさん [2021/01/08(金) 12:25:26.48 ID:eXVg8SYp.net] >>868 詫びろとは言ってない >>867 誰かがマイナーと言ったとは言ってない >>865 今週観たとは言ってない >>861 ご指摘にはあたらない
874 名前:デフォルトの名無しさん [2021/01/08(金) 12:25:53.52 ID:eXVg8SYp.net] これ万能論法ですな
875 名前:デフォルトの名無しさん mailto:sage [2021/01/08(金) 12:36:55.29 ID:2lGGPyYq.net] そう思ってるのは言ってる本人だけだろう
876 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 01:01:42.83 ID:KQEfE/JM.net] ※すべてのネットワークアダプタを無効にして、 Get-NetConnectionProfileは必ずエラーになる状態で実行しています。 $result=Get-NetConnectionProfile -InterfaceAlias Wi-Fi 2>$null $? False $result=(Get-NetConnectionProfile -InterfaceAlias Wi-Fi 2>$null) $? True この場合、マル括弧がどんな働きをして 結果が変わってしまうのか教えてください。
877 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 01:03:45.10 ID:KQEfE/JM.net] ちなみにこうしても $result=Get-NetConnectionProfile -InterfaceAlias Wi-Fi エラーメッセージ $? False $result=(Get-NetConnectionProfile -InterfaceAlias Wi-Fi) エラーメッセージ $? True という状態でした。
878 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 08:27:17.19 ID:kPw1IBO3.net] >>872-873 まあバグ(MS的には仕様とも言う)みたいなもんやね Until PowerShell 7, containing a statement within parentheses (...), subexpression syntax $(...) or array expression @(...) always reset $? to True , so that (Write-Error) shows $? as True. This has been changed in PowerShell 7, so that $? will always reflect the actual success of the last command run in these expressions. https://docs.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_automatic_variables?view=powershell-7.1#short-description なのでPowerShellを7にすれば解決するかと
879 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 09:13:27.43 ID:iGxXP/Ic.net] 5.1はメンテしないってことか? OSにデフォで入ってるバージョンなんだから直せよ
880 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 09:49:28.96 ID:kPw1IBO3.net] いきなり直したらユーザースクリプトのバグが顕在化したりするだろ どうでもいいようなスクリプトなら7に上げろよ
881 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 10:38:48.10 ID:amtktMoR.net] どうでもいいスクリプトで問題回避できるなら7に上げなくてもいいんじゃね。
882 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 11:36:00.49 ID:KQEfE/JM.net] >>874 ありがとうございます。 あげるのも怖いので別の方法にします。
883 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 11:45:27.45 ID:vKxQ0OMt.net] >>877 そう言うのは>>875 に言ってやれよ
884 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 16:15:40.54 ID:WaDdsN2m.net] >>878 あげる?のではなくて別物なので併用できるけど。 5.1 → powershell.exe 7.x → pwsh.exe
885 名前:デフォルトの名無しさん mailto:sage [2021/01/10(日) 04:54:33.84 ID:3v4yt86U.net] 以下の表記の意味を教えてください。 void Queue[TResponse](Google.Apis.Requests.IClientServiceRequest request, Google.Apis.Requests.BatchRequest+OnResponse`1[TResponse] callback) メソッドに角カッコ?や、型指定に+や`1[TResponse]の意味がわかりませんでした。 $batch = New-Object Google.Apis.Requests.BatchRequst($service) $batch.Queue で表示される内容です。
886 名前:デフォルトの名無しさん mailto:sage [2021/01/10(日) 08:11:25.80 ID:a907yL+h.net] クラスのメンバーにクラスがある時は+になるんじゃなかったか System.Environment+SpecialFolder みたいな [TResponse]はジェネリックの型引数 `1は型引数を1つ取るって意味
887 名前:881 mailto:sage [2021/01/10(日) 21:15:33.29 ID:3v4yt86U.net] >>882 ありがとうございます。ジェネリックというのは知らなかったので調べてみます。 あと、その、Queue[TResponse]、というメソッドに型が付いている?のもジェネリック関連でしょうか。
888 名前:デフォルトの名無しさん [2021/01/12(火) 16:53:39.85 ID:0UGYDHaB.net] pythonに飲み込まれるってマジ?
889 名前:デフォルトの名無しさん mailto:sage [2021/01/12(火) 18:35:28.45 ID:U7HouJQi.net] pythonが吐血しちゃいますよ
890 名前:デフォルトの名無しさん mailto:sage [2021/01/13(水) 11:04:50.14 ID:u12/DUzm.net] >>884 え?Pythonから.NET Framework扱えるようになるの?
891 名前:デフォルトの名無しさん mailto:sage [2021/01/13(水) 12:04:34.41 ID:JJnXAm01.net] 知らんけど今はまだ使えないの?
892 名前:デフォルトの名無しさん mailto:sage [2021/01/13(水) 12:35:42.75 ID:u12/DUzm.net] ironpythonなら
893 名前:デフォルトの名無しさん mailto:sage [2021/01/16(土) 08:03:53.11 ID:4aouipyb.net] v7.1.1 https://github.com/PowerShell/PowerShell/releases/tag/v7.1.1
894 名前:デフォルトの名無しさん [2021/01/18(月) 22:22:09.29 ID:6Ncg8pZo.net] 【D:\】の全てのフォルダやファイルに対して、作成日時や最終アクセス日時などを設定したいのですが、 PS D:\> Get-ChildItem -Path "D:\" | Where-Object { $_ -is [System.IO.FileInfo] } | ForEach-Object { Set-ItemProperty $_.FullName -Name CreationTime -Value "2021/01/01 00:00:00" } ではエラーが出ます。 何がいけないのでしょうか?
895 名前:デフォルトの名無しさん mailto:sage [2021/01/18(月) 22:59:36.90 ID:Pb59NPOt.net] 例えば特定の一つのファイルやフォルダなら上手く行くとか パイプを分解してどこでエラーになってるのかを突き止めるとか 丸投げするにしてもエラーメッセージ位は出してあげると答える人も喜ぶと思いますよ
896 名前:デフォルトの名無しさん mailto:sage [2021/01/19(火) 02:44:39.14 ID:m3MeBQ6p.net] 1.D:\が存在していない 2.D:\へのアクセス権がない 3.D:\にあるファイルに読み取り専用属性が設定されてるものが混ざってる どれかな? Where-Object { $_ -is [System.IO.FileInfo] }抜き、ファイルに限定しないで実行したときは フォルダへのアクセス時にエクスプローラー開いてると ”別のプロセスで使用されているためアクセスできません”となった(たとえ操作対象のフォルダを開いていなくても) 変更された日時を確認するためにエクスプローラー開いたまま実行してたりする?
897 名前:デフォルトの名無しさん [2021/01/19(火) 21:02:07.64 ID:qrtgnbPs.net] # set the target folder path $targetFolder = 'I:\'; # get all files including files in sub folders $itemList = Get-ChildItem $targetFolder -Recurse; foreach($item in $itemList){ $item.CreationTime = '2020/12/21 00:00:00' } なスクリプトで実行したらエラーなく出来ました。 お騒がせしてすみませんでした。
898 名前:デフォルトの名無しさん mailto:sage [2021/01/19(火) 23:49:36.84 ID:XQEllFmW.net] >>893 >>890 私の環境で実行したら何のエラーもなく、CreationTimeが2021/01/01 00:00:00 になったの。 逆質問だけど、どんなエラーだったのか教えてください。
899 名前:デフォルトの名無しさん mailto:sage [2021/01/20(水) 10:29:40.54 ID:sOzWFlEJ.net] エクスプローラーとか、バックグラウンドで動いているシステムなどが、 フォルダをロックしていたら、失敗する だから、タイミングによって、成功したり失敗したりする 読み取りロックは、読み取り同士では共有できるけど、 書き込みロックは、その他すべてと共有できないから、失敗する確率が高い
900 名前:デフォルトの名無しさん mailto:sage [2021/01/25(月) 21:14:40.94 ID:PMAucoEc.net] v7.0.4 https://github.com/PowerShell/PowerShell/releases/tag/v7.0.4
901 名前:デフォルトの名無しさん mailto:sage [2021/01/27(水) 19:49:56.64 ID:BJM8Dy5y.net] テキストファイルに設定できるストリームって何に使うんすか?
902 名前:デフォルトの名無しさん mailto:sage [2021/01/27(水) 21:16:07.96 ID:lPCF/h8Q.net] テキストストリームの事なのかNTFSの代替データストリームの事なのか どちらなんだ
903 名前:デフォルトの名無しさん mailto:sage [2021/01/27(水) 22:11:57.22 ID:qq3K45Kg.net] 代替データストリームはテキストに限った話じゃないのでは
904 名前:デフォルトの名無しさん mailto:sage [2021/01/27(水) 22:45:50.85 ID:9akTDBYB.net] テキストに限った話ではないけど、質問者が正確に把握してるともまた限らない
905 名前:デフォルトの名無しさん [2021/01/29(金) 23:59:43.31 ID:t1LR5As2.net] PoweShellのクラスで、C#と同様にインデクサーを定義することはできますか? 例えば、あるクラスのインスタンス$hogeに対して $hoge[$i] という感じで添字でアクセスしたいです。
906 名前:デフォルトの名無しさん mailto:sage [2021/01/31(日) 14:37:31.38 ID:jsWOzGKR.net] C#の演算子オーバーロードがPSで使えるかと同じ無意味な質問
907 名前:デフォルトの名無しさん mailto:sage [2021/01/31(日) 16:01:58.79 ID:sgLd3qg+.net] >>902 使えるの?
908 名前:デフォルトの名無しさん mailto:sage [2021/01/31(日) 17:07:09.19 ID:Ti7TRi+9.net] >>898 たぶんテキストストリームのことです file:stream1 ↑これ
909 名前:デフォルトの名無しさん mailto:sage [2021/01/31(日) 17:24:57.96 ID:x4IKZ5QX.net] そのファイルに付属させたい情報を一緒にいれておくということだろう ソースだったら、開発秘話とか入れとけば?
910 名前:デフォルトの名無しさん mailto:sage [2021/01/31(日) 17:26:58.51 ID:x4IKZ5QX.net] あと自分の写真とか連絡先とかプロフィールを入れとけばいいかもW
911 名前:デフォルトの名無しさん mailto:sage [2021/01/31(日) 19:01:56.87 ID:Ti7TRi+9.net] >>905 >>906 ああREADME.md的なものをですか? なるほどそれは便利そう
912 名前:901 [2021/01/31(日) 19:31:38.13 ID:yFPHlREj.net] >>902 PowerShellでも.Netの コレクションクラスを使えますので、 インデクサーを使うこと自体はできますよね? 同様のことをユーザー定義クラスで実現できないかと思ったのですが、 無意味でしょうか…
913 名前:デフォルトの名無しさん mailto:sage [2021/01/31(日) 20:11:33.10 ID:IDCaHEld.net] >>904 それ代替データストリームに見えるけどどの辺がテキストストリームなんだろ しかも、NTFSに依存する機能で.mdの代替とか悪手でしかない
914 名前:デフォルトの名無しさん mailto:sage [2021/02/01(月) 11:36:09.24 ID:XDbQ82ak.net] >>909 結局何に使うのか言ってないじゃん
915 名前:デフォルトの名無しさん [2021/02/04(木) 23:44:34.92 ID:OAJDFKMl5] バカ不平多し★へつらい生きてるからリストラ対象 https://www.youtube.com/watch?v=carOYI-xNoI 勝ちは偶然、負けは必然★負けて消えた人に足りなかったものは? https://www.youtube.com/watch?v=agAQTF1OaBU&t=38s リーダー達の給料が高いのは単純労働者じゃないから https://www.youtube.com/watch?v=8o9il6dVXGk できません、自信がありません、無理です★ボンクラにしたのは誰? https://www.youtube.com/watch?v=54YNXSQsxuM 9割の人は、ただの作業員★自学自習こそ仕事の基本 https://www.youtube.com/watch?v=vIGKDmmBJcs サラリーマン、10年経てばボンクラ説 https://www.youtube.com/watch?v=QdfVJnVuLlY
916 名前:デフォルトの名無しさん [2021/02/05(金) 00:48:27.75 ID:a81hUa+F.net] PowerShellのパイプやリダイレクトは仕様が良くないね。 エンコードせずにバイナリデータのままパイプする従来の方法も選べたほうが良かったね。
917 名前:デフォルトの名無しさん mailto:sage [2021/02/05(金) 14:45:47.08 ID:PbAzOwWf.net] cmd /c foo `| bar `> baz とでもしておけ
918 名前:デフォルトの名無しさん mailto:sage [2021/02/05(金) 21:20:19.10 ID:FdcfXC45.net] >>912 これじゃあかんの [byte[]]$bin = cat -encoding byte
919 名前:デフォルトの名無しさん mailto:sage [2021/02/06(土) 08:02:58.77 ID:xZe5l+zL.net] パイプを使いたいんだよ
920 名前:デフォルトの名無しさん mailto:sage [2021/02/06(土) 09:37:27.62 ID:ya6+Y4aC.net] パイプカットするの?
921 名前:デフォルトの名無しさん mailto:sage [2021/02/06(土) 14:28:17.57 ID:0arkAH5a.net] >>915 encoding byteがどういう型が返るか示しただけでもちろんパイプにも使えるけど
922 名前:デフォルトの名無しさん [2021/02/06(土) 23:58:30.54 ID:5Ze23T9D.net] >>913 `| や`>が解説されているマイクロソフト公式ページはどこになりますか? 検索キーワードが記号ばかりなので探し方が分からず困っております。 >>914 私の環境では、以下のエラーが出て動きませんでした。 Get-Content: Cannot process argument transformation on parameter 'Encoding'. 'byte' is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method. (Parameter 'name')
923 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 01:02:44.55 ID:hwDwbBnD.net] >>918 '|'はパイプ'>'はリダイレクトで調べれば出てくるよ bashの知識が必要になるな
924 名前:デフォルトの名無しさん [2021/02/07(日) 01:34:59.08 ID:IiZq+u+t.net] >>919 具体的なURLはどこになりますか?
925 名前:デフォルトの名無しさん [2021/02/07(日) 01:38:10.26 ID:IiZq+u+t.net] >>919 検索にbashの知識が必要というのは具体的にどういう意味ですか?
926 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 01:46:34.08 ID:IiZq+u+t.net] ひょっとして>>913 と>>919 は別人なのかな。 もし別人なら>>919 への質問はなかったことにしてください。論点がずれてるようだから。
927 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 07:11:26.49 ID:jVPjdJHk.net] @パターン1 $data = @('red','green','blue') if ( $data -ne 'green' ) { 'greenはありません' } greenはありません Aパターン2 $data = @('red','green','blue') if ( $data -ne 'pueple' ) { 'greenはありません' } greenはありません 両方とも同じ結果を返してしまいます。 配列と比較して、無かったらtrue、あったらfalseみたいな書き方ってありませんか? イメージとしては if ( $data.notContains('green')) みたいな書き方です。 用としては、if ( $data.Contains('green'))で足りるのですが、 気持ちの問題として、無かったらtrue、あったらfalseという書き方をしたいです。 よろしくお願いいたします。
928 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 09:44:27.16 ID:jX/y7Db/.net] >>923 > 両方とも同じ結果を返してしまいます。 まず $data = @('red','green','blue') $data -ne 'green' で何が戻ってくるか確認すればなぜそう言うふうに動くかわかると思う > 気持ちの問題として、無かったらtrue、あったらfalseという書き方をしたいです。 どうしても-eqとか使いたい場合、俺なら($data -eq 'green').Count == 0って書くかな どう見ても$data.Contains('green')の方がわかりやすいと思うけど
929 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 09:58:10.78 ID:fgGFki9a.net] $data = @('red','green','blue') if (not ($data -eq 'green')) {} if (not ($data.Contains('green'))) {} if (not ($data -contains 'green')) {} if ($data -notcontains 'green') {} if ('green' -notin $data) {} -eq演算子はフィルタとして働くのでここでの用法は微妙 -in系の演算子は配列が大きいとオーバーヘッドが大きいらしい
930 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 09:59:45.82 ID:fgGFki9a.net] 否定をtrueにするってどういうことだろ $colors = @('red','green','blue') $found = $data -contains 'green' if ($found) { } else { } なら自然に読み下せる ここで$notFoundという変数を使われると気になる if (not $found) { # 先に書いておきたい処理 } else { # 長々とした本処理 } としたいという趣旨ならわかる
931 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 10:03:05.78 ID:fgGFki9a.net] 変数名を変え忘れたので訂正 $found = $colors -contains 'green'
932 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 10:18:17.21 ID:jVPjdJHk.net] >>924-926 レスありがとうございます。 > 否定をtrueにするってどういうことだろ > どう見ても$data.Contains('green')の方がわかりやすいと思うけど $exec_shinai_jikan=@('01','02','03') $imananji=Get-Date -Format HH if ($exec_shinai_jikan -notcontains $imananji){ "実行するよ" } else { "実行しないよ" } 実際のコード(一部)はこれです。変数名のセンスが独特ですよね・・(By 開発の人、私は開発じゃないです)といわれているので 出すのが恥ずかしかったんです。混乱を生んだようでして申し訳ない。 >で何が戻ってくるか確認すればなぜそう言うふうに動くかわかると思う ・0か0を超える値か ・nullかnullを除く何らかの値か でtrue or falseが決まる感じでしょうか? -notって、-notだけじゃ赤傍線引かれるけどなにがだめなんだと思ったら、-not〜って表現があったんですね。 ありがとうございます。
933 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 10:22:55.16 ID:5sEA4G4p.net] >>919 bashの知識は不要でしょ DOSですらパイプやリダイレクト存在するんだし
934 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 10:24:14.00 ID:fgGFki9a.net] なるほどそういう感じか -not演算子のハイフン書き忘れてた ごめんね
935 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 10:26:29.15 ID:fgGFki9a.net] >>924 ($data -eq 'green').Count -eq 0 これってgreenが含まれない場合は最初の-eq演算による絞り込み結果が$nullになって ぬるぽになるかと思いきや$null.Countの呼び出しは特例的に0を返すんやね またPowershellの妙な癖を覚えてしまった
936 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 11:48:29.36 ID:jX/y7Db/.net] >>931 > これってgreenが含まれない場合は最初の-eq演算による絞り込み結果が$nullになって ならないよ、単に空の配列になるだけ gm -inputobject ($data -eq 'yellow') とかやればわかる
937 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 12:10:49.69 ID:fgGFki9a.net] >>932 ありがとう、勘違いしてた そこは自然な動きなんやね
938 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 13:45:02.08 ID:hwDwbBnD.net] >>920 https://docs.microsoft.com/ja-jp/powershell/ ここでリダイレクトとかパイプとか検索ワードを入れれば解説が出てくるよ
939 名前:デフォルトの名無しさん mailto:sage [2021/02/07(日) 20:57:33.01 ID:rt2m338a.net] >>914 ,918 6.0で仕様変更された https://docs.microsoft.com/ja-jp/powershell/scripting/whats-new/breaking-changes-ps6?view=powershell-7.1#unify-cmdlets-with-parameter--encoding-to-be-of-type-systemtextencoding-5080 -Encoding の値 Byteはファイルシステム プロバイダーのコマンドレットから削除されました。 新しいパラメーター -AsByteStream を使用して、入力としてバイト ストリームが必要なこと、あるいは出力がバイト ストリームであることを指定してください。
940 名前:デフォルトの名無しさん mailto:sage [2021/02/10(水) 10:00:24.88 ID:hefdb5Yb.net] 可変長配列数?的なものの実現方法を教えてください。 CSVを以下の通り加工したいのですが、 1554412,A,B,C,D 2176944,D,C,E,F,G,H,I,J 4887447,F,H,J,A,K こんな感じのカンマ区切りcsvを 1554412,A 1554412,B 1554412,C 1554412,D 以下同じパターン で成形したいのです。 csv区切り文字は必ずカンマで、 フィールド数は行により異なります。 行を読み込んで、配列に入れて〜、配列の最初のフィールドを入れて〜 とぼんやり想像しているのですが、「個数が定まっていない行を、配列に入れる方法」が想像つきません。 可変長配列数?的なものの実現方法を教えてください。
941 名前:デフォルトの名無しさん mailto:sage [2021/02/10(水) 18:12:00.38 ID:hRqw8VTE.net] 2つ目のカンマ or 改行まで読んでから要素数2の固定長配列に入れるのはどうですか。 エレガントな方法ではないと思うので、他の方の意見も参考にしてください
942 名前:デフォルトの名無しさん mailto:sage [2021/02/10(水) 18:19:41.40 ID:hRqw8VTE.net] あ、A, D, FじゃなくてA, B, Cでしたか。 マルチバリューカラムになっているのを正規化したいんですね。 最初の一つ目だけ取るのと勘違いしてました。 1. 一行読んでstring 2. カンマでstring.splitしてstring[] 3. [1]からstring.lengthまでを、[0]とstring.joinして、string[] 4. 全行ループ これでどうですか
943 名前:デフォルトの名無しさん mailto:sage [2021/02/10(水) 19:17:13.97 ID:JrOSOdLx.net] PowerShell っぽくならこんな感じかな '1554412,A,B,C,D', '2176944,D,C,E,F,G,H,I,J', '4887447,F,H,J,A,K' | %{ $a, $b = $_ -split ',', 2 $b -split ',' | %{ "$a,$_" } }
944 名前:デフォルトの名無しさん mailto:sage [2021/02/10(水) 19:51:01.55 ID:hRqw8VTE.net] どうしてこれ動かないの? $fが更新されない スマホでコード書くの疲れたんで、誰か教えて下さい。 https://tio.run/##TY3LCsIwEEX38xVDyEJxLEaiVUHw/cYfkC5EUluoqTRFreK316kguBm4hzn3XtO7yVxkkqQs5cPhEEcCVKejtWrTmCY0pRm0ld/ta00zTnNa0JJWtKYN6F7P19pnsqINf29BjLDprkmcozjM7S3OUnsxNg8Gg72572JrBECYZuZ4irAmHxhb5NU6vkAW1Tijn08CZFihwh1awZ9VfC2myvM4OW9n7DmPmqoefIuelRRio6rgKwtG8IZ3WX4A
945 名前:デフォルトの名無しさん mailto:sage [2021/02/10(水) 21:07:38.33 ID:bnTPmcqs.net] >>940 $xs[0]としてごらん 5行目"@ -split "`n"で意図通りになると思う
946 名前:デフォルトの名無しさん mailto:sage [2021/02/10(水) 21:45:54.25 ID:JrOSOdLx.net] >>940 "[Environment]::NewLine" ↓ "$([Environment]::NewLine)"
947 名前:デフォルトの名無しさん mailto:sage [2021/02/10(水) 21:58:58.82 ID:hefdb5Yb.net] >>938 とりあえず用は足せました。が、多分ご紹介の内容と全然違うことをやってると思います。 レスの内容が半分分かりませんでした。 >3. [1]からstring.lengthまでを ここが猛烈にヒントになってこんな感じにしました。 foreach ($l in Get-Content C:\temp\test.txt) { $l=$l.Split(",") 1..(($l.Length) - 1) | % {write-host ($l[0],$l[$_]) } } サンプルのコードをいただけると幸いです。 >>939 これも無事動きました。ありがとうございます。 %ってのを知りませんでした。 Powershell難しすぎです。 勉強してるんですが、正直心折れそうです。 bashはそこそこ使えるので行けるだろと思ってたんですが、ナメてました。 死にそうです。
948 名前:デフォルトの名無しさん mailto:sage [2021/02/10(水) 22:00:44.14 ID:hefdb5Yb.net] >>943 自己レスすいません。 これも結局、 write-host ($l[0],$l[$_]) } で間をカンマ区切りにしたかったんですけど、 1時間手を変え品を変えで結局ダメでした。 何が悪いんでしょうか。
949 名前:デフォルトの名無しさん mailto:sage [2021/02/10(水) 22:12:55.91 ID:hefdb5Yb.net] 何度もすいません。 write-hostで標準で区切り文字が半角スペースになってるという事実がやっとわかりました。 {write-host -Separator "," $l[0]$l[$_]} で無事に希望の出力を得ることができました。 ありがとうございました。
950 名前:デフォルトの名無しさん mailto:sage [2021/02/11(木) 00:08:14.80 ID:lj0aoxL+.net] すっきり書けなくてもどかしい $csv -split "\r\n" | % { $a = $_ -split ','; $a[1..($a.Count - 1)] } | % { $a[0], $_ -join ',' }
951 名前:デフォルトの名無しさん [2021/02/11(木) 02:23:21.20 ID:VegncXCD+] SIer業界がブラックな理由を解説する。エンジニアは自社開発をしているWeb業界がオススメ! https://www.youtube.com/watch?v=iy4nnAI9og4 【業界研究】IT業界でひと括りにするのは危険。SIer、Web制作、 アプリ開発で仕事内容が全く違います。【就活・転職】 https://www.youtube.com/watch?v=_IJQ2iBkf4w エンジニアの仕事が稼げる理由とは?プログラミングスキルと 仕事の需要は比例しないので、実は技術力が低くても稼ぐことができる! https://www.youtube.com/watch?v=82Bs-NH8jAM 通勤時間が長い人ほど無能説。家賃節約とか言っている暇があったら、 会社の近くに引っ越して浮いた時間に副業したほうがお金も貯まるし強くなれる。 https://www.youtube.com/watch?v=mt6K1RJnk6I プログラミングに英語は必要か?に対する明確な答え https://www.youtube.com/watch?v=WWULJbVECKU 私がヤフーを辞めた理由 https://www.youtube.com/watch?v=-G-7Hc3rJw8 ITエンジニアの種類と必要なスキル ?アプリケーションエンジニア編? https://www.youtube.com/watch?v=K9BaS2eBGmw 日本と海外のプログラマーの違いを比較してみた https://www.youtube.com/watch?v=u1OyelvNqM0
952 名前:デフォルトの名無しさん mailto:sage [2021/02/11(木) 19:38:29.26 ID:rrBqcjKj.net] >>940 newlineにクォートつけてたわw >> 940, 941 さんthx 一応quote外した結果。 https://tio.run/##TY3dCoJAEIXv5ykG2YuiUdrY0oKg/396gfAiYk3B1nClsujZbYwuuhk4H/Odc83uOrexTtOqEg@LQxw5ILtdpWSHxjShKc2gI/1eXymacZrTgpa0ojVtQAWBr5TPZEUb/t6CM0LXXtOkwMPc3JI8MxdtinAw2Ov7LjEaIMpyfTzF2BAPTAzyZhNfIMp6mtHPdsgBEdWotId2@GeVX4up9DxO1ttpcy5iVzbDb9GzliJs1RV8RckI3vCuqg8
953 名前:デフォルトの名無しさん mailto:sage [2021/02/12(金) 09:16:23.07 ID:q/2+I+Zd.net] $?で直前のコマンドの実行結果を知ることができますが、 直前に実行したコマンドのPIDを知る方法ってありませんか? Start-Process -FilePath c:\bin\command.exe -ArgumentList 1 $cmd1pid=get-chokuzenn-pid $cmd1pid 78968 Start-Process -FilePath c:\bin\command.exe -ArgumentList 2 $cmd1pid=get-chokuzenn-pid $cmd1pid 4292 実際に動かしたいのは、ttpmacro.exe(Teratermのマクロ)です。 Teratemマクロで外部の機器にsshで接続して、ssh接続のログの内容を見て そのプロセスを終了させるか判断したいと思っております 書こうとしているスクリプトを動かす時点で、1個もTeratermが動いていないなら、 Get-Processでなんとかなると思うのですが、上記スクリプトを実行する時点で ほかのTeratermが動いている可能性があり、それを間違って死なすわけにはいかず、 Powershellスクリプト内で、Start-Processなりで動かした、直前のプロセスのIDを知る方法があればと思い相談させていただきます すいません、よろしくお願いいたします。
954 名前:デフォルトの名無しさん mailto:sage [2021/02/12(金) 09:17:40.74 ID:q/2+I+Zd.net] test.ps1 Start-Process -FilePath c:\bin\command.exe -ArgumentList 1 $cmd1pid=get-chokuzenn-pid $cmd1pid 78968 Start-Process -FilePath c:\bin\command.exe -ArgumentList 2 $cmd2pid=get-chokuzenn-pid $cmd2pid 4292 すいません、スクリプトの例に誤りがありました 訂正します
955 名前:デフォルトの名無しさん mailto:sage [2021/02/12(金) 09:57:59.46 ID:JWXF4JEZ.net] v7.0.5 https://github.com/PowerShell/PowerShell/releases/tag/v7.0.5 v7.1.2 https://github.com/PowerShell/PowerShell/releases/tag/v7.1.2
956 名前:デフォルトの名無しさん mailto:sage [2021/02/12(金) 10:15:49.19 ID:JXvYdGCL.net] 引数に -PassThru を付けて戻り値からidで取れないかな?
957 名前:デフォルトの名無しさん mailto:sage [2021/02/12(金) 11:17:25.75 ID:jxDcSv/l.net] >>949 プロセスIdなんて取る必要ない(むしろ危険) >>952 が言うように-PassThruオプションつけるとSystem.Diagnostics.Processオブジェクトが返ってくるからKill()メソッド呼ぶだけでいい
958 名前:デフォルトの名無しさん mailto:sage [2021/02/12(金) 13:51:19.53 ID:q/2+I+Zd.net] >>952 >>953 $process = Start-Process -PassThru notepad $process.Kill() できました ありがとうございました
959 名前:デフォルトの名無しさん mailto:sage [2021/02/12(金) 13:58:44.73 ID:aXMNNeBu.net] すばらしい
960 名前:デフォルトの名無しさん mailto:sage [2021/02/13(土) 18:04:24.59 ID:elIMNXvv.net] 音楽プレーヤーで MP3 ファイルをシャッフル再生させたいので、 dir /n /-b /s *.mp3 > playlist.txt の結果をランダムに入れ替えるにはどうすればいいでしょうか? (乱数で再生する行を求めると同じ曲がつづくかもしれないのでシャッフルにしたい。)
961 名前:デフォルトの名無しさん mailto:sage [2021/02/13(土) 19:45:47.08 ID:PYtZn7CJ.net] >>956 テキトーでいいなら dir /n /-b /s *.mp3 | sort -prop @{Exp={[Guid]::NewGuid()}} > playlist.txt
962 名前:デフォルトの名無しさん mailto:sage [2021/02/13(土) 20:59:17.73 ID:9JYy97c0.net] Sort-Object {Get-Random}じゃあかんの?
963 名前:デフォルトの名無しさん mailto:sage [2021/02/13(土) 21:06:22.08 ID:PYtZn7CJ.net] >>958 それでもいいけど、遅いらしい https://aquasoftware.net/blog/?p=612
964 名前:デフォルトの名無しさん mailto:sage [2021/02/13(土) 21:14:23.98 ID:D/l9Txdy.net] 自分の音楽コレクションのプレイリスト作る要件なら速度は別にと思わなくもない 5分とか掛かるならちょとやだけど
965 名前:デフォルトの名無しさん mailto:sage [2021/02/13(土) 21:58:32.75 ID:WEbw7iAW.net] プレイリストのランダム再生機能ぐらい大抵のプレイヤーに付いてるだろうに
966 名前:デフォルトの名無しさん mailto:sage [2021/02/13(土) 22:34:07.74 ID:XvWS5Qrl.net] >>959 のリンク先のコードで質問です 勉強のためちょこちょこ編集してみたところ、 「なんでこれで変数の中がランダムにおきかわるの?」と疑問がわきました $r = @(1,2,3,4,5,6,7,8,9,10) $r=($r | sort -Property @{Exp={[Guid]::NewGuid()}}) $r $foo = @(1,2,3,4,5,6,7,8,9,10) $foo[0] = $foo | sort -prop @{Exp={[Guid]::NewGuid()}} $foo[0] 前者のように、$rの中身を $r | sort -Prop〜で置き換えるというのなら納得がいくんですが、 なぜ、後者のように、書いてもランダムになるのかが納得いきません 変数定義はパイプの前の話で、どうしてそれがパイプ先の、ランダムにする操作で置き換わるのでしょうか。
967 名前:デフォルトの名無しさん mailto:sage [2021/02/13(土) 22:48:16.31 ID:PYtZn7CJ.net] >>962 やってることは同じで結果が単に$foo[0]に入ってるだけ $foo[1]~$foo[9] の内容は変わってないはず ちなみに置き換えてるわけじゃなくて新しい配列を作ってそれを$rとか$foo[0]に入れてる
968 名前:デフォルトの名無しさん mailto:sage [2021/02/13(土) 22:59:06.67 ID:XvWS5Qrl.net] >>963 ありがとうございます 書き方が違うけど処理が同じというとらえ方でいいですか? "パターン1" $foo = @(1,2,3,4,5,6,7,8,9,10) $foo=($foo | sort -prop @{Exp={[Guid]::NewGuid()}}) $foo "パターン2" $foo = @(1,2,3,4,5,6,7,8,9,10) $foo = $foo | sort -prop @{Exp={[Guid]::NewGuid()}} $foo パターン1の書き方違いが、パターン2のようなとらえ方でいいでしょうか?
969 名前:デフォルトの名無しさん mailto:sage [2021/02/13(土) 23:33:24.56 ID:PYtZn7CJ.net] >>964 ああ、すまん ( ) は見落としてた パターン1は単に式を ( ) で包んでるだけだからパターン2と同じと思っていい
970 名前:954 mailto:sage [2021/02/13(土) 23:36:43.19 ID:elIMNXvv.net] Get-ChildItem -path d:\ -filter *.mp3 -recurse | foreach {$_.FullName} | sort {Get-Random} や、 Get-ChildItem -path d:\ -filter *.mp3 -recurse | foreach {$_.FullName} | sort -prop @{Exp={[Guid]::NewGuid()}} でうまくいきそうです。 ありがとうございました。
971 名前:デフォルトの名無しさん mailto:sage [2021/02/14(日) 00:07:20.96 ID:rA0IJrKX.net] >>965 ありがとうございますよくわかりました パイプで処理がわかれると思っておりましたが、 =で右辺と左辺に分ててる感じなんですね
972 名前:デフォルトの名無しさん mailto:sage [2021/02/14(日) 00:22:33.69 ID:D24G58JB.net] >>966 上手く行って何より 蛇足だけど > foreach {$_.FullName} の所は PowerShell 的には > Select-Object FullName でもいいかな
973 名前:デフォルトの名無しさん mailto:sage [2021/02/14(日) 00:28:18.02 ID:D24G58JB.net] >>967 他の言語に似せるためか代入文は最優先で解釈されるようになってるみたい まあよくわからなかったら多少余分でも ( ) を付けといた方があとから見ても誤解されにくいと思う
974 名前:デフォルトの名無しさん mailto:sage [2021/02/19(金) 08:22:42.85 ID:islL1Ifn.net] Announcing the PowerShell Community Blog https://devblogs.microsoft.com/powershell-community/announcing-the-powershell-community-blog/
975 名前:デフォルトの名無しさん mailto:sage [2021/02/22(月) 04:45:12.99 ID:xcCpjLov9] 高度IT人材、富士通は最大年収3500万円へ https://www.nikkei.com/article/DGXMZO58248520Q0A420C2000000/ 「富士通年収3500万!」日本のIT企業の年収も、高額化してきました https://needs-explorer.co.jp/5801/ AI人材の獲得に超本気 NECが新人事制度を9人に適用、富士通は最大年収3500万円へsierblog.com/archives/1994846.html 【年収3500万円も】富士通、「ジョブ型」人事制度を導入 幹部社員から 高度IT人材 https://coinmap.jp/archives/56639 東芝、幹部候補をスタートアップに出向 21年度から https://www.nikkei.com/article/DGXZQODZ284AV028122020000000 スタートアップで「武者修行」、村田製作所など導入 https://www.nikkei.com/article/DGXMZO6588293005112020LKA000 「スタートアップ点火」中部から世界 名古屋支社シンポ https://www.nikkei.com/article/DGXZQOFD087YN008122020000000 インフルエンサーによる独自製品開発やブランド構築を支援するGenflowは英BGFから11.4億円調達 https://jp.techcrunch.com/2021/01/21/2021-01-20-genflow/ 本業より副業で稼ぐ「パワフル副業者」急増で企業に求められる新しい組織づくり https://dime.jp/genre/1076364/
976 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 08:20:29.72 ID:XBzTqCMZ.net] posh-git と GetChildItemColor でダイブましになった 他にもおすすめあったらおせーて!
977 名前:デフォルトの名無しさん mailto:sage [2021/02/23(火) 20:50:03.67 ID:8GGn/OTs.net] GetChildItemColorを入れるとシンボリックリンクのリンク先のパスが表示されなくなるのがクソ
978 名前:デフォルトの名無しさん mailto:sage [2021/03/02(火) 00:20:13.77 ID:NQgDi+il.net] #test.ps1 param([array]$foo) echo ('$ARGS[0]' +':'+ $ARGS[0]) echo ('$foo[0]' +':'+ $foo[0]) echo ('$foo[1]' +':'+ $foo[1]) echo ('$foo[2]' +':'+ $foo[2]) PS> .\test.ps1 aaa -foo bbb,ccc,ddd $ARGS[0]:aaa $foo[0]:bbb $foo[1]:ccc $foo[2]:ddd PS> .\test.ps1 aaa -bar bbb,ccc,ddd $ARGS[0]:-bar $foo[0]:aaa $foo[1]: $foo[2]: PS C:\script> PS> \test.ps1 aaa $ARGS[0]: $foo[0]:aaa $foo[1]: $foo[2]: @引数やパラメータの数、パラメーター名などのエラーをチェックする方法を教えてください。 Aパラメータの区切りをカンマで無くスペースにする方法があれば教えてください。 ググってみたのですが、ググり方が悪いのか、見つからず苦しんでおります
979 名前:デフォルトの名無しさん mailto:sage [2021/03/02(火) 00:22:05.89 ID:NQgDi+il.net] >>974 行数制限に引っかかったので分割します。 @は引数〇個、パラメーター名foo、パラメーターfooの数、fooが1個以上(0はだめ)というのをチェックしたいです。 なにとぞよろしくお願いいたします。
980 名前:デフォルトの名無しさん mailto:sage [2021/03/02(火) 10:00:39.98 ID:TaWWQOJL.net] >>975 about_Functions_Advanced_Parameters https://docs.microsoft.com/ja-jp/previous-versions/windows/powershell-scripting/hh847743(v=wps.640)
981 名前:デフォルトの名無しさん mailto:sage [2021/03/02(火) 23:49:57.97 ID:NQgDi+il.net] >>976 ありがとうございます。 読み解くのに時間がかかりそうですが、 希望のものが書いてありそうです。
982 名前:デフォルトの名無しさん mailto:sage [2021/03/03(水) 03:07:24.22 ID:hWQCqBl5.net] そもそもPowerShellの関数(コマンドレット)は空白区切りで引数渡すんだけどね >>974 はカンマ区切りで引数を渡してるんじゃなくて、カンマで作った配列を渡してるだけ 自動変数の$args(配列)はjavascriptでいう残余引数みたいな物 PS> .\test.ps1 aaa -foo bbb,ccc,ddd 名前付き引数 $foo に配列 bbb,ccc,ddd が渡され、未定義の aaa が $args に渡されてる PS> .\test.ps1 aaa -bar bbb,ccc,ddd $foo に先頭の引数 aaa が渡され、未定義の -bar と配列 bbb,ccc,ddd が $args に渡される 特にオプションを指定しなければ、複数の引数を設定すれば空白区切りで渡せる
983 名前:デフォルトの名無しさん mailto:sage [2021/03/12(金) 15:14:39.63 ID:VgGpSMHu.net] PowerShell起動すると毎回更新しろって出るのがウザくて7入れてみたけど起動時の立ち上がりが遅くなって切れそう しかも結局help云々が毎回出るし MS頭おかしいんでねーの
984 名前:デフォルトの名無しさん mailto:sage [2021/03/12(金) 19:40:18.23 ID:gsxqF2ed.net] おバカ自慢要らね
985 名前:デフォルトの名無しさん mailto:sage [2021/03/13(土) 10:00:11.18 ID:fu8qQk1O.net] v7.0.6 https://github.com/PowerShell/PowerShell/releases/tag/v7.0.6 v7.1.3 https://github.com/PowerShell/PowerShell/releases/tag/v7.1.3
986 名前:デフォルトの名無しさん mailto:sage [2021/03/13(土) 14:33:26.87 ID:LuYPD+lh.net] | where-objectで、条件に引っかかったら0(True)、引っかからなかったら1(False)を返す方法ってありませんでしょうか。 あるサービスの実行状態を知るために、こういうことをしてるんですが、 (Get-Service | Where-Object -Property Name -Match Adobe | Where-Object -Property Status -Match Running).length 1 ←AdobeがRunnningだった 0 ←AdobeがRunnin
987 名前:gじゃなかった 他に、もっとPowershellっぽい書き方があったら教えてください [] [ここ壊れてます]
988 名前:デフォルトの名無しさん [2021/03/13(土) 14:59:52.96 ID:4/YYKqK7.net] >>982 ワンライナーにこだわっているのか?
989 名前:デフォルトの名無しさん mailto:sage [2021/03/13(土) 15:31:11.30 ID:33EHGK5P.net] Ruby の3項演算子みたいなものは無いの? 真偽値となる条件式 ? 真の時の値 : 偽の時の値
990 名前:デフォルトの名無しさん mailto:sage [2021/03/13(土) 15:36:01.07 ID:ErfpRTBJ.net] (gsv adobe*).status -contains 'running'
991 名前:デフォルトの名無しさん mailto:sage [2021/03/13(土) 15:48:12.79 ID:Qa5+c/Kf.net] >>982 [int][bool](Get-Service | Where-Object {($_.Name -Match 'Adobe') -and ($_.Status -Match 'Running')})
992 名前:デフォルトの名無しさん mailto:sage [2021/03/13(土) 20:59:36.95 ID:3roljCwu.net] >>984 三項演算子 https://docs.microsoft.com/ja-jp/powershell/scripting/whats-new/what-s-new-in-powershell-70#ternary-operator
993 名前:デフォルトの名無しさん mailto:sage [2021/03/14(日) 15:40:02.21 ID:am3+IzSP.net] PowerShellは処理の方法が多くていいな
994 名前:デフォルトの名無しさん mailto:sage [2021/03/14(日) 21:46:47.24 ID:8YYOAayf.net] 連想配列の参照渡しで function f([ref]$h) { $h.value } $h = @{ a = 0; b = 1} f([ref]$h) はうまくいくんだけど、引数もう一個増やして function f([ref]$h, $s) { $h.value; $s } $h = @{ a = 0; b = 1} $s = 2 f([ref]$h, $s) にすると、 f : パラメーター 'h' の引数変換を処理できません。引数には参照型を指定する必要があります。 何が悪いん?ググっても見つけられなくてさっきから悩んでる(汗
995 名前:デフォルトの名無しさん mailto:sage [2021/03/14(日) 21:55:49.94 ID:8nGQn8Lf.net] 括弧とカンマいらないのでは
996 名前:デフォルトの名無しさん mailto:sage [2021/03/14(日) 22:41:43.33 ID:T+RcbFBu.net] f ([ref]$h) $s
997 名前:デフォルトの名無しさん mailto:sage [2021/03/14(日) 23:07:21.02 ID:8YYOAayf.net] >>991 出来た!ありがとう でもなぜその書き方になるのかわからない(汗
998 名前:デフォルトの名無しさん mailto:sage [2021/03/15(月) 15:30:15.42 ID:2OtrSpOH.net] カッコとカンマで引数渡すのはオブジェクトのメソッドの時だけだね 関数はスペース区切りで渡す これは文法だから理由はない
999 名前:デフォルトの名無しさん mailto:sage [2021/03/15(月) 16:45:16.26 ID:bRJV5TtK.net] 1, 2 で配列作っちゃうようにしちゃったからねぇ 記法がシェルスクリプトとプログラム言語のあいの子みたいになってるからちょっと直感に反する所がちらほら見え隠れするのはしょうがない
1000 名前:デフォルトの名無しさん [2021/03/16(火) 23:02:58.87 ID:Bd62bkLQ.net] >>988 処理の方法が多いことは、可読性が落ちる原因にもなる。 PythonをもちあげてPerlをくさす時に使われたのと同じ論法だよ。
1001 名前:デフォルトの名無しさん mailto:sage [2021/03/17(水) 08:00:24.75 ID:EzeD0xtp.net] 俺がPowerShellを気に入ったのはPerlと同じ匂いを感じたからだ
1002 名前:デフォルトの名無しさん mailto:sage [2021/03/17(水) 08:19:50.03 ID:vnLGIRIV.net] しかしPerlではないのがいいところ
1003 名前:デフォルトの名無しさん mailto:sage [2021/03/17(水) 08:38:00.89 ID:sqd1XF3h.net] Why did you do that? $VAR/ {} / Weak Intellisense https://docs.microsoft.com/en-us/archive/blogs/monad/why-did-you-do-that-var-weak-intellisense The $ in front of variables comes from our design center of being an interactive command oriented shell. Interactive shells are NOT the same thing as Scripting languages with command interpretors. Interactive shells are case studies in engineering tradeoffs (another way of saying that is that they tend to be a little quirky). There is a tension between the needs of a great interactive experience and a great scripting/programming experience. Time and time again during the course of the project, people would try to make us "choose" between one or the other. We refused. We believe that if you work hard enough at it, you can solve the puzzle and provide a great solution for both. We were absolutely subborn on this point. Time and time again, we were able to succeed with this approach if we travailed long enough.
1004 名前:デフォルトの名無しさん mailto:sage [2021/03/17(水) 11:52:58.50 ID:eAjGywmP.net] interactive性は'標準で'エイリアスが定義されてることで十分満足してる
1005 名前:デフォルトの名無しさん mailto:sage [2021/03/18(木) 00:08:54.40 ID:t06qOp3P.net] PerlとPythonは文字に対するencode, decodeの意味が逆。まめな
1006 名前:デフォルトの名無しさん mailto:sage [2021/03/18(木) 00:30:47.74 ID:/MpReTiX.net] PowerShell -Part 5 https://mevius.5ch.net/test/read.cgi/tech/1615994992/ 次スレ。
1007 名前:デフォルトの名無しさん mailto:sage [2021/03/18(木) 00:39:40.12 ID:3weRgygV.net] >>1001 ナイス滑り込み
1008 名前:デフォルトの名無しさん mailto:sage [2021/03/18(木) 01:34:48.09 ID:dIgskCmL.net] 質問良いですか
1009 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 441日 9時間 26分 17秒
1010 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています