1 名前:デフォルトの名無しさん mailto:sage [2022/02/13(日) 18:36:12.07 ID:LaQ04ZoE.net] 前スレ PowerShell -Part 5 https://mevius.5ch.net/test/read.cgi/tech/1615994992/ 次スレは>>980 が立ててね!!
52 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 20:57:30.79 ID:FVUZxr5Y.net] dir "*a*" などとして対象のフォルダだけ表示されることを確認して dir "*a*" |
53 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 20:58:43.73 ID:FVUZxr5Y.net] dir "*a*" | % {remove-item -LiteralPath $_.Name} でどうだろうか
54 名前:デフォルトの名無しさん mailto:sage [2022/02/25(金) 21:06:53.72 ID:zbdaU1gm.net] dir /x で8.3形式のファイル名があるなら、それで消してみる だめなら、>>50 の形式でフルパスを指定する
55 名前:915 mailto:sage [2022/02/26(土) 12:47:40.66 ID:
] [ここ壊れてます]
56 名前:AL/cEm3C.net mailto: ありがとうございます。 レス遅くなりました。以下のように返ってきました。 >>53 で出てきたフォルダ名+[]$aと末尾に半角スペースが見えません。 見えない文字が埋め込まれている可能性はありますでしょうか? >>52 dir : 項目 C:\works\ + $a が見つかりませんでした。 発生場所 行:1 文字:1 + dir "*a*" + ~~~~~~~~~ + CategoryInfo : ObjectNotFound: (C:\works\ + $a :String) [Get-ChildItem], IOException + FullyQualifiedErrorId : ItemNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand >>53 dir : 項目 C:\works\ + $a が見つかりませんでした。 発生場所 行:1 文字:1 + dir "*a*" | %{remove-item -LiteralPath $_.name} + ~~~~~~~~~ + CategoryInfo : ObjectNotFound: (C:\works\ + $a :String) [Get-ChildItem], IOException + FullyQualifiedErrorId : ItemNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand [] [ここ壊れてます]
57 名前:915 mailto:sage [2022/02/26(土) 12:47:51.62 ID:AL/cEm3C.net] >>54 ドライブ C のボリューム ラベルは Windows です ボリューム シリアル番号は AE2C-1EB8 です C:\works\ のディレクトリ 2022/02/23 16:50 <DIR> + $a 2022/02/25 10:55 <DIR> . 2022/02/25 10:55 <DIR> .. 0 個のファイル 0 バイト 3 個のディレクトリ 1,144,323,043,328 バイトの空き領域 >>50 使い方が分からず試せてません
58 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 13:19:35.91 ID:zbGeAZZp.net] Win10の質問スレ行けって言ったのに何故行かないのかな? powershellに拘る理由がわからないよ 仕方ないのでこっちで回答するわ Poweshell関係ないけど https://itojisan.xyz/パソコンのトラブル/windows10でフォルダ・ファイルを削除できない/ これ全部試せ
59 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 13:34:00.21 ID:DA2+bsLA.net] これ本来含まれないはずの+が含まれてるから消さないんでしょ ディスクエディタかなんかで強制的に消せる名前にリネームするしかないのでは? (FAT時代にしかやったことないからNTFSでできるかは知らん) 曖昧な記憶のスクリプトを正確に思い出せればなんとかなるやもしれんが 普通の方法では+がファイル名かフォルダ名の一部と解釈されないから消すのは無理だと思う なかなかコーナーケースのバグ見つけたなw 多分PSでどうこうできる領域じゃない 再インストールが一番早いかもw
60 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 13:36:55.01 ID:+OtunY2h.net] 当てずっぽうで試す前に、まずabout_Quoting_Rulesを読んでくれ 何かおかしい文字が入ってるのかは、[byte[]]にキャストすれば分かるから それ見て正しくクオートして入力してくれ
61 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 14:08:05.70 ID:+OtunY2h.net] >>58 +を特別扱いするのはNTFSじゃなくて、特定のコマンドの仕様では?(copy fi+le等) 色んなコマンドが内部で引いてる可能性があるから避けたほうが無難な文字とは思うけど $もNTFS的には合法だけど、予約名のプレフィックスにする慣習なので、なので避けたほうがいいのは確か undocumentedなのもいっぱいある
62 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 14:54:37.65 ID:+OtunY2h.net] win10/pwsh7.2.0/NTFSで試してみた > ni -d sandbox |sl > echo valid? >'+ $a' > gci |select name Name ---- + $a > ri '+ $a' &&echo $? True > gci |select name # no output うーん?
63 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 15:18:46.03 ID:1IWc50so.net] cmdを起動して rd "\\.\C:\works\ + $a "
64 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 15:22:25.68 ID:1IWc50so.net] ダメなら引用符ありなしと、//./ と //?/ を変化させて試してみて
65 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 15:46:10.03 ID:EUVpr27z.net] 検証した cmdを起動して rd "\\?\C:\works\ + $a " が正解だった このやり方はPowershell経由では消えない 末尾スペースが再現できなかったから md "\\?\C:\works\ + $a " で作った
66 名前:915 mailto:sage [2022/02/26(土) 16:01:12.94 ID:AL/cEm3C.net] >>62 >>64 消えました!!凄い!!! ご教示頂きました皆さん本当にありがとうございます!
67 名前:915 mailto:sage [2022/02/26(土) 16:04:31.69 ID:AL/cEm3C.net] 因みに rd “\\?\〜“ってどんな意味でしょうか?
68 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 16:07:54.37 ID:EUVpr27z.net] 文字列解析を無効化する名前空間 https://docs.microsoft.com/ja-jp/windows/win32/fileio/naming-a-file#maximum-path-length-limitation
69 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 16:49:18.98 ID:+OtunY2h.net] ずこー ファイル名に末尾スペースはNTFS的に非合法のはずなのに、なんで作れちゃうかな 闇が深い
70 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 16:54:25.81 ID:+OtunY2h.net] 一応補足しとくとシェルは関係ない、pwshから非合法パス名へアクセスするのにも(ri)Remove-Item "\\?\~"は使える(使えてしまう)
71 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 19:13:10.48 ID:kQiC9zng.net] -LiteralPathが多分必要
72 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 20:14:14.01 ID:+OtunY2h.net] ri -lp '\\?\C:\Users\ore\sandbox\trailing 'で消せた そもそも-literalpath指定無しには正しくない名前のファイルは作れないようになってる 標準のFileSystemプロバイダは静かに切り詰めるようだけど、できればエラーにしてほしいところ
73 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 20:16:53.67 ID:+OtunY2h.net] 当たり前だがext4上では合法だから普通に作れるな プロバイダ依存きをつける
74 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 20:28:51.97 ID:HRmzshO4.net] 各々のプログラムのモラルに任せられてるのが残念なところ pwshからコマンドレットを使う限りはうっかり変なもの作るの阻止してくれるのが救いか linux/mac上ならそもそもOSがハネてくれるのでpwshで余計なチェック挟む必要もないのだけど
75 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 20:33:36.43 ID:7VK+waus.net] Mac特有の濁点ユニコードもそのまま入るし互換性のためだろう
76 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 20:34:30.39 ID:HRmzshO4.net] いや >>29 によるとコマンドレットで作れてしまったのか それはちょっとまずい気がする
77 名前:デフォルトの名無しさん mailto:sage [2022/02/26(土) 23:23:38.20 ID:U2u/902M.net] いや真似しても普通には再現できなかったよ \\?\ でなんとか作った 条件もわからんしいたずらに憂いてもしょうがない
78 名前:デフォルトの名無しさん mailto:sage [2022/02/28(月) 02:46:56.51 ID:RHAmUG8r.net] APIで普通に作れるから対策したつもりてもコマンドを適当に組み合わせたら偶然できるようなレベル web上に消し方の情報が沢山あるのはそういう理由
79 名前:デフォルトの名無しさん mailto:sage [2022/02/28(月) 10:01:03.24 ID:1ziskyp5.net] >>77 76は>>75 への返信
80 名前:デフォルトの名無しさん mailto:sage [2022/02/28(月) 13:10:38.48 ID:5+6VAuli.net] 試す気はないけど >>64 で再現できるんでね?
81 名前:デフォルトの名無しさん mailto:sage [2022/02/28(月) 14:17:24.11 ID:9W2zYqHy.net] そりゃあえて迂回したらな Test-Path -IsValidは信頼できるのだろうか? 中身分からものに頼るよりendswith(". ")とかで自分でバリデーションするべきか
82 名前:デフォルトの名無しさん mailto:sage [2022/02/28(月) 14:24:32.38 ID:9W2zYqHy.net] 任意文字列渡されてもそのまま作らせない、あるいは勝手に置換+ユニークIDにリネームが現実的な防御策か ファイルシステム移行で問題起こす事もあるし、どこでも合法なファイル名に正規化しておいた方が後のため
83 名前:デフォルトの名無しさん mailto:sage [2022/02/28(月) 15:01:04.99 ID:Xoh24ILj.net] >>79 ID変わってるけど64と78は同一人物です psを普通に使う範囲までこのOSの瑕疵を気のするのは過剰品質だと感じるし、日本の安心安全神話で生産性クソ低い件を連想してしまう
84 名前:デフォルトの名無しさん mailto:sage [2022/02/28(月) 15:11:14.28 ID:NrGkgOto.net] bashとか平気で不正ファイルポンポン作るからヤバい OSが拒否するのを期待してるからそれ自体が悪い訳ではないのだが、安易にwindowsで使うのは本当にヤバい
85 名前:デフォルトの名無しさん mailto:sage [2022/02/28(月) 15:27:14.93 ID:9W2zYqHy.net] win版のgitに付いてくるの使ってるけど、unix系ツールはファイルシステムに気を使う移植は見たことがない 仮想ドライブに隔離してしまうのが手っ取り早くて安全そう
86 名前:デフォルトの名無しさん mailto:sage [2022/02/28(月) 15:40:26.92 ID:9W2zYqHy.net] >>82 これな 考えれば考えるだけボロが出てくるし思考放棄することにした 行儀悪いプログラムの後始末のやり方だけ知っときゃいいのよ (真剣な仕事でなければ)
87 名前:デフォルトの名無しさん mailto:sage [2022/02/28(月) 15:51:52.53 ID:9W2zYqHy.net] win11ではこっそり治ってたりしねーかなこれ、なければwin12に乞うご期待…
88 名前:デフォルトの名無しさん mailto:sage [2022/03/01(火) 03:09:34.84 ID:L/ghTddK.net] >>82 これは瑕疵ではない、仕様とMSは一応言ってるんじゃね? >>67 によると ↓ だそうだから、自分でちゃんとチェックしろ、対処しろということだろうし ファイル i/o の場合、 \ \ パス文字列の "? \ " プレフィックスは、すべての文字列解析を無効にし、その後に続く文字列をファイルシステムに送信するために、Windows api に指示します。 ↑こう書くのはおそらく他OSのコードをそのまま移植しやすくするため、なんでね? つまり何もチェック(今回の例なら末端にスペース入ってないか)せずにAPIに渡すと 結果として>>29 のようなことが起き得ると
89 名前:デフォルトの名無しさん mailto:sage [2022/03/01(火) 03:14:07.19 ID:L/ghTddK.net] あ、>>29 では>>64 の書式では書いてないのか >>64 の動作は仕様だと思うけど>>29 でなったのならバグだな(試す気はない)
90 名前:デフォルトの名無しさん mailto:sage [2022/03/01(火) 13:31:53.46 ID:fDW5QBJr.net] powershellで文字コード?順でソートしたい時どうしたらいいんでしょう 3---t.txt 3-1-t.txt 4---t.txt 4-1-t.txt ってファイルがある時、'-'が0x2dで'1'が0x31だから、 3---t.txt 3-1-t.txt 4---t.txt 4-1-t.txt と並ぶのを期待したのに昇順でソートしたら gci | sort 3-1-t.txt 3---t.txt 4-1-t.txt 4---t.txt になってしまう 今確認したらcmdのdir /ONオプションでも同じだった
91 名前:デフォルトの名無しさん mailto:sage [2022/03/01(火) 13:42:53.50 ID:fDW5QBJr.net] ファイル名の末尾の英字取って 3---.txt 3-1-.txt 4---.txt 4-1-.txt としたら 3---.txt 3-1-.txt 4---.txt 4-1-.txt になったけど意味が判らない 変なバグに遭遇した気分
92 名前:デフォルトの名無しさん mailto:sage [2022/03/01(火) 16:20:44.39 ID:XlErARwx.net] 最近のWindowsは9.txtの後ろに10.txtが並ぶように数の大小を考慮したソートを標準で行うからそのアルゴリズムが生む微妙な綾じゃね レジストリによって挙動が変わるはず 文字コード順を順守させたいならファイル名標準のソートにならないように、ハッシュテーブルの引数なんかを使って単なる文字列としてソートしてあげればいいんじゃないかな
93 名前:デフォルトの名無しさん mailto:sage [2022/03/01(火) 22:49:13.37 ID:qg4SVCg0.net] テストしてないし遅い気がするけど 下準備なしがよければ gci | sort {[Text.Encoding]::Unicode.GetBytes($_.Name) | %{'{0,3}' -f $_}} ※Shift_JIS基準がよければ gci | sort {[Text.Encoding]::GetEncoding('shift_jis').GetBytes($_.Name) | %{'{0,3}' -f $_}} 重複ないなら $list = [Collections.Generic.SortedList[string,IO.FileSystemInfo]]::new([StrintygComparer]::Ordinal) gci | %{$list.Add($_.Name, $_)} 重複あるなら $list = [Collections.Generic.List[IO.FileSystemInfo]]::new() $list.AddRange([IO.FileSystemInfo[]]@(gci)) $list.Sort({Param($a, $b) [StringComparer]::Ordinal.Compare($a.Name, $b.Name)})
94 名前:デフォルトの名無しさん mailto:sage [2022/03/02(水) 17:07:09.87 ID:HFEr6ITo.net] >>92 めっちゃ参考になった ありがとう
95 名前:デフォルトの名無しさん mailto:sage [2022/03/02(水) 17:54:20.18 ID:qWIZmWPY.net] >>89 PowerShell 5.1だと確かにそうなるけど PowerShell 7.2.1だとgci | sort で期待通りの結果になったよ 最新バージョン使った方が良いんでない?
96 名前:デフォルトの名無しさん mailto:sage [2022/03/02(水) 21:57:02.42 ID:Gj5Erajd.net] PowerShellでSQliteのデータベースに追記操作しようと思っていますが テーブル名を変数にし、カラムと追記したい内容を配列で操作しようとすると上手くいきません。 一括で出来ないなら配列内ループでと思いやってみましたが、そちらもうまくいきませんでした。 配列でINSERTするには、以下のサンプルだとどういった記述をすればよいのでしょうか?
97 名前:デフォルトの名無しさん mailto:sage [2022/03/02(水) 21:57:57.51 ID:Gj5Erajd.net] using namespace System.Data.SQLite Set-StrictMode -Version Latest $ErrorActionPreference = "STOP" # モジュールのインポート Import-Module SQLite # データベースファイル $db_path = "E:\ps1\sqlite\sample.db" # コネクションオブジェクトの生成 $con = [SQLiteConnection]::new() | % { $_.ConnectionString = ("Data Source = {0}"-f $db_path) $_.Open() $_ } $cmd = [SQLiteCommand]::new() $cmd.Connection = $con
98 名前:デフォルトの名無しさん mailto:sage [2022/03/02(水) 21:59:03.05 ID:Gj5Erajd.net] $Table = "List" $ArrCol = @("No","Name","Gender") $ArrRecord = @("1","山田","男")
99 名前:デフォルトの名無しさん mailto:sage [2022/03/02(水) 21:59:46.03 ID:Gj5Erajd.net] # レコードの追加 $cmd.CommandText = @" INSERT INTO $Table ($ArrCol) values ($ArrRecord) "@
100 名前:デフォルトの名無しさん mailto:sage [2022/03/03(木) 00:11:25.85 ID:Ai6V8ofW.net] どこでどんなエラーが出てるのか分からないし試してないけど 文字列の中で配列変数をそのまま展開してるのが原因なんじゃないかな。 $cmd.CommandText = @" INSERT INTO $Table ($($ArrCol -join ', ')) values ($($ArrRecord -replace '^|$', "'" -join ', ')) "@ ※余計なお世話だろうけどインジェクション対策がないので必要なら入れてね。 (SQLiteがサポートしてるか知らないけど通常はSQLパラメータを使用。)
101 名前:デフォルトの名無しさん mailto:sage [2022/03/03(木) 07:55:37.70 ID:vKIVQ1+Z.net] >>99 ありがとうございます。 一回やってみます
102 名前:デフォルトの名無しさん mailto:sage [2022/03/03(木) 22:26:57.79 ID:vKIVQ1+Z.net] すみません、色々試したのですがわからずまた質問させてください $Table = "2022" $ArrCol = @("No","Day","Name") $ArrRecord = @("1","2022/03/03","山田") だとして
103 名前:デフォルトの名無しさん mailto:sage [2022/03/03(木) 22:35:42.15 ID:vKIVQ1+Z.net] cmd.CommandText = @" INSERT INTO "2020" ("No","Day","Name") values ("1","2022/03/03","山田") "@ だとエラーなくデータベースに追記出来るのですが
104 名前:デフォルトの名無しさん mailto:sage [2022/03/03(木) 22:37:17.23 ID:vKIVQ1+Z.net] $cmd.CommandText = @" INSERT INTO [string]$Table ("No","Day","Name") values ("1","2022/03/03","山田") "@ だと"0"個の引数を指定して"ExecuteNonQuery"を呼び出し中に例外が発生しました"SQLite error near "2022":syntax error"
105 名前:デフォルトの名無しさん mailto:sage [2022/03/03(木) 22:37:58.49 ID:vKIVQ1+Z.net] あと $cmd.CommandText = @" INSERT INTO "2022" ($($ArrCol -join ', ')) values ("1","2022/03/03","山田") "@ か $cmd.CommandText = @" INSERT INTO "2022" ("No","Day","Name") values ($($ArrRecord -replace '^|$', "'" -join ', ')) "@ だと "0"個の引数を指定して"ExecuteNonQuery"を呼び出し中に例外が発生しました"SQLite error near "/":syntax error" とエラーが出てデータベースを変更できませんでした 色々試したのですが理由がわからず申し訳ございませんが教えたもらいたく
106 名前:デフォルトの名無しさん mailto:sage [2022/03/03(木) 22:42:34.74 ID:vKIVQ1+Z.net] すみません 5chだとSQL関係で書き込めなかったのですが $cmd.え(E)xecuteNonQuery() | Out-Null も各場所で記入しています
107 名前:デフォルトの名無しさん mailto:sage [2022/03/04(金) 01:01:51.54 ID:rY0dcLRW.net] SQLをデータベースに渡す前に、ヒアドキュメントがどう変数展開されているのかデバッグしたりコンソール出力してみるといいよ いろいろミスに気づくはず 軽く見た感じ次のように展開されてる気がする INSERT INTO [string]2022 ("No","Day","Name") values ("1","2022/03/03","山田") INSERT INTO "2022" (No, Day, Name) values ("1","2022/03/03","山田") INSERT INTO "2022" ("No","Day","Name") values (1, 2022/03/03, 山田)
108 名前:デフォルトの名無しさん mailto:sage [2022/03/05(土) 08:12:15.74 ID:UxduI4YM.net] PowerShell and OpenSSH team investments for 2022 https://devblogs.microsoft.com/powershell/powershell-and-openssh-team-investments-for-2022/ We continue to explore and discuss with the Windows team how to make it easier to deploy PowerShell 7 on Windows. As noted previously, support lifecycle differences between Windows and .NET along with size constraints we don’t have the ability currently to ship PowerShell 7 in Windows. Previously we considered a bootstrapper to be a viable solution giving the experience of being inbox in Windows, however, it would have been a significant effort to implement. Instead, we are exploring shipping a cmdlet in Windows PowerShell to make it easy to install PowerShell 7. A new RFC will be published to discuss this.
109 名前:92 mailto:sage [2022/03/05(土) 11:18:59.79 ID:2eHlJFPP.net] >>92 1つ目の例のUnicodeはUTF-16LEの事だからだめだったね。 BigEndianUnicode(UTF-16BE)にする必要があったし、 そもそもbyte型にしてエンディアン気にする必要もないから、 gci | sort {[int[]][char[]]$_.Name | %{'{0,5}' -f $_}} でよいはず。 ※全く関係ない別の作業中になんか急に気づいた。
110 名前:99 mailto:sage [2022/03/05(土) 11:34:56.78 ID:2eHlJFPP.net] SQLiteがカラム名等を「"」で括る事を要求しているなら $cmd.CommandText = @" INSERT INTO "$Table" ($($ArrCol -replace '^|$', '"' -join ', ')) values ($($ArrRecord -replace '^|$', '"' -join ', ')) "@ かな。>>106 さんの言う通りなので確認してみて。 これもだめなら、成功例と、失敗例や変数値のテーブル名が違うからそこかも。
111 名前:デフォルトの名無しさん mailto:sage [2022/03/05(土) 17:03:38.16 ID:aFkos6IC.net] >>107 もう開発やめりゃいいのにな これまでWindowsに入ってるから採用されてきただけで、わざわざ入れて使うならPowerShellなんか選ばれるわけがない コマンドレットで簡単に導入できるようにするならPowerShellじゃなくてPythonにでもしたほうがいいんじゃないか
112 名前:デフォルトの名無しさん mailto:sage [2022/03/05(土) 22:04:13.92 ID:BfpuuE1g.net] インストールしてなくてもpythonコマンドでMSストア版pythonのダウンロードページに飛ばされるから、既にpwsh7よりも導入が楽という悲しみ
113 名前:デフォルトの名無しさん mailto:sage [2022/03/05(土) 22:12:35.50 ID:vfk/Azs+.net] PowerShellってそんな残念なプログラム言語なんですか? がんばって勉強したのに納得できません
114 名前:デフォルトの名無しさん mailto:sage [2022/03/05(土) 22:41:29.84 ID:ws14fGQi.net] PowerShell5系は向こう10年は大丈夫 6以降はAzure以外では全く使われておらず、Azureに生涯を捧げるのでない限りは完全無視でOK
115 名前:デフォルトの名無しさん mailto:sage [2022/03/06(日) 11:25:06.52 ID:2dMAfvhM.net] メインは蛇使いだけど 色々インポートしなくてもそこそこ戦えるのでregex、小規模データ処理、重くない数値計算がシェルから直接引けるpwshは有り難い ネイティブライブラリ揃ってないからパワーが居るのはPython、まあPython自体はpwshとドングリ背比べ(処理速度、標準ライブラリもほぼ等価)だけど、やはりライブラリが強い
116 名前:デフォルトの名無しさん mailto:sage [2022/03/06(日) 11:37:06.16 ID:Ou5vEvLf.net] 蛇使いwww 蠍と射手の間かよwww
117 名前:デフォルトの名無しさん mailto:sage [2022/03/06(日) 14:35:41.73 ID:2wKnUbYj.net] Pythonは.NETを使えないから糞
118 名前:デフォルトの名無しさん mailto:sage [2022/03/06(日) 15:35:16.76 ID:+PaQnGDE.net] PowershellとPythonだと得意分野が違うよね
119 名前:デフォルトの名無しさん mailto:sage [2022/03/06(日) 16:40:58.28 ID:N33QeZ0g.net] ちょっと詳しい人に聞きたいんだけど開発環境で使用しているSDKのコマンドがcmdだと実行可能だけどPowershellだと一切認識されませんてエラーがでるんだけどこの理由はなぜ? WIndows 11だとターミナルのデフォがPowershellなのにもやもやする、この解決方法はある? もう一つ、ファイル名を指定して実行で起動したcmdからはSDKのコマンドが実行できるのに、Terminal(wt.exe)の既定のcmdからコマンドを実行すると認識されていませんエラーが出るんだけどこの原因もなぜ?解決方法はある? cmdとpowershellとterminalと複数のshellを用意してMSは何がしたいのかマジで意味がわからない WSLとか作っててOSSに寛容になったんだからさっさとデフォのShellをbashかzshにしてくれれば開発環境としてより便利なのに・・・
120 名前:デフォルトの名無しさん mailto:sage [2022/03/06(日) 16:49:05.43 ID:4qF5AnI1.net] しかもそのデフォルトで開くPowerShell、既に非推奨のバージョンなんだぜ もう完全に破綻してるからWSLだけ使えばいいのよ
121 名前:デフォルトの名無しさん mailto:sage [2022/03/06(日) 17:14:53.35 ID:Y34SWeR7.net] >>118 情報少なくてわかんないけど、カレントフォルダに対して「.\ファイル名」の記法で書いてないとかはない? ファイル名に特殊記号を含むとか
122 名前:デフォルトの名無しさん mailto:sage [2022/03/06(日) 19:53:05.95 ID:+PaQnGDE.net] bashとかは言語的にはPowershellに比べて時代遅れ過ぎるわ さっさとPowershell7に統
123 名前:一したほうが遥かにマシ [] [ここ壊れてます]
124 名前:デフォルトの名無しさん mailto:sage [2022/03/06(日) 20:11:36.59 ID:GpPJTCKS.net] 10や11に標準で入ってる5.1で動くようにしてる人が大半じゃないの 機能的にも特にこれ以上期待するものはないんだけど
125 名前:デフォルトの名無しさん mailto:sage [2022/03/06(日) 20:14:22.19 ID:N33QeZ0g.net] >>119 いやマジでそれでしたwww PS7をインストールしてPS7で実行したらCLI認識しましたイミフwww そしてPS7をインストールしてもアップデートされずWin11デフォのPS5がそのままアンインストールもできず鎮座してるくそすぎて草
126 名前:デフォルトの名無しさん mailto:sage [2022/03/07(月) 00:21:21.62 ID:M26ldpDZ.net] >>106 デバックで出力したとき文字列だから勝手に"が消されているものかと先入観を持ってしまっており疑問にすら思いませんでした 丁寧に説明していただきありがとうございます。 >>109 ありがとうございます。明日確認してみます。
127 名前:デフォルトの名無しさん mailto:sage [2022/03/07(月) 17:43:24.45 ID:GqmKE44y.net] powershell.exeに-Fileで.ps1スクリプトを指定する場合に、 引数で文字列配列を指定する簡単な方法はありますか? .ps1側に変更を加えるのは無しで、Param()は以下の指定だとします。 Param( [string[]] $p1, [string[]] $p2 ) 普段はPowerShellコンソールや他のスクリプトからこの.ps1を使っています。 これを.batに組み込みたい事があったものの配列の指定方法が分からず、 以下のように-Commandにして回避しました。 -Fileの場合でも指定方法があったのかな、と気になっています。 powershell.exe -c "〜.ps1 -p1 @('aaa', 'bbb') -p2 @('ccc', 'ddd')"
128 名前:96 mailto:sage [2022/03/08(火) 02:39:16.58 ID:BWZbDM8v.net] $Table = "2022" $ArrCol = @("No","Day","Name") $ArrRecord = @("1","","") このようにブランクの配列があると '1', ', ',' 上のように途中の「""」が「'」シングルクォーテーション1つになりエラーが起こっているということがわかりました。 ですので $ArrRecord | foreach-object -Process {$_ -replace '"',"'"} として配列内で変換しようと思ったのですが、$_の時点でダブルクォーテーションが取れており上手く変換できない状態です ($($ArrRecord -replace '^|$', '"' -join ', '))の「'^|$'」は正規表現で前と後ろを「"」で変換するということですよね 途中のパイプの意味がわかっていないです
129 名前:デフォルトの名無しさん mailto:sage [2022/03/08(火) 10:15:51.20 ID:HM66xeZm.net] >>126 苦戦してるね まずプログラミング一般の基礎として、ソースコード上に文字列型の変数値を直接書きたいということを伝えるための(文字列リテラルの)引用符と、文字列の中に引用符という文字データを含めたいと伝えるための引用符は別なので理解・区別しておかないとずっと混乱する $_の時点で引用符が取れたという感覚は間違いで、今回文字列の中身には引用符文字は含まれていなくて、文字列リテラルですと伝える引用符になってる 次に、^|$ で置換する発想は、文字列の特定の位置が先頭または末尾なら置換というところまでは狙いどおり でも空の文字列だった場合、正規表現処理が文字列を左から走査したとき「先頭かつ末尾」という単一の位置しかないので、置換も一回しか行われず引用符一つだけになるというバグになってる 例えばこうすれば文字列リテラルのなかに引用符文字を入れられる ($("""$ArrRecord""" -join ', ')) ($("`"$ArrRecord`"" -join ', ')) ($("'$ArrRecord'" -join ', ')) いずれも外側の二重引用符がリテラルの引用符で、内側の引用符が文字データの引用符
130 名前:デフォルトの名無しさん mailto:sage [2022/03/08(火) 10:21:04.34 ID:HM66xeZm.net] >>127 配列じゃなくて各要素の文字列を囲まないとダメたった ($("""$_""" -join ', ')) ($("`"$_`"" -join ', ')) ($("'$_'" -join ', ')) あと正規表現のパイプは「または」という意味
131 名前:デフォルトの名無しさん mailto:sage [2022/03/08(火) 16:05:01.58 ID:zfJt6x7/.net] PowerShellのバージョン問題はwslに最新のpowershellを入れるでok?
132 名前:デフォルトの名無しさん mailto:sage [2022/03/09(水) 00:49:55.24 ID:oTLaCJPf.net] >>129 Linux版Powershell7はWindows版Powershell7と比べて機能制限も多い よって全く解決しない
133 名前:デフォルトの名無しさん mailto:sage [2022/03/09(水) 07:01:31.59 ID:RwKAl9+/.net] LinuxでPowershell使う理由なんてあるか? bashの方が明らかに上だろ
134 名前:デフォルトの名無しさん mailto:sage [2022/03/09(水) 09:36:42.19 ID:taLplzJg.net] > bashの方が明らかに上だろ 確かにバカをあぶり出す能力は高いなw
135 名前:デフォルトの名無しさん mailto:sage [2022/03/09(水) 10:12:30.93 ID:EcV8v1IL.net] >>131 Linux版使った事ないから bashとどう比較してるか興味あるよ 優劣を列挙しもらえると助かる
136 名前:デフォルトの名無しさん mailto:sage [2022/03/09(水) 15:06:09.10 ID:Cj1SKgXQ.net] powershellはC#埋め込んでそこで定義したクラスとかがpowershellで使えるとこがいいところだから bashもそうしたらいいとおもう
137 名前:デフォルトの名無しさん mailto:sage [2022/03/09(水) 17:46:07.31 ID:KONqX93R.net] それはPSってよりCOMじゃね
138 名前:デフォルトの名無しさん mailto:sage [2022/03/09(水) 19:10:34.11 ID:g4d6cmq/.net] めっちゃ前からある機能だしCOMなんて1mmも関係ないぞ https://codezine.jp/article/detail/5007
139 名前:デフォルトの名無しさん mailto:sage [2022/03/09(水) 21:24:55.35 ID:oTLaCJPf.net] コマンドレットの出力がオブジェクトで目的のプロパティから値が取り出しやすい Where-object一つ覚えればフィルター出来るからコマンド毎にフィルタの仕様で悩む必要が無い 正規表現がperl拡張表現で標準搭載、コマンドやら環境によって規格が違うとか悩む必要がない シェルスクリプトとしてそれだけでも全然いいわ
140 名前:デフォルトの名無しさん mailto:sage [2022/03/12(土) 11:12:49.22 ID:2x7XRkpq.net] regex沼に入る気はないけど$matches.namedで参照できるだけでもかなり有り難い pwsh固有の事情としては(?-i)を繁用するな sls等コマンドレットに-CaseSensitive渡したり-[ci]matchが入り乱れてたのがスッキリした
141 名前:デフォルトの名無しさん mailto:sage [2022/03/12(土) 11:27:19.44 ID:2x7XRkpq.net] あとStringとString[]どっちも渡ってくるから(?m)/(?-m)もpwsh的には重要か
142 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 01:12:21.45 ID:z4wleAC0.net] >>128 レスの内容を色々と検索しながら勉強させていただきました まだエラーが出て止まっていますが、こちらで少し対応を考えてみたいと思います 本当に丁寧に教えていただきありがとうございます
143 名前:デフォルトの名無しさん mailto:sage [2022/03/16(水) 22:20:26.82 ID:Rh84s05v.net] 二つの引数をとる関数に引数を二つ渡したら、一個目引数が全部持っていくのはなんで? コード function war { param($putin, $zelenskyy) Write-Host 'putin has ' $putin Write-Host 'zelenskyy has ' $zelenskyy } war('Russian','Ukraine') 結果 putin has Russian Ukraine zelenskyy has
144 名前:デフォルトの名無しさん mailto:sage [2022/03/16(水) 22:33:14.06 ID:ET0x7ZFa.net] >>141 配列 @( "aaa" "bbb" ) の別表記がカンマ区切りリスト "aaa","bbb"
145 名前:デフォルトの名無しさん mailto:sage [2022/03/16(水) 22:41:56.39 ID:Rh84s05v.net] 呼び出すときに恰好つけるとダメなのか
146 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 00:07:43.00 ID:0/d09PRO.net] 格好も括弧も関係ない シェルなんだから引数の区切りは空白と言うだけの話
147 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 00:50:39.64 ID:DCNM1l/p.net] war Russian Ukraine にしろっつーことでしょ?
148 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 00:52:00.94 ID:DCNM1l/p.net] 失礼、こうだね war ‘Russian’ ‘Ukraine’
149 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 08:43:01.98 ID:vPjPamJP.net] Set-StrictMode -Version 2.0 おすすめ https://docs.microsoft.com/ja-jp/previous-versions/dd347
150 名前:614(v=technet.10)#%E4%BE%8B-2 [] [ここ壊れてます]
151 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 12:57:17.38 ID:ENyjKfBg.net] 赤文字で出るエラーメッセージをログに出力して、 エラーログが出てるか適当な箇所で判定して、ログをnotepadで開くってことをやりたいです。 標準エラー出力みたいなのの取得方法を教えて下さい
152 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 15:06:14.72 ID:9VjLQzax.net] いくら補完あると言ってもコマンドレットの名前冗長すぎんだよ