[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 09/03 04:39 / Filesize : 313 KB / Number-of Response : 1023
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

PowerShell -Part 6



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が立ててね!!

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]
いくら補完あると言ってもコマンドレットの名前冗長すぎんだよ

153 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 15:18:43.63 ID:zTqRydhk.net]
>>149
良く使うやつはaliasあるやん

154 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 21:22:30.00 ID:KFCC0Q8d.net]
長いから分かりやすくていいんだろ
wとか言われてもユーザーを笑いものにするコマンドか?としか思えんし

155 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 11:18:52.00 ID:7PrXFgOi.net]
構文はtclっぽいねえ

156 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 12:37:58.38 ID:vJYdrJTe.net]
配列の配列について

$array_of_array = @(
@(
'1-1'
'1-2'
'1-3'
),
@(
'2-1'
'2-2'
)
)
$array_of_array | foreach {
Write-Host 'L1' $_
$_ | foreach {
Write-Host ' L2' $_
}
}
結果は期待通り
L1 1-1 1-2 1-3
L2 1-1
L2 1-2
L2 1-3
L1 2-1 2-2
L2 2-1
L2 2-2

157 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 12:39:12.90 ID:vJYdrJTe.net]
だが、カンマを省略すると
$array_of_array = @(
@(
'1-1'
'1-2'
'1-3'
)
@(
'2-1'
'2-2'
)
)
結果は期待と違う。配列の配列じゃなくて、ただの配列になっている?
L1 1-1
L2 1-1
L1 1-2
L2 1-2
L1 1-3
L2 1-3
L1 2-1
L2 2-1
L1 2-2
L2 2-2

158 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 12:40:41.61 ID:vJYdrJTe.net]
改行してカンマをいれると
$array_of_array = @(
@(
'1-1'
'1-2'
'1-3'
)
,
@(
'2-1'
'2-2'
)
)
後半だけ、配列が要素になっている?
L1 1-1
L2 1-1
L1 1-2
L2 1-2
L1 1-3
L2 1-3
L1 2-1 2-2
L2 2-1
L2 2-2
どういうことなのか教えてよ。

159 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 14:10:16.88 ID:advrh/I1.net]
powershellで配列データ構造を扱ってはいけない

160 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 16:28:22.32 ID:vJYdrJTe.net]
https://docs.microsoft.com/ja-jp/powershell/scripting/learn/deep-dives/everything-about-arrays?view=powershell-7.2#nested-arrays
「これらの例では、コンマは非常に重要です。 以前に示した通常の複数行での配列の例では、コンマは省略可能でした。 多次元配列の場合はそうではありません。」
そうではありませんと言われても、エラーになるわけでもなく、どうなるのか誰か教えて



161 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 23:33:26.82 ID:GptrjqcJ.net]
>>153-155
あまり自信はないのですが、
・「単項の ,」と「配列要素区切りの ,」は別物です。
 (「-1」と「1 - 1」の「-」が別物、みたいな違い。)
・式の終端と見なせる箇所にある改行は「;」と概ね等価です。

>>153の「,」は「配列要素区切りの ,」です。
>>155の「,」は「単項の ,」です。

162 名前:デフォルトの名無しさん mailto:sage [2022/03/19(土) 23:33:48.95 ID:GptrjqcJ.net]
ワンライナーにするとこんな違いがあります。
>>153
@( @('1-1'; '1-2'; '1-3';) ,@('2-1'; '2-2';); )
>>154
@( @('1-1'; '1-2'; '1-3';); @('2-1'; '2-2'); )
>>155
@( @('1-1'; '1-2'; '1-3';); ,@('2-1'; '2-2';); )

163 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 00:30:34.10 ID:V8R16naX.net]
追加。
Out-*やWrite-*で出力先が示されていない改行や「;」などは、
暗黙のWrite-Outputが動くと考えるとよいです。

つまり「@(〜);」は「Write-Output @(〜);」となり、この時、配列が1段階分解(要素取出)されます。
ただし「単項 ,」の「,@(〜)」は「Write-Output -NoEnumerate (,@(〜))」となり、分解されません。

イメージ的にはこんな違い。(本当は他にもWrite-Outputが入ります)
>>153
@( (Write-Output @('1-1'; '1-2'; '1-3';), @('2-1'; '2-2';)); )
>>154
@( (Write-Output @('1-1'; '1-2'; '1-3';)); (Write-Output @('2-1'; '2-2';)); )
>>155
@( (Write-Output @('1-1'; '1-2'; '1-3';)); (Write-Output -NoEnumerate (,@('2-1'; '2-2';))); )

