PowerShell -Part 6

■ このスレッドは過去ログ倉庫に格納されています
2022/02/13(日) 18:36:12.07ID:LaQ04ZoE
前スレ
PowerShell -Part 5
https://mevius.5ch.net/test/read.cgi/tech/1615994992/

次スレは>>980が立ててね!!
2022/03/06(日) 16:49:05.43ID:4qF5AnI1
しかもそのデフォルトで開くPowerShell、既に非推奨のバージョンなんだぜ
もう完全に破綻してるからWSLだけ使えばいいのよ
2022/03/06(日) 17:14:53.35ID:Y34SWeR7
>>118
情報少なくてわかんないけど、カレントフォルダに対して「.\ファイル名」の記法で書いてないとかはない?
ファイル名に特殊記号を含むとか
2022/03/06(日) 19:53:05.95ID:+PaQnGDE
bashとかは言語的にはPowershellに比べて時代遅れ過ぎるわ

さっさとPowershell7に統一したほうが遥かにマシ
2022/03/06(日) 20:11:36.59ID:GpPJTCKS
10や11に標準で入ってる5.1で動くようにしてる人が大半じゃないの
機能的にも特にこれ以上期待するものはないんだけど
2022/03/06(日) 20:14:22.19ID:N33QeZ0g
>>119
いやマジでそれでしたwww
PS7をインストールしてPS7で実行したらCLI認識しましたイミフwww
そしてPS7をインストールしてもアップデートされずWin11デフォのPS5がそのままアンインストールもできず鎮座してるくそすぎて草
2022/03/07(月) 00:21:21.62ID:M26ldpDZ
>>106
デバックで出力したとき文字列だから勝手に"が消されているものかと先入観を持ってしまっており疑問にすら思いませんでした
丁寧に説明していただきありがとうございます。

>>109
ありがとうございます。明日確認してみます。
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')"
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 ', '))の「'^|$'」は正規表現で前と後ろを「"」で変換するということですよね
途中のパイプの意味がわかっていないです
2022/03/08(火) 10:15:51.20ID:HM66xeZm
>>126
苦戦してるね
まずプログラミング一般の基礎として、ソースコード上に文字列型の変数値を直接書きたいということを伝えるための(文字列リテラルの)引用符と、文字列の中に引用符という文字データを含めたいと伝えるための引用符は別なので理解・区別しておかないとずっと混乱する
$_の時点で引用符が取れたという感覚は間違いで、今回文字列の中身には引用符文字は含まれていなくて、文字列リテラルですと伝える引用符になってる
次に、^|$ で置換する発想は、文字列の特定の位置が先頭または末尾なら置換というところまでは狙いどおり
でも空の文字列だった場合、正規表現処理が文字列を左から走査したとき「先頭かつ末尾」という単一の位置しかないので、置換も一回しか行われず引用符一つだけになるというバグになってる
例えばこうすれば文字列リテラルのなかに引用符文字を入れられる
($("""$ArrRecord""" -join ', '))
($("`"$ArrRecord`"" -join ', '))
($("'$ArrRecord'" -join ', '))
いずれも外側の二重引用符がリテラルの引用符で、内側の引用符が文字データの引用符
2022/03/08(火) 10:21:04.34ID:HM66xeZm
>>127
配列じゃなくて各要素の文字列を囲まないとダメたった
($("""$_""" -join ', '))
($("`"$_`"" -join ', '))
($("'$_'" -join ', '))
あと正規表現のパイプは「または」という意味
2022/03/08(火) 16:05:01.58ID:zfJt6x7/
PowerShellのバージョン問題はwslに最新のpowershellを入れるでok?
2022/03/09(水) 00:49:55.24ID:oTLaCJPf
>>129
Linux版Powershell7はWindows版Powershell7と比べて機能制限も多い
よって全く解決しない
2022/03/09(水) 07:01:31.59ID:RwKAl9+/
LinuxでPowershell使う理由なんてあるか?
bashの方が明らかに上だろ
2022/03/09(水) 09:36:42.19ID:taLplzJg
> bashの方が明らかに上だろ
確かにバカをあぶり出す能力は高いなw
2022/03/09(水) 10:12:30.93ID:EcV8v1IL
>>131
Linux版使った事ないから
bashとどう比較してるか興味あるよ
優劣を列挙しもらえると助かる
2022/03/09(水) 15:06:09.10ID:Cj1SKgXQ
powershellはC#埋め込んでそこで定義したクラスとかがpowershellで使えるとこがいいところだから
bashもそうしたらいいとおもう
2022/03/09(水) 17:46:07.31ID:KONqX93R
それはPSってよりCOMじゃね
2022/03/09(水) 19:10:34.11ID:g4d6cmq/
めっちゃ前からある機能だしCOMなんて1mmも関係ないぞ
https://codezine.jp/article/detail/5007
2022/03/09(水) 21:24:55.35ID:oTLaCJPf
コマンドレットの出力がオブジェクトで目的のプロパティから値が取り出しやすい
Where-object一つ覚えればフィルター出来るからコマンド毎にフィルタの仕様で悩む必要が無い
正規表現がperl拡張表現で標準搭載、コマンドやら環境によって規格が違うとか悩む必要がない

シェルスクリプトとしてそれだけでも全然いいわ
2022/03/12(土) 11:12:49.22ID:2x7XRkpq
regex沼に入る気はないけど$matches.namedで参照できるだけでもかなり有り難い

pwsh固有の事情としては(?-i)を繁用するな
sls等コマンドレットに-CaseSensitive渡したり-[ci]matchが入り乱れてたのがスッキリした
2022/03/12(土) 11:27:19.44ID:2x7XRkpq
あとStringとString[]どっちも渡ってくるから(?m)/(?-m)もpwsh的には重要か
2022/03/15(火) 01:12:21.45ID:z4wleAC0
>>128
レスの内容を色々と検索しながら勉強させていただきました
まだエラーが出て止まっていますが、こちらで少し対応を考えてみたいと思います
本当に丁寧に教えていただきありがとうございます
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
2022/03/16(水) 22:33:14.06ID:ET0x7ZFa
>>141
配列
@(
"aaa"
"bbb"
)
の別表記がカンマ区切りリスト
"aaa","bbb"
2022/03/16(水) 22:41:56.39ID:Rh84s05v
呼び出すときに恰好つけるとダメなのか
2022/03/17(木) 00:07:43.00ID:0/d09PRO
格好も括弧も関係ない
シェルなんだから引数の区切りは空白と言うだけの話
2022/03/17(木) 00:50:39.64ID:DCNM1l/p
war Russian Ukraine

にしろっつーことでしょ?
2022/03/17(木) 00:52:00.94ID:DCNM1l/p
失礼、こうだね

war ‘Russian’ ‘Ukraine’
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
2022/03/17(木) 12:57:17.38ID:ENyjKfBg
赤文字で出るエラーメッセージをログに出力して、
エラーログが出てるか適当な箇所で判定して、ログをnotepadで開くってことをやりたいです。
標準エラー出力みたいなのの取得方法を教えて下さい
2022/03/17(木) 15:06:14.72ID:9VjLQzax
いくら補完あると言ってもコマンドレットの名前冗長すぎんだよ
2022/03/17(木) 15:18:43.63ID:zTqRydhk
>>149
良く使うやつはaliasあるやん
2022/03/17(木) 21:22:30.00ID:KFCC0Q8d
長いから分かりやすくていいんだろ
wとか言われてもユーザーを笑いものにするコマンドか?としか思えんし
2022/03/19(土) 11:18:52.00ID:7PrXFgOi
構文はtclっぽいねえ
2022/03/19(土) 12:37:58.38ID:vJYdrJTe
配列の配列について

$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
2022/03/19(土) 12:39:12.90ID:vJYdrJTe
だが、カンマを省略すると
$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
2022/03/19(土) 12:40:41.61ID:vJYdrJTe
改行してカンマをいれると
$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
どういうことなのか教えてよ。
2022/03/19(土) 14:10:16.88ID:advrh/I1
powershellで配列データ構造を扱ってはいけない
2022/03/19(土) 16:28:22.32ID:vJYdrJTe
https://docs.microsoft.com/ja-jp/powershell/scripting/learn/deep-dives/everything-about-arrays?view=powershell-7.2#nested-arrays
「これらの例では、コンマは非常に重要です。 以前に示した通常の複数行での配列の例では、コンマは省略可能でした。 多次元配列の場合はそうではありません。」
そうではありませんと言われても、エラーになるわけでもなく、どうなるのか誰か教えて
2022/03/19(土) 23:33:26.82ID:GptrjqcJ
>>153-155
あまり自信はないのですが、
・「単項の ,」と「配列要素区切りの ,」は別物です。
 (「-1」と「1 - 1」の「-」が別物、みたいな違い。)
・式の終端と見なせる箇所にある改行は「;」と概ね等価です。

>>153の「,」は「配列要素区切りの ,」です。
>>155の「,」は「単項の ,」です。
2022/03/19(土) 23:33:48.95ID:GptrjqcJ
ワンライナーにするとこんな違いがあります。
>>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';); )
2022/03/20(日) 00:30:34.10ID:V8R16naX
追加。
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';))); )
2022/03/20(日) 01:20:05.34ID:EnzWedk+
暗黙のWrite-Output
コマンドレットのような何某かの出力を持つものと、Powershellのスクリプト内で定義された関数や式の評価結果を
うまいこと混ぜることが出来るようにする仕掛けなのでしょうか
完全に理解しては居ませんがが、理解に努めます
文法知識は「Windows PowerShell実践システム管理ガイド 第3版(日経BP)」の第2章を読んだだけなのですが
これだけは全然足りないtのを痛感しました
何かお勧めはありませんか
2022/03/20(日) 01:39:27.35ID:KeTIMbSf
powershellは行志向寄りの言語だから改行はC/C++でいう暗黙の副作用完了点みたいな意味を持っている
何も考えず複数行にまたがる式を書くと思わぬ事故に繋がるから、C/C++の\やVBの_みたいに行継続を示す`を行末に付けるといいよ

$array_of_array = @( @('1-1', '1-2', '1-3') `
, @('2-1', '2-2'))
2022/03/20(日) 14:33:02.79ID:V8R16naX
>>161
今回の挙動の予想や理解は、構文のパース(式・文の区切り)、
独特なパイプラインの挙動、分かりづらい「単項 ,」の存在などがあり
わりと難易度の高いものです。

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

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

あとは>>157のMSのサイト等。
about_*も有用な事が書かれてますが、日本語訳やサンプルコードの質が酷く、
多くの人がよく使う機能と一部の人が稀に使う機能が同じ扱いの記述なのが難点。
2022/03/20(日) 22:00:12.10ID:L+yKE55O
Powershellの洋書翻訳はもっと盛んになってほしい
オライリーのクックブックも原著は改定4版まで出てるのに日本語は初版のままだし
2022/03/21(月) 00:56:42.09ID:OI2SuuED
今時英語できないの日本人だけだからな
土人とか馬鹿にしてる韓国、中国、インド、ベトナム、フィリピンなんてネイティブレベルで英語できるからな
これで日本のレベルは低くないとかそれ以前の問題だよ
2022/03/21(月) 08:39:53.52ID:2Zu3Swq+
エリート層は英語できるだろうよ
馬鹿は海外だと底辺でも英語ペラペラだと思ってやがるが
2022/03/21(月) 09:24:20.27ID:JwhA0ika
日本ですら母国語での情報の鮮度が落ちるんだから
それらの国のプログラミング学習希望者は
必然的に英語の勉強からしないといけないだけの話じゃないかな?

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

アニメ理解したいから日本語勉強しましたと
同じレベルの話な気がする
2022/03/21(月) 09:42:44.22ID:3OVxtXqz
まとめて挙がってるけど国によって差は大きい
インドとフィリピンは英語が公用語で世界でも有数の英語話者が多い国

日本の英語力が低すぎて世界に遅れを取っているというのは同意
学校教育も都度見直されてるしそのうち改善されるんじゃねーの、知らんけど
プログラマーなら英語を読むだけでもできるように少しずつ学ぶ気概は欲しい
ボク英語わからないんですと幼稚な変数名を付け続けるのはよくない
2022/03/21(月) 14:48:55.98ID:fHQFhWIP
日本は国内に金と仕事があるせいで海外でなくても稼げるからなあ
英語理解できなくても儲かる職業の筆頭が
マスコミと教育と役人政治家の時点で英語教育が変わるわけ無いじゃん
2022/03/21(月) 16:01:23.66ID:l99FVYBX
ITに限定すると英語は必要なんだけど英語に限らず日本のITエンジニアの多くは勉強しない
能力を伸ばしても給料が上がらず残業が増やされるだけと諦めるのが常態化している
2022/03/21(月) 16:10:09.00ID:l99FVYBX
国内に金があるというのは微妙な話になってきている
世界ワースト級の低成長による沈下を続けていて、本当に有能なエンジニアは海外に流出して残るのはIT土方ばかり
ノーベル賞受賞者が元日本人ばかりというのと同じような話が起こってる
GAFAのようなIT企業が伸びないから低成長から抜け出さない負のスパイラル
2022/03/21(月) 21:14:58.00ID:dTmdB0AV
海外ならGAFAみたいな企業がたくさんあるとでも思ってるのかこのゴミは
GAFAは世界中でも1つしか無いんだよ
2022/03/21(月) 21:25:38.84ID:vIzK+CHc
GAFAはひとつとな?
MARCHはひとつみたいな哲学かな?
のようなという日本語の意味はわかるのかな?
2022/03/21(月) 22:11:34.27ID:y82izW1t
脱線しとるな
2022/03/22(火) 00:10:37.43ID:KVIRUNm3
これ使って出来ることってフォルダ弄りファイル弄り設定弄りだけ?
他に出来ることないの?
2022/03/22(火) 00:21:42.31ID:kikOm2qa
あとは何かプログラムを走らせたり、せいぜいOSの機能を実行するくらいかな
リモートで出来たりするけど、しょせんはローカルに出来ることがリモートでも出来るってだけだな
まだ勉強をはじめたばっかりだけど、そのマシンで出来ないことは出来ないんだなって分かった
2022/03/22(火) 00:25:39.51ID:gjcW4Tfu
>>175
bashなんかのシェルとは違って.NETベースだからC#やVB.NETでできることは一通りできるよbashなんかと違ってね
メンテが楽だからあえてpowershellでGUIを作ったりする場合もある
2022/03/22(火) 00:37:38.83ID:aUdC0GfB
正規表現使えるしWindowsだとわざわざPythonセットアップして使うより楽だし利便性高い気がする
2022/03/23(水) 00:40:52.77ID:G2Twh9Sv
>>175
PowerShellは基本的にはWindowsサーバーの管理に使うもの
管理系のコマンドレットが非常に充実している
2022/03/23(水) 04:18:15.48ID:IVt1k3VA
>>177
出来るからって普通はやらんよまともな脳みそしてるならVSCode使う
お前みたいなのが秀丸やEMでコーディングしてるでぇー(ドヤッっイキリ散らかして周りが迷惑する馬鹿そのものだな
2022/03/23(水) 08:31:22.61ID:eqSZnoCQ
>>180
VSCodeを使うの意味が分からん
VSCodeでPSスクリプト組むならいいの?
なんで処理系の話でエディタの話になるの?
2022/03/23(水) 09:01:03.65ID:TpwnHNL9
分かってるくせに…
対面だと「何いってんだコイツ…」とか思いながらも愛想笑いしてそうだな
2022/03/23(水) 10:01:20.99ID:Jvnypl+E
釣りでしょ
面倒見いい人なら、オマエそれブーメランやんけーて言ってあげたら喜ぶよ
2022/03/23(水) 10:04:37.18ID:11NHOGIK
この煽り合いもPowershellスキルの一部なんですか?
2022/03/24(木) 03:56:01.53ID:cKyI7Sj4
write-sqltabledateで列名は指定できますか?
計算列のあるテーブルでその列を飛ばしたいのですがPsCustumObjectのプロパティ名が無視されて並び順で投入されてしまいます。
2022/03/24(木) 21:13:21.68ID:vudxrsxx
https://i.imgur.com/O3zZKes.jpeg
2022/03/25(金) 04:05:40.26ID:qE/8IX5m
>>186
すいません
Write-SqlTableData
でした…
よろしくお願いします
2022/03/26(土) 14:42:03.29ID:u+BPDoH4
そういう挙動ということはWrite-SqlTableDataはメタデータを考慮してなさそうだし
Invoke-Sqlcmdでやれば?
2022/03/26(土) 14:50:17.14ID:pYdvgAQA
コマンドレットの命名規則をケバブケースにしたMSの馬鹿を殺してやりたい
補完でタブ押して確定してまたタブ押して確定してってのがめちゃくちゃイライラする
2022/03/26(土) 14:56:08.98ID:VSlpRLnL
自分の思い通りじゃないとすぐにイライラしたり殺したくなったりする
2022/03/26(土) 18:44:07.02ID:MJID/KD0
ちんちんシュッ!シュッ!シュッ!
2022/03/26(土) 21:08:39.76ID:MzILs1Nj
>補完でタブ押して確定してまたタブ押して確定して

状況が分からん
2022/03/26(土) 21:42:22.31ID:M1Ul1dov
文字列をPowerShellの文字列リテラルとして出力したいのですが、どうやったら楽ちんに出来ますか?

例えば下記を実行すると
$s = "``i`'`""
function literally {
param ($t)
return $t
}
Write-Output (literally $s)
実行結果は
`i'"
こうなりますが、
"``i`'`""
こうなってくれる function literally は既存の関数にありますか?
2022/03/27(日) 06:15:33.62ID:LvwD4OI0
>>188
ありがとうございます
やっぱそれが無難ですかね
IDENTITYにしたオートインクリメントな列は空文字列の代入で飛ばせたので計算列も何か方法が無いかと思ったのですが…
2022/03/27(日) 13:30:01.63ID:mnGGi+fZ
>>193
literally が何を意図してるのかわからんが
単一引用符のヒアドキュメントで囲むとか
$s = @'
"``i`'`""
'@
必要なリテラル部分だけ抜き出したファイルを作成してgcで読むとかすりゃいいんじゃね
あとは必要ならInvoke-Expressionなりして使う
まじめにコード内でエスケープ処理とかやろうとしたら一晩掛かるよ
2022/03/28(月) 00:44:41.31ID:8p5xi9DH
まじめなエスケープ処理を10分くらいでできる関数とかないですか
2022/03/28(月) 00:54:22.58ID:8p5xi9DH
--- ここから x.ps1 ---
function x {
$s = (Get-Content -Path 'a.txt')
Write-Output ('$a = ' + "'" + $s + "'")
}
x | Out-File 'a.ps1'
--- ここまで ---

--- a.txt の中身が ---
im.dat
--- ここまで ---

の場合
2022/03/28(月) 00:57:03.84ID:8p5xi9DH
a.ps1 は
$a = 'im.dat'
となって PowerShellで読み込める

--- a.txt の中身が ---
i'm.dat
--- ここまで ---
の場合
a.ps1 は
$a = 'i'm.dat'
となってシンタックスエラーになる。こういう場合のためにエスケープ処理をしたいのです。
2022/03/28(月) 02:14:50.68ID:vgVAp+/s
>>198
であるならば>>195で示したヒアドキュメントを使えばそんな処理は不要になる
function x {
$s = (Get-Content -Path 'a.txt')
'$a = ' + "@'"
$s
"'@"
}
x | Out-File 'a.ps1'
2022/03/28(月) 02:28:26.94ID:8p5xi9DH
a.txt の内容が下記の場合はエラーになります。
'@.dat

----
いまさら気が付きましたが、やりたいことは、
PowerShellスクリプトをPowerShellで出力したいので、文字列をエスケープしたい。
最初から、こう言えればよかった。
2022/03/28(月) 07:29:09.01ID:vgVAp+/s
>>200
そういうのも想定するなら'@で分割して結合するだけ
これで穴の無さそうなエスケープ処理相当にはなったかな
function x {
$s = Get-Content -Path 'a.txt'
[string[]]$t=$s -split "'@"
for ($i = 0; $i -lt $t.length; $i++) {
if ($i -eq 0) {
'$a = ' + "@'"
} else {
'$a += ' + "`"'@`""
'$a += ' + "@'"
}
$t[$i]
"'@"
}
}
x | Out-File 'a.ps1'
2022/03/28(月) 08:39:09.99ID:5tj62u6D
文字列リテラルの構文仕様を見るかぎり、

function ConvertTo-StringLiteral ([string] $s) {
 '"{0}"' -f ($s -replace '[$"\u201C-\u201E`]', '`$&')
}

でいいのでは。

function x {
 $s = Get-Content a.txt
 '$a = ' + (ConvertTo-StringLiteral $s)
}

みたいに使う。
2022/03/28(月) 09:30:54.03ID:5tj62u6D
>>201
普通の「'」以外のシングルクォート類(*)も、正当なシングルクォート文字なので、
a.txt に「‘@.dat」とか入力されるとエラーになる穴が...。

(*) U+2018、U+2019、U+201A、U+201B
2022/03/28(月) 20:36:51.74ID:vgVAp+/s
>>202-203
非常に勉強になったよ
ありがとう
2022/03/29(火) 02:15:34.71ID:ieHzhZh4
>>202
https://www.microsoft.com/en-us/download/details.aspx?id=36389
これを見つけたので 22ページあたりを読むと、シングルクォートで囲む verbatim-string-literal は、割とシンプルで
single-quote-character(普通のシングルクォート+4個) を含む場合に single-quote-character single-quote-character とするので

function ConvertTo-SingleQuotedStringLiteral ([string] $s) {
 "'{0}'" -f ($s -replace "['\u2018\u2019\u201A\u201B]", "'$&")
}
こうすればいいのだろうか?
2022/03/29(火) 02:33:47.96ID:ieHzhZh4
何でインデントついてるんだろと思ったら\u3000でしたか
207202
垢版 |
2022/03/29(火) 09:28:46.66ID:H9URZ70O
>>205
うん。範囲指定できるので、"['\u2018-\u201B]" とか書くと、もっとシンプルかも。

>>206
U+3000 の Unicode クラスは Zs で、正当な空白文字なので、コピペで動いてくれる。
2022/03/29(火) 21:51:03.77ID:SKE99kDT
B.1.9.3 文字列リテラル
https://docs.microsoft.com/ja-jp/powershell/scripting/lang-spec/chapter-15#b193-string-literals
209デフォルトの名無しさん
垢版 |
2022/04/04(月) 21:22:25.32ID:ECqCrQfL
>>1
$url=$($site="+pj.og.ldn.iakkokA3%etis=q?hcraes/moc.elgoog.www//:sptth".ToCharArray();[Array]::Reverse($site);-join $site)
"ソビエト人","支那人","朝鮮人" | % {start "$url$_";sleep 21}
2022/04/07(木) 22:32:51.33ID:49oapsGv
(Get-Date).ToString("M/d") # 4/7
(Get-Date).ToString("M") # 4月7日
(Get-Date).ToString("d") # 2022/04/07

"M"と"d"単体で取れないのは仕様なの?
2022/04/07(木) 22:51:48.46ID:UZkBrI19
>>210
書式指定を単体で使う場合は%を前置する

https://docs.microsoft.com/ja-jp/dotnet/standard/base-types/custom-date-and-time-format-strings#UsingSingleSpecifiers
2022/04/07(木) 23:27:13.95ID:49oapsGv
>>211
なるほど。ありがとう
2022/04/13(水) 14:32:54.13ID:Wntan1Ql
いえいえ
2022/04/13(水) 21:32:59.17ID:wBIIYhTi
事務員がこれ使って自動化して評価されるかね?
Excel VBAとかだと認知されてるし動きも分かるからアピールになりそうだけど、これはps1をダブルクリックしたら既に結果が出てるキンクリ状態になるんで何か地味なんだよね
出来ることは多彩なのにさ
2022/04/14(木) 08:19:21.43ID:Qn5tHQbB
結果を開いて見せつけてやればよろしいかと
2022/04/14(木) 16:18:50.55ID:NCtDoq3M
キンクリ状態てどういう意味なん
例えばExcel操作の自動化なら最初に$excel.Visible = $true
とでもしとけば同じようにリアルタイムで処理中の動きが出てくるけど
事務員ならいらん仕事押し付けられるのがオチだから隠しとけ
この程度でドヤりたいならIT土方にでも転職しなよ
217デフォルトの名無しさん
垢版 |
2022/04/14(木) 20:27:06.96ID:PvzsrQHs
事務員がマクロやスクリプトで評価されても給料や時給が上がったりはしないだろ
都合よく使われるだけだよ
退屈な定常業務から抜け出したい動機なら良いのかも
218デフォルトの名無しさん
垢版 |
2022/04/14(木) 20:32:25.20ID:PvzsrQHs
×定常業務
○定型業務
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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