前スレ
PowerShell -Part 5
https://mevius.5ch.net/test/read.cgi/tech/1615994992/
次スレは>>980が立ててね!!
探検
PowerShell -Part 6
■ このスレッドは過去ログ倉庫に格納されています
2022/02/13(日) 18:36:12.07ID:LaQ04ZoE
2022/02/25(金) 20:57:30.79ID:FVUZxr5Y
dir "*a*" などとして対象のフォルダだけ表示されることを確認して
dir "*a*" |
dir "*a*" |
2022/02/25(金) 20:58:43.73ID:FVUZxr5Y
dir "*a*" | % {remove-item -LiteralPath $_.Name}
でどうだろうか
でどうだろうか
2022/02/25(金) 21:06:53.72ID:zbdaU1gm
55915
2022/02/26(土) 12:47:40.66ID:AL/cEm3C ありがとうございます。
レス遅くなりました。以下のように返ってきました。
>>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
レス遅くなりました。以下のように返ってきました。
>>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
56915
2022/02/26(土) 12:47:51.62ID:AL/cEm3C2022/02/26(土) 13:19:35.91ID:zbGeAZZp
Win10の質問スレ行けって言ったのに何故行かないのかな?
powershellに拘る理由がわからないよ
仕方ないのでこっちで回答するわ
Poweshell関係ないけど
https://itojisan.xyz/パソコンのトラブル/windows10でフォルダ・ファイルを削除できない/
これ全部試せ
powershellに拘る理由がわからないよ
仕方ないのでこっちで回答するわ
Poweshell関係ないけど
https://itojisan.xyz/パソコンのトラブル/windows10でフォルダ・ファイルを削除できない/
これ全部試せ
2022/02/26(土) 13:34:00.21ID:DA2+bsLA
これ本来含まれないはずの+が含まれてるから消さないんでしょ
ディスクエディタかなんかで強制的に消せる名前にリネームするしかないのでは?
(FAT時代にしかやったことないからNTFSでできるかは知らん)
曖昧な記憶のスクリプトを正確に思い出せればなんとかなるやもしれんが
普通の方法では+がファイル名かフォルダ名の一部と解釈されないから消すのは無理だと思う
なかなかコーナーケースのバグ見つけたなw
多分PSでどうこうできる領域じゃない
再インストールが一番早いかもw
ディスクエディタかなんかで強制的に消せる名前にリネームするしかないのでは?
(FAT時代にしかやったことないからNTFSでできるかは知らん)
曖昧な記憶のスクリプトを正確に思い出せればなんとかなるやもしれんが
普通の方法では+がファイル名かフォルダ名の一部と解釈されないから消すのは無理だと思う
なかなかコーナーケースのバグ見つけたなw
多分PSでどうこうできる領域じゃない
再インストールが一番早いかもw
2022/02/26(土) 13:36:55.01ID:+OtunY2h
当てずっぽうで試す前に、まずabout_Quoting_Rulesを読んでくれ
何かおかしい文字が入ってるのかは、[byte[]]にキャストすれば分かるから
それ見て正しくクオートして入力してくれ
何かおかしい文字が入ってるのかは、[byte[]]にキャストすれば分かるから
それ見て正しくクオートして入力してくれ
2022/02/26(土) 14:08:05.70ID:+OtunY2h
>>58
+を特別扱いするのはNTFSじゃなくて、特定のコマンドの仕様では?(copy fi+le等)
色んなコマンドが内部で引いてる可能性があるから避けたほうが無難な文字とは思うけど
$もNTFS的には合法だけど、予約名のプレフィックスにする慣習なので、なので避けたほうがいいのは確か
undocumentedなのもいっぱいある
+を特別扱いするのはNTFSじゃなくて、特定のコマンドの仕様では?(copy fi+le等)
色んなコマンドが内部で引いてる可能性があるから避けたほうが無難な文字とは思うけど
$もNTFS的には合法だけど、予約名のプレフィックスにする慣習なので、なので避けたほうがいいのは確か
undocumentedなのもいっぱいある
2022/02/26(土) 14:54:37.65ID:+OtunY2h
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
うーん?
> ni -d sandbox |sl
> echo valid? >'+ $a'
> gci |select name
Name
----
+ $a
> ri '+ $a' &&echo $?
True
> gci |select name
# no output
うーん?
2022/02/26(土) 15:18:46.03ID:1IWc50so
cmdを起動して
rd "\\.\C:\works\ + $a "
rd "\\.\C:\works\ + $a "
2022/02/26(土) 15:22:25.68ID:1IWc50so
ダメなら引用符ありなしと、//./ と //?/ を変化させて試してみて
2022/02/26(土) 15:46:10.03ID:EUVpr27z
検証した
cmdを起動して rd "\\?\C:\works\ + $a " が正解だった
このやり方はPowershell経由では消えない
末尾スペースが再現できなかったから md "\\?\C:\works\ + $a " で作った
cmdを起動して rd "\\?\C:\works\ + $a " が正解だった
このやり方はPowershell経由では消えない
末尾スペースが再現できなかったから md "\\?\C:\works\ + $a " で作った
66915
2022/02/26(土) 16:04:31.69ID:AL/cEm3C 因みに rd “\\?\〜“ってどんな意味でしょうか?
2022/02/26(土) 16:07:54.37ID:EUVpr27z
2022/02/26(土) 16:49:18.98ID:+OtunY2h
ずこー
ファイル名に末尾スペースはNTFS的に非合法のはずなのに、なんで作れちゃうかな
闇が深い
ファイル名に末尾スペースはNTFS的に非合法のはずなのに、なんで作れちゃうかな
闇が深い
2022/02/26(土) 16:54:25.81ID:+OtunY2h
一応補足しとくとシェルは関係ない、pwshから非合法パス名へアクセスするのにも(ri)Remove-Item "\\?\~"は使える(使えてしまう)
2022/02/26(土) 19:13:10.48ID:kQiC9zng
-LiteralPathが多分必要
2022/02/26(土) 20:14:14.01ID:+OtunY2h
ri -lp '\\?\C:\Users\ore\sandbox\trailing 'で消せた
そもそも-literalpath指定無しには正しくない名前のファイルは作れないようになってる
標準のFileSystemプロバイダは静かに切り詰めるようだけど、できればエラーにしてほしいところ
そもそも-literalpath指定無しには正しくない名前のファイルは作れないようになってる
標準のFileSystemプロバイダは静かに切り詰めるようだけど、できればエラーにしてほしいところ
2022/02/26(土) 20:16:53.67ID:+OtunY2h
当たり前だがext4上では合法だから普通に作れるな
プロバイダ依存きをつける
プロバイダ依存きをつける
2022/02/26(土) 20:28:51.97ID:HRmzshO4
各々のプログラムのモラルに任せられてるのが残念なところ
pwshからコマンドレットを使う限りはうっかり変なもの作るの阻止してくれるのが救いか
linux/mac上ならそもそもOSがハネてくれるのでpwshで余計なチェック挟む必要もないのだけど
pwshからコマンドレットを使う限りはうっかり変なもの作るの阻止してくれるのが救いか
linux/mac上ならそもそもOSがハネてくれるのでpwshで余計なチェック挟む必要もないのだけど
2022/02/26(土) 20:33:36.43ID:7VK+waus
Mac特有の濁点ユニコードもそのまま入るし互換性のためだろう
2022/02/26(土) 20:34:30.39ID:HRmzshO4
2022/02/26(土) 23:23:38.20ID:U2u/902M
いや真似しても普通には再現できなかったよ
\\?\ でなんとか作った
条件もわからんしいたずらに憂いてもしょうがない
\\?\ でなんとか作った
条件もわからんしいたずらに憂いてもしょうがない
2022/02/28(月) 02:46:56.51ID:RHAmUG8r
APIで普通に作れるから対策したつもりてもコマンドを適当に組み合わせたら偶然できるようなレベル
web上に消し方の情報が沢山あるのはそういう理由
web上に消し方の情報が沢山あるのはそういう理由
2022/02/28(月) 10:01:03.24ID:1ziskyp5
2022/02/28(月) 13:10:38.48ID:5+6VAuli
試す気はないけど
>>64で再現できるんでね?
>>64で再現できるんでね?
2022/02/28(月) 14:17:24.11ID:9W2zYqHy
そりゃあえて迂回したらな
Test-Path -IsValidは信頼できるのだろうか?
中身分からものに頼るよりendswith(". ")とかで自分でバリデーションするべきか
Test-Path -IsValidは信頼できるのだろうか?
中身分からものに頼るよりendswith(". ")とかで自分でバリデーションするべきか
2022/02/28(月) 14:24:32.38ID:9W2zYqHy
任意文字列渡されてもそのまま作らせない、あるいは勝手に置換+ユニークIDにリネームが現実的な防御策か
ファイルシステム移行で問題起こす事もあるし、どこでも合法なファイル名に正規化しておいた方が後のため
ファイルシステム移行で問題起こす事もあるし、どこでも合法なファイル名に正規化しておいた方が後のため
2022/02/28(月) 15:01:04.99ID:Xoh24ILj
2022/02/28(月) 15:11:14.28ID:NrGkgOto
bashとか平気で不正ファイルポンポン作るからヤバい
OSが拒否するのを期待してるからそれ自体が悪い訳ではないのだが、安易にwindowsで使うのは本当にヤバい
OSが拒否するのを期待してるからそれ自体が悪い訳ではないのだが、安易にwindowsで使うのは本当にヤバい
2022/02/28(月) 15:27:14.93ID:9W2zYqHy
win版のgitに付いてくるの使ってるけど、unix系ツールはファイルシステムに気を使う移植は見たことがない
仮想ドライブに隔離してしまうのが手っ取り早くて安全そう
仮想ドライブに隔離してしまうのが手っ取り早くて安全そう
2022/02/28(月) 15:40:26.92ID:9W2zYqHy
2022/02/28(月) 15:51:52.53ID:9W2zYqHy
win11ではこっそり治ってたりしねーかなこれ、なければwin12に乞うご期待…
2022/03/01(火) 03:09:34.84ID:L/ghTddK
2022/03/01(火) 03:14:07.19ID:L/ghTddK
2022/03/01(火) 13:31:53.46ID:fDW5QBJr
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オプションでも同じだった
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オプションでも同じだった
2022/03/01(火) 13:42:53.50ID:fDW5QBJr
ファイル名の末尾の英字取って
3---.txt
3-1-.txt
4---.txt
4-1-.txt
としたら
3---.txt
3-1-.txt
4---.txt
4-1-.txt
になったけど意味が判らない
変なバグに遭遇した気分
3---.txt
3-1-.txt
4---.txt
4-1-.txt
としたら
3---.txt
3-1-.txt
4---.txt
4-1-.txt
になったけど意味が判らない
変なバグに遭遇した気分
2022/03/01(火) 16:20:44.39ID:XlErARwx
最近のWindowsは9.txtの後ろに10.txtが並ぶように数の大小を考慮したソートを標準で行うからそのアルゴリズムが生む微妙な綾じゃね
レジストリによって挙動が変わるはず
文字コード順を順守させたいならファイル名標準のソートにならないように、ハッシュテーブルの引数なんかを使って単なる文字列としてソートしてあげればいいんじゃないかな
レジストリによって挙動が変わるはず
文字コード順を順守させたいならファイル名標準のソートにならないように、ハッシュテーブルの引数なんかを使って単なる文字列としてソートしてあげればいいんじゃないかな
2022/03/01(火) 22:49:13.37ID:qg4SVCg0
テストしてないし遅い気がするけど
下準備なしがよければ
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)})
下準備なしがよければ
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)})
2022/03/02(水) 17:07:09.87ID:HFEr6ITo
2022/03/02(水) 17:54:20.18ID:qWIZmWPY
2022/03/02(水) 21:57:02.42ID:Gj5Erajd
PowerShellでSQliteのデータベースに追記操作しようと思っていますが
テーブル名を変数にし、カラムと追記したい内容を配列で操作しようとすると上手くいきません。
一括で出来ないなら配列内ループでと思いやってみましたが、そちらもうまくいきませんでした。
配列でINSERTするには、以下のサンプルだとどういった記述をすればよいのでしょうか?
テーブル名を変数にし、カラムと追記したい内容を配列で操作しようとすると上手くいきません。
一括で出来ないなら配列内ループでと思いやってみましたが、そちらもうまくいきませんでした。
配列でINSERTするには、以下のサンプルだとどういった記述をすればよいのでしょうか?
2022/03/02(水) 21:57:57.51ID:Gj5Erajd
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
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
2022/03/02(水) 21:59:03.05ID:Gj5Erajd
$Table = "List"
$ArrCol = @("No","Name","Gender")
$ArrRecord = @("1","山田","男")
$ArrCol = @("No","Name","Gender")
$ArrRecord = @("1","山田","男")
2022/03/02(水) 21:59:46.03ID:Gj5Erajd
# レコードの追加
$cmd.CommandText = @"
INSERT INTO $Table ($ArrCol) values ($ArrRecord)
"@
$cmd.CommandText = @"
INSERT INTO $Table ($ArrCol) values ($ArrRecord)
"@
2022/03/03(木) 00:11:25.85ID:Ai6V8ofW
どこでどんなエラーが出てるのか分からないし試してないけど
文字列の中で配列変数をそのまま展開してるのが原因なんじゃないかな。
$cmd.CommandText = @"
INSERT INTO $Table ($($ArrCol -join ', ')) values ($($ArrRecord -replace '^|$', "'" -join ', '))
"@
※余計なお世話だろうけどインジェクション対策がないので必要なら入れてね。
(SQLiteがサポートしてるか知らないけど通常はSQLパラメータを使用。)
文字列の中で配列変数をそのまま展開してるのが原因なんじゃないかな。
$cmd.CommandText = @"
INSERT INTO $Table ($($ArrCol -join ', ')) values ($($ArrRecord -replace '^|$', "'" -join ', '))
"@
※余計なお世話だろうけどインジェクション対策がないので必要なら入れてね。
(SQLiteがサポートしてるか知らないけど通常はSQLパラメータを使用。)
100デフォルトの名無しさん
2022/03/03(木) 07:55:37.70ID:vKIVQ1+Z101デフォルトの名無しさん
2022/03/03(木) 22:26:57.79ID:vKIVQ1+Z すみません、色々試したのですがわからずまた質問させてください
$Table = "2022"
$ArrCol = @("No","Day","Name")
$ArrRecord = @("1","2022/03/03","山田")
だとして
$Table = "2022"
$ArrCol = @("No","Day","Name")
$ArrRecord = @("1","2022/03/03","山田")
だとして
102デフォルトの名無しさん
2022/03/03(木) 22:35:42.15ID:vKIVQ1+Z cmd.CommandText = @"
INSERT INTO "2020" ("No","Day","Name") values ("1","2022/03/03","山田")
"@
だとエラーなくデータベースに追記出来るのですが
INSERT INTO "2020" ("No","Day","Name") values ("1","2022/03/03","山田")
"@
だとエラーなくデータベースに追記出来るのですが
103デフォルトの名無しさん
2022/03/03(木) 22:37:17.23ID:vKIVQ1+Z $cmd.CommandText = @"
INSERT INTO [string]$Table ("No","Day","Name") values ("1","2022/03/03","山田")
"@
だと"0"個の引数を指定して"ExecuteNonQuery"を呼び出し中に例外が発生しました"SQLite error near "2022":syntax error"
INSERT INTO [string]$Table ("No","Day","Name") values ("1","2022/03/03","山田")
"@
だと"0"個の引数を指定して"ExecuteNonQuery"を呼び出し中に例外が発生しました"SQLite error near "2022":syntax error"
104デフォルトの名無しさん
2022/03/03(木) 22:37:58.49ID:vKIVQ1+Z あと
$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"
とエラーが出てデータベースを変更できませんでした
色々試したのですが理由がわからず申し訳ございませんが教えたもらいたく
$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"
とエラーが出てデータベースを変更できませんでした
色々試したのですが理由がわからず申し訳ございませんが教えたもらいたく
105デフォルトの名無しさん
2022/03/03(木) 22:42:34.74ID:vKIVQ1+Z すみません
5chだとSQL関係で書き込めなかったのですが
$cmd.え(E)xecuteNonQuery() | Out-Null
も各場所で記入しています
5chだとSQL関係で書き込めなかったのですが
$cmd.え(E)xecuteNonQuery() | Out-Null
も各場所で記入しています
106デフォルトの名無しさん
2022/03/04(金) 01:01:51.54ID:rY0dcLRW 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, 山田)
いろいろミスに気づくはず
軽く見た感じ次のように展開されてる気がする
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, 山田)
107デフォルトの名無しさん
2022/03/05(土) 08:12:15.74ID:UxduI4YM 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.
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.
10892
2022/03/05(土) 11:18:59.79ID:2eHlJFPP >>92
1つ目の例のUnicodeはUTF-16LEの事だからだめだったね。
BigEndianUnicode(UTF-16BE)にする必要があったし、
そもそもbyte型にしてエンディアン気にする必要もないから、
gci | sort {[int[]][char[]]$_.Name | %{'{0,5}' -f $_}}
でよいはず。
※全く関係ない別の作業中になんか急に気づいた。
1つ目の例のUnicodeはUTF-16LEの事だからだめだったね。
BigEndianUnicode(UTF-16BE)にする必要があったし、
そもそもbyte型にしてエンディアン気にする必要もないから、
gci | sort {[int[]][char[]]$_.Name | %{'{0,5}' -f $_}}
でよいはず。
※全く関係ない別の作業中になんか急に気づいた。
10999
2022/03/05(土) 11:34:56.78ID:2eHlJFPP SQLiteがカラム名等を「"」で括る事を要求しているなら
$cmd.CommandText = @"
INSERT INTO "$Table" ($($ArrCol -replace '^|$', '"' -join ', ')) values ($($ArrRecord -replace '^|$', '"' -join ', '))
"@
かな。>>106さんの言う通りなので確認してみて。
これもだめなら、成功例と、失敗例や変数値のテーブル名が違うからそこかも。
$cmd.CommandText = @"
INSERT INTO "$Table" ($($ArrCol -replace '^|$', '"' -join ', ')) values ($($ArrRecord -replace '^|$', '"' -join ', '))
"@
かな。>>106さんの言う通りなので確認してみて。
これもだめなら、成功例と、失敗例や変数値のテーブル名が違うからそこかも。
110デフォルトの名無しさん
2022/03/05(土) 17:03:38.16ID:aFkos6IC >>107
もう開発やめりゃいいのにな
これまでWindowsに入ってるから採用されてきただけで、わざわざ入れて使うならPowerShellなんか選ばれるわけがない
コマンドレットで簡単に導入できるようにするならPowerShellじゃなくてPythonにでもしたほうがいいんじゃないか
もう開発やめりゃいいのにな
これまでWindowsに入ってるから採用されてきただけで、わざわざ入れて使うならPowerShellなんか選ばれるわけがない
コマンドレットで簡単に導入できるようにするならPowerShellじゃなくてPythonにでもしたほうがいいんじゃないか
111デフォルトの名無しさん
2022/03/05(土) 22:04:13.92ID:BfpuuE1g インストールしてなくてもpythonコマンドでMSストア版pythonのダウンロードページに飛ばされるから、既にpwsh7よりも導入が楽という悲しみ
112デフォルトの名無しさん
2022/03/05(土) 22:12:35.50ID:vfk/Azs+ PowerShellってそんな残念なプログラム言語なんですか?
がんばって勉強したのに納得できません
がんばって勉強したのに納得できません
113デフォルトの名無しさん
2022/03/05(土) 22:41:29.84ID:ws14fGQi PowerShell5系は向こう10年は大丈夫
6以降はAzure以外では全く使われておらず、Azureに生涯を捧げるのでない限りは完全無視でOK
6以降はAzure以外では全く使われておらず、Azureに生涯を捧げるのでない限りは完全無視でOK
114デフォルトの名無しさん
2022/03/06(日) 11:25:06.52ID:2dMAfvhM メインは蛇使いだけど
色々インポートしなくてもそこそこ戦えるのでregex、小規模データ処理、重くない数値計算がシェルから直接引けるpwshは有り難い
ネイティブライブラリ揃ってないからパワーが居るのはPython、まあPython自体はpwshとドングリ背比べ(処理速度、標準ライブラリもほぼ等価)だけど、やはりライブラリが強い
色々インポートしなくてもそこそこ戦えるのでregex、小規模データ処理、重くない数値計算がシェルから直接引けるpwshは有り難い
ネイティブライブラリ揃ってないからパワーが居るのはPython、まあPython自体はpwshとドングリ背比べ(処理速度、標準ライブラリもほぼ等価)だけど、やはりライブラリが強い
115デフォルトの名無しさん
2022/03/06(日) 11:37:06.16ID:Ou5vEvLf 蛇使いwww
蠍と射手の間かよwww
蠍と射手の間かよwww
116デフォルトの名無しさん
2022/03/06(日) 14:35:41.73ID:2wKnUbYj Pythonは.NETを使えないから糞
117デフォルトの名無しさん
2022/03/06(日) 15:35:16.76ID:+PaQnGDE PowershellとPythonだと得意分野が違うよね
118デフォルトの名無しさん
2022/03/06(日) 16:40:58.28ID:N33QeZ0g ちょっと詳しい人に聞きたいんだけど開発環境で使用しているSDKのコマンドがcmdだと実行可能だけどPowershellだと一切認識されませんてエラーがでるんだけどこの理由はなぜ?
WIndows 11だとターミナルのデフォがPowershellなのにもやもやする、この解決方法はある?
もう一つ、ファイル名を指定して実行で起動したcmdからはSDKのコマンドが実行できるのに、Terminal(wt.exe)の既定のcmdからコマンドを実行すると認識されていませんエラーが出るんだけどこの原因もなぜ?解決方法はある?
cmdとpowershellとterminalと複数のshellを用意してMSは何がしたいのかマジで意味がわからない
WSLとか作っててOSSに寛容になったんだからさっさとデフォのShellをbashかzshにしてくれれば開発環境としてより便利なのに・・・
WIndows 11だとターミナルのデフォがPowershellなのにもやもやする、この解決方法はある?
もう一つ、ファイル名を指定して実行で起動したcmdからはSDKのコマンドが実行できるのに、Terminal(wt.exe)の既定のcmdからコマンドを実行すると認識されていませんエラーが出るんだけどこの原因もなぜ?解決方法はある?
cmdとpowershellとterminalと複数のshellを用意してMSは何がしたいのかマジで意味がわからない
WSLとか作っててOSSに寛容になったんだからさっさとデフォのShellをbashかzshにしてくれれば開発環境としてより便利なのに・・・
119デフォルトの名無しさん
2022/03/06(日) 16:49:05.43ID:4qF5AnI1 しかもそのデフォルトで開くPowerShell、既に非推奨のバージョンなんだぜ
もう完全に破綻してるからWSLだけ使えばいいのよ
もう完全に破綻してるからWSLだけ使えばいいのよ
120デフォルトの名無しさん
2022/03/06(日) 17:14:53.35ID:Y34SWeR7121デフォルトの名無しさん
2022/03/06(日) 19:53:05.95ID:+PaQnGDE bashとかは言語的にはPowershellに比べて時代遅れ過ぎるわ
さっさとPowershell7に統一したほうが遥かにマシ
さっさとPowershell7に統一したほうが遥かにマシ
122デフォルトの名無しさん
2022/03/06(日) 20:11:36.59ID:GpPJTCKS 10や11に標準で入ってる5.1で動くようにしてる人が大半じゃないの
機能的にも特にこれ以上期待するものはないんだけど
機能的にも特にこれ以上期待するものはないんだけど
123デフォルトの名無しさん
2022/03/06(日) 20:14:22.19ID:N33QeZ0g >>119
いやマジでそれでしたwww
PS7をインストールしてPS7で実行したらCLI認識しましたイミフwww
そしてPS7をインストールしてもアップデートされずWin11デフォのPS5がそのままアンインストールもできず鎮座してるくそすぎて草
いやマジでそれでしたwww
PS7をインストールしてPS7で実行したらCLI認識しましたイミフwww
そしてPS7をインストールしてもアップデートされずWin11デフォのPS5がそのままアンインストールもできず鎮座してるくそすぎて草
124デフォルトの名無しさん
2022/03/07(月) 00:21:21.62ID:M26ldpDZ125デフォルトの名無しさん
2022/03/07(月) 17:43:24.45ID:GqmKE44y 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')"
引数で文字列配列を指定する簡単な方法はありますか?
.ps1側に変更を加えるのは無しで、Param()は以下の指定だとします。
Param( [string[]] $p1, [string[]] $p2 )
普段はPowerShellコンソールや他のスクリプトからこの.ps1を使っています。
これを.batに組み込みたい事があったものの配列の指定方法が分からず、
以下のように-Commandにして回避しました。
-Fileの場合でも指定方法があったのかな、と気になっています。
powershell.exe -c "〜.ps1 -p1 @('aaa', 'bbb') -p2 @('ccc', 'ddd')"
12696
2022/03/08(火) 02:39:16.58ID:BWZbDM8v $Table = "2022"
$ArrCol = @("No","Day","Name")
$ArrRecord = @("1","","")
このようにブランクの配列があると
'1', ', ','
上のように途中の「""」が「'」シングルクォーテーション1つになりエラーが起こっているということがわかりました。
ですので
$ArrRecord | foreach-object -Process {$_ -replace '"',"'"}
として配列内で変換しようと思ったのですが、$_の時点でダブルクォーテーションが取れており上手く変換できない状態です
($($ArrRecord -replace '^|$', '"' -join ', '))の「'^|$'」は正規表現で前と後ろを「"」で変換するということですよね
途中のパイプの意味がわかっていないです
$ArrCol = @("No","Day","Name")
$ArrRecord = @("1","","")
このようにブランクの配列があると
'1', ', ','
上のように途中の「""」が「'」シングルクォーテーション1つになりエラーが起こっているということがわかりました。
ですので
$ArrRecord | foreach-object -Process {$_ -replace '"',"'"}
として配列内で変換しようと思ったのですが、$_の時点でダブルクォーテーションが取れており上手く変換できない状態です
($($ArrRecord -replace '^|$', '"' -join ', '))の「'^|$'」は正規表現で前と後ろを「"」で変換するということですよね
途中のパイプの意味がわかっていないです
127デフォルトの名無しさん
2022/03/08(火) 10:15:51.20ID:HM66xeZm >>126
苦戦してるね
まずプログラミング一般の基礎として、ソースコード上に文字列型の変数値を直接書きたいということを伝えるための(文字列リテラルの)引用符と、文字列の中に引用符という文字データを含めたいと伝えるための引用符は別なので理解・区別しておかないとずっと混乱する
$_の時点で引用符が取れたという感覚は間違いで、今回文字列の中身には引用符文字は含まれていなくて、文字列リテラルですと伝える引用符になってる
次に、^|$ で置換する発想は、文字列の特定の位置が先頭または末尾なら置換というところまでは狙いどおり
でも空の文字列だった場合、正規表現処理が文字列を左から走査したとき「先頭かつ末尾」という単一の位置しかないので、置換も一回しか行われず引用符一つだけになるというバグになってる
例えばこうすれば文字列リテラルのなかに引用符文字を入れられる
($("""$ArrRecord""" -join ', '))
($("`"$ArrRecord`"" -join ', '))
($("'$ArrRecord'" -join ', '))
いずれも外側の二重引用符がリテラルの引用符で、内側の引用符が文字データの引用符
苦戦してるね
まずプログラミング一般の基礎として、ソースコード上に文字列型の変数値を直接書きたいということを伝えるための(文字列リテラルの)引用符と、文字列の中に引用符という文字データを含めたいと伝えるための引用符は別なので理解・区別しておかないとずっと混乱する
$_の時点で引用符が取れたという感覚は間違いで、今回文字列の中身には引用符文字は含まれていなくて、文字列リテラルですと伝える引用符になってる
次に、^|$ で置換する発想は、文字列の特定の位置が先頭または末尾なら置換というところまでは狙いどおり
でも空の文字列だった場合、正規表現処理が文字列を左から走査したとき「先頭かつ末尾」という単一の位置しかないので、置換も一回しか行われず引用符一つだけになるというバグになってる
例えばこうすれば文字列リテラルのなかに引用符文字を入れられる
($("""$ArrRecord""" -join ', '))
($("`"$ArrRecord`"" -join ', '))
($("'$ArrRecord'" -join ', '))
いずれも外側の二重引用符がリテラルの引用符で、内側の引用符が文字データの引用符
128デフォルトの名無しさん
2022/03/08(火) 10:21:04.34ID:HM66xeZm >>127
配列じゃなくて各要素の文字列を囲まないとダメたった
($("""$_""" -join ', '))
($("`"$_`"" -join ', '))
($("'$_'" -join ', '))
あと正規表現のパイプは「または」という意味
配列じゃなくて各要素の文字列を囲まないとダメたった
($("""$_""" -join ', '))
($("`"$_`"" -join ', '))
($("'$_'" -join ', '))
あと正規表現のパイプは「または」という意味
129デフォルトの名無しさん
2022/03/08(火) 16:05:01.58ID:zfJt6x7/ PowerShellのバージョン問題はwslに最新のpowershellを入れるでok?
130デフォルトの名無しさん
2022/03/09(水) 00:49:55.24ID:oTLaCJPf131デフォルトの名無しさん
2022/03/09(水) 07:01:31.59ID:RwKAl9+/ LinuxでPowershell使う理由なんてあるか?
bashの方が明らかに上だろ
bashの方が明らかに上だろ
132デフォルトの名無しさん
2022/03/09(水) 09:36:42.19ID:taLplzJg > bashの方が明らかに上だろ
確かにバカをあぶり出す能力は高いなw
確かにバカをあぶり出す能力は高いなw
133デフォルトの名無しさん
2022/03/09(水) 10:12:30.93ID:EcV8v1IL134デフォルトの名無しさん
2022/03/09(水) 15:06:09.10ID:Cj1SKgXQ powershellはC#埋め込んでそこで定義したクラスとかがpowershellで使えるとこがいいところだから
bashもそうしたらいいとおもう
bashもそうしたらいいとおもう
135デフォルトの名無しさん
2022/03/09(水) 17:46:07.31ID:KONqX93R それはPSってよりCOMじゃね
136デフォルトの名無しさん
2022/03/09(水) 19:10:34.11ID:g4d6cmq/ めっちゃ前からある機能だしCOMなんて1mmも関係ないぞ
https://codezine.jp/article/detail/5007
https://codezine.jp/article/detail/5007
137デフォルトの名無しさん
2022/03/09(水) 21:24:55.35ID:oTLaCJPf コマンドレットの出力がオブジェクトで目的のプロパティから値が取り出しやすい
Where-object一つ覚えればフィルター出来るからコマンド毎にフィルタの仕様で悩む必要が無い
正規表現がperl拡張表現で標準搭載、コマンドやら環境によって規格が違うとか悩む必要がない
シェルスクリプトとしてそれだけでも全然いいわ
Where-object一つ覚えればフィルター出来るからコマンド毎にフィルタの仕様で悩む必要が無い
正規表現がperl拡張表現で標準搭載、コマンドやら環境によって規格が違うとか悩む必要がない
シェルスクリプトとしてそれだけでも全然いいわ
138デフォルトの名無しさん
2022/03/12(土) 11:12:49.22ID:2x7XRkpq regex沼に入る気はないけど$matches.namedで参照できるだけでもかなり有り難い
pwsh固有の事情としては(?-i)を繁用するな
sls等コマンドレットに-CaseSensitive渡したり-[ci]matchが入り乱れてたのがスッキリした
pwsh固有の事情としては(?-i)を繁用するな
sls等コマンドレットに-CaseSensitive渡したり-[ci]matchが入り乱れてたのがスッキリした
139デフォルトの名無しさん
2022/03/12(土) 11:27:19.44ID:2x7XRkpq あとStringとString[]どっちも渡ってくるから(?m)/(?-m)もpwsh的には重要か
140デフォルトの名無しさん
2022/03/15(火) 01:12:21.45ID:z4wleAC0141デフォルトの名無しさん
2022/03/16(水) 22:20:26.82ID:Rh84s05v 二つの引数をとる関数に引数を二つ渡したら、一個目引数が全部持っていくのはなんで?
コード
function war {
param($putin, $zelenskyy)
Write-Host 'putin has ' $putin
Write-Host 'zelenskyy has ' $zelenskyy
}
war('Russian','Ukraine')
結果
putin has Russian Ukraine
zelenskyy has
コード
function war {
param($putin, $zelenskyy)
Write-Host 'putin has ' $putin
Write-Host 'zelenskyy has ' $zelenskyy
}
war('Russian','Ukraine')
結果
putin has Russian Ukraine
zelenskyy has
142デフォルトの名無しさん
2022/03/16(水) 22:33:14.06ID:ET0x7ZFa143デフォルトの名無しさん
2022/03/16(水) 22:41:56.39ID:Rh84s05v 呼び出すときに恰好つけるとダメなのか
144デフォルトの名無しさん
2022/03/17(木) 00:07:43.00ID:0/d09PRO 格好も括弧も関係ない
シェルなんだから引数の区切りは空白と言うだけの話
シェルなんだから引数の区切りは空白と言うだけの話
145デフォルトの名無しさん
2022/03/17(木) 00:50:39.64ID:DCNM1l/p war Russian Ukraine
にしろっつーことでしょ?
にしろっつーことでしょ?
146デフォルトの名無しさん
2022/03/17(木) 00:52:00.94ID:DCNM1l/p 失礼、こうだね
war ‘Russian’ ‘Ukraine’
war ‘Russian’ ‘Ukraine’
147デフォルトの名無しさん
2022/03/17(木) 08:43:01.98ID:vPjPamJP Set-StrictMode -Version 2.0 おすすめ
https://docs.microsoft.com/ja-jp/previous-versions/dd347614(v=technet.10)#%E4%BE%8B-2
https://docs.microsoft.com/ja-jp/previous-versions/dd347614(v=technet.10)#%E4%BE%8B-2
148デフォルトの名無しさん
2022/03/17(木) 12:57:17.38ID:ENyjKfBg 赤文字で出るエラーメッセージをログに出力して、
エラーログが出てるか適当な箇所で判定して、ログをnotepadで開くってことをやりたいです。
標準エラー出力みたいなのの取得方法を教えて下さい
エラーログが出てるか適当な箇所で判定して、ログをnotepadで開くってことをやりたいです。
標準エラー出力みたいなのの取得方法を教えて下さい
149デフォルトの名無しさん
2022/03/17(木) 15:06:14.72ID:9VjLQzax いくら補完あると言ってもコマンドレットの名前冗長すぎんだよ
150デフォルトの名無しさん
2022/03/17(木) 15:18:43.63ID:zTqRydhk >>149
良く使うやつはaliasあるやん
良く使うやつはaliasあるやん
151デフォルトの名無しさん
2022/03/17(木) 21:22:30.00ID:KFCC0Q8d 長いから分かりやすくていいんだろ
wとか言われてもユーザーを笑いものにするコマンドか?としか思えんし
wとか言われてもユーザーを笑いものにするコマンドか?としか思えんし
152デフォルトの名無しさん
2022/03/19(土) 11:18:52.00ID:7PrXFgOi 構文はtclっぽいねえ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 国内ホテル、既にキャンセルも 訪日客関連業界、事態見守る ★3 [蚤の市★]
- 習政権、高市首相への態度硬化 台湾有事発言で連日非難 中国 ★11 [ぐれ★]
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- 【野球】井端監督 大谷翔平、山本由伸らのWBCへの参加 「1日も早く返事ほしい」「待っててといっても、国内組が遅くなってしまう」★3 [冬月記者★]
- 【青森・はぐれ子グマがラーメン店襲撃】「笑えないです」ボコボコにしてクマを返り討ち レジェンド男性はまぶたが腫れあがり骨折 ★2 [ぐれ★]
- 中国「高市許さん😡」ジャップメディア「熊!🐻!」 [809488867]
- 中国「高市が頭を下げて謝罪しない限り、絶対に許さない」 [329329848]
- 🏡
- 今季最強寒気襲来!!!!
- 【高市早苗】習近平激怒か [115996789]
- 今猛烈に食べたいもの挙げてけwwwwwwww