164 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 01:20:05.34 ID:EnzWedk+.net]
暗黙のWrite-Output
コマンドレットのような何某かの出力を持つものと、Powershellのスクリプト内で定義された関数や式の評価結果を
うまいこと混ぜることが出来るようにする仕掛けなのでしょうか
完全に理解しては居ませんがが、理解に努めます
文法知識は「Windows PowerShell実践システム管理ガイド 第3版(日経BP)」の第2章を読んだだけなのですが
これだけは全然足りないtのを痛感しました
何かお勧めはありませんか

165 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 01:39:27.35 ID:KeTIMbSf.net]
powershellは行志向寄りの言語だから改行はC/C++でいう暗黙の副作用完了点みたいな意味を持っている
何も考えず複数行にまたがる式を書くと思わぬ事故に繋がるから、C/C++の\やVBの_みたいに行継続を示す`を行末に付けるといいよ

$array_of_array = @( @('1-1', '1-2', '1-3') `
, @('2-1', '2-2'))

166 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 14:33:02.79 ID:V8R16naX.net]
>>161
今回の挙動の予想や理解は、構文のパース(式・文の区切り)、
独特なパイプラインの挙動、分かりづらい「単項 ,」の存在などがあり
わりと難易度の高いものです。

>>156>>162さんに同意で、配列の配列(ジャグ配列)を避け
行の継続を「`」で明示する事をお勧めします。

書籍では『Windows PowerShell イン アクション』がお勧めです。
ただv1の本なので今となっては内容が古く、紙だと新品の入手が難しいです。
※これのv5以上版が日本語で出て欲しい…。
https://www.sbcr.jp/product/4797337362/

あとは>>157のMSのサイト等。
about_*も有用な事が書かれてますが、日本語訳やサンプルコードの質が酷く、
多くの人がよく使う機能と一部の人が稀に使う機能が同じ扱いの記述なのが難点。

167 名前:デフォルトの名無しさん mailto:sage [2022/03/20(日) 22:00:12.10 ID:L+yKE55O.net]
Powershellの洋書翻訳はもっと盛んになってほしい
オライリーのクックブックも原著は改定4版まで出てるのに日本語は初版のままだし

168 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 00:56:42.09 ID:OI2SuuED.net]
今時英語できないの日本人だけだからな
土人とか馬鹿にしてる韓国、中国、インド、ベトナム、フィリピンなんてネイティブレベルで英語できるからな
これで日本のレベルは低くないとかそれ以前の問題だよ

169 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 08:39:53.52 ID:2Zu3Swq+.net]
エリート層は英語できるだろうよ
馬鹿は海外だと底辺でも英語ペラペラだと思ってやがるが

170 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 09:24:20.27 ID:JwhA0ika.net]
日本ですら母国語での情報の鮮度が落ちるんだから
それらの国のプログラミング学習希望者は
必然的に英語の勉強からしないといけないだけの話じゃないかな?

日本のレベルが低いとか
英語できるのはエリート層だけとか
そういう問題じゃないと思いますよ

アニメ理解したいから日本語勉強しましたと
同じレベルの話な気がする



171 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 09:42:44.22 ID:3OVxtXqz.net]
まとめて挙がってるけど国によって差は大きい
インドとフィリピンは英語が公用語で世界でも有数の英語話者が多い国

日本の英語力が低すぎて世界に遅れを取っているというのは同意
学校教育も都度見直されてるしそのうち改善されるんじゃねーの、知らんけど
プログラマーなら英語を読むだけでもできるように少しずつ学ぶ気概は欲しい
ボク英語わからないんですと幼稚な変数名を付け続けるのはよくない

172 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 14:48:55.98 ID:fHQFhWIP.net]
日本は国内に金と仕事があるせいで海外でなくても稼げるからなあ
英語理解できなくても儲かる職業の筆頭が
マスコミと教育と役人政治家の時点で英語教育が変わるわけ無いじゃん

173 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 16:01:23.66 ID:l99FVYBX.net]
ITに限定すると英語は必要なんだけど英語に限らず日本のITエンジニアの多くは勉強しない
能力を伸ばしても給料が上がらず残業が増やされるだけと諦めるのが常態化している

174 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 16:10:09.00 ID:l99FVYBX.net]
国内に金があるというのは微妙な話になってきている
世界ワースト級の低成長による沈下を続けていて、本当に有能なエンジニアは海外に流出して残るのはIT土方ばかり
ノーベル賞受賞者が元日本人ばかりというのと同じような話が起こってる
GAFAのようなIT企業が伸びないから低成長から抜け出さない負のスパイラル

175 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 21:14:58.00 ID:dTmdB0AV.net]
海外ならGAFAみたいな企業がたくさんあるとでも思ってるのかこのゴミは
GAFAは世界中でも1つしか無いんだよ

176 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 21:25:38.84 ID:vIzK+CHc.net]
GAFAはひとつとな?
MARCHはひとつみたいな哲学かな?
のようなという日本語の意味はわかるのかな?

177 名前:デフォルトの名無しさん mailto:sage [2022/03/21(月) 22:11:34.27 ID:y82izW1t.net]
脱線しとるな

178 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 00:10:37.43 ID:KVIRUNm3.net]
これ使って出来ることってフォルダ弄りファイル弄り設定弄りだけ?
他に出来ることないの?

179 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 00:21:42.31 ID:kikOm2qa.net]
あとは何かプログラムを走らせたり、せいぜいOSの機能を実行するくらいかな
リモートで出来たりするけど、しょせんはローカルに出来ることがリモートでも出来るってだけだな
まだ勉強をはじめたばっかりだけど、そのマシンで出来ないことは出来ないんだなって分かった

180 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 00:25:39.51 ID:gjcW4Tfu.net]
>>175
bashなんかのシェルとは違って.NETベースだからC#やVB.NETでできることは一通りできるよbashなんかと違ってね
メンテが楽だからあえてpowershellでGUIを作ったりする場合もある



181 名前:デフォルトの名無しさん mailto:sage [2022/03/22(火) 00:37:38.83 ID:aUdC0GfB.net]
正規表現使えるしWindowsだとわざわざPythonセットアップして使うより楽だし利便性高い気がする

182 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 00:40:52.77 ID:G2Twh9Sv.net]
>>175
PowerShellは基本的にはWindowsサーバーの管理に使うもの
管理系のコマンドレットが非常に充実している

183 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 04:18:15.48 ID:IVt1k3VA.net]
>>177
出来るからって普通はやらんよまともな脳みそしてるならVSCode使う
お前みたいなのが秀丸やEMでコーディングしてるでぇー(ドヤッっイキリ散らかして周りが迷惑する馬鹿そのものだな

184 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 08:31:22.61 ID:eqSZnoCQ.net]
>>180
VSCodeを使うの意味が分からん
VSCodeでPSスクリプト組むならいいの?
なんで処理系の話でエディタの話になるの?

185 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 09:01:03.65 ID:TpwnHNL9.net]
分かってるくせに…
対面だと「何いってんだコイツ…」とか思いながらも愛想笑いしてそうだな

186 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 10:01:20.99 ID:Jvnypl+E.net]
釣りでしょ
面倒見いい人なら、オマエそれブーメランやんけーて言ってあげたら喜ぶよ

187 名前:デフォルトの名無しさん mailto:sage [2022/03/23(水) 10:04:37.18 ID:11NHOGIK.net]
この煽り合いもPowershellスキルの一部なんですか?

188 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 03:56:01.53 ID:cKyI7Sj4.net]
write-sqltabledateで列名は指定できますか?
計算列のあるテーブルでその列を飛ばしたいのですがPsCustumObjectのプロパティ名が無視されて並び順で投入されてしまいます。

189 名前:デフォルトの名無しさん mailto:sage [2022/03/24(木) 21:13:21.68 ID:vudxrsxx.net]
https://i.imgur.com/O3zZKes.jpeg

190 名前:デフォルトの名無しさん mailto:sage [2022/03/25(金) 04:05:40.26 ID:qE/8IX5m.net]
>>186
すいません
Write-SqlTableData
でした…
よろしくお願いします



191 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 14:42:03.29 ID:u+BPDoH4.net]
そういう挙動ということはWrite-SqlTableDataはメタデータを考慮してなさそうだし
Invoke-Sqlcmdでやれば?

192 名前:デフォルトの名無しさん mailto:sage [2022/03/26(土) 14:50:17.14 ID:pYdvgAQA.net]
コマンドレットの命名規則をケバブケースにしたMSの馬鹿を殺してやりたい
補完でタブ押して確定してまたタブ押して確定してってのがめちゃくちゃイライラする






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<313KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef