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/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
×定常業務
○定型業務
2022/04/14(木) 20:56:37.25ID:gLpPhM76
>>214
レスから知性を感じない
2022/04/14(木) 21:57:43.29ID:ICzBofFJ
それがパワー・シェルの能力……
ボクがこのps1をダブルクリックした時点で"結果"はもう確定しているッ!!
マクロみたいなトロいもんじゃあないんです
221214
垢版 |
2022/04/14(木) 22:27:15.00ID:7HZEzgeQ
やっぱり評判あんま芳しく無いからやめとくわ
回答してくれた皆さんありがとう
2022/04/15(金) 01:21:33.96ID:BWy9qJpj
>>220
ダブルクリックしたらISEが開いたんだが
2022/04/15(金) 08:51:23.89ID:UtgXyNoL
パワーシェル
破壊力 A
スピード B
射程距離 A
持続力 B
精密動作性 E
成長性 E

タイプ 自動操縦型
能力 人が嫌がる仕事をする

To Be Continued…
2022/04/15(金) 11:34:08.46ID:0ObfuMR0
パワーシェルのスピードは最下位ランクだろ
C#埋め込むなら別だが
2022/04/15(金) 11:53:27.02ID:UtgXyNoL
Cランクが人並みだからそれよりちょっと速いBランクが妥当
2022/04/15(金) 12:21:45.82ID:wKBILFEa
ウマナミナノネー
2022/04/15(金) 20:16:25.51ID:k1oDZsjR
windowsに標準に入っているってことだけはかなり優遇されてる
2022/04/15(金) 20:50:36.38ID:6g+y36jy
JScript.NETも入っているぞー
2022/04/15(金) 21:04:54.33ID:k1oDZsjR
プログラミングにおける認知度の低さは調べにくいし致命的
2022/04/15(金) 23:12:56.97ID:41Kz9otF
プログラミング言語の人気ランキング、順位変動は縮小傾向にある――RedMonkが調査
https://atmarkit.itmedia.co.jp/ait/articles/2204/13/news040.html

このランキングだとPowerShellは17位だぞ
Rustに勝ってる!
2022/04/15(金) 23:31:17.12ID:3ZMsARLO
PowerShellはランキングとか関係ないでしょ
PS5止まりで.NET4.8と心中する運命しかない、完全に袋小路の言語だよ
2022/04/16(土) 00:54:32.11ID:Zcudz7ky
Windowsと共に来たりWindowsと共に滅ぶべし
2022/04/16(土) 12:02:03.34ID:nVJ4wCm0
>>232
おれがこれまで作ったソフトのほとんどが共に滅ぶな
かなりの割合の開発者が一緒に滅ぶんじゃないだろうか
2022/04/16(土) 12:30:34.16ID:4vTOoh05
>>231
それってよく聞くけどなんの問題があるの?
Powershellなんてそもそもbetter MS-DOSであり
better WSHでしかないんだからなんの問題もないでしょ
なんか過剰な期待をしてた人がいるの?
2022/04/16(土) 12:58:53.88ID:NFUA2B25
そもそもすでにオープンソースなんだし衰退することはあるだろうけど袋小路とか意味わからん
2022/04/16(土) 15:51:46.54ID:9cJTCJfn
Powershellはオープンソースとして元気にやってるよ
7.3でコミュニティ主体の機能改善になりそうなのはこの辺とか?
scriptblockの引数の数でオーバーロード解決できるようにしたいというもの
https://github.com/PowerShell/PowerShell/issues/16940
2022/04/16(土) 15:57:59.43ID:9cJTCJfn
あとはc言語とかrustのようなネイティブアプリからPowershellをホスト出来るようになっていたりする
https://github.com/awakecoding/pwsh-native-host
2022/04/16(土) 16:17:49.58ID:GtnKHoFP
元気もなにも開発してるのMSの社員だし、6以降は事実上Azure専用だよ
2022/04/16(土) 16:24:09.56ID:nVJ4wCm0
>>237
コードちら見したけど普通にPSプロセス呼んでプロセス間通信した方がよくないってなった
2022/04/16(土) 18:36:59.47ID:9cJTCJfn
>>239
新たにプロセスを立ち上げることでコマンドライン等が生成されるのを回避したいらしい
2022/04/21(木) 00:00:35.45ID:9X1k5UGW
Powershell使えたら小5と付き合えますか?
2022/04/21(木) 00:43:18.15ID:KtzHzoax
きみが小5か小6なら付き合えるかもしれないね!
2022/04/21(木) 02:16:18.40ID:/A3pqg11
20年位前の30代前半の頃、小6と付き合ってた
powershellのお陰だと思うよたぶん
2022/04/21(木) 03:15:46.74ID:+OyHOy+D
>>243
そのころpowershellは未だ無いだろ

おれの場合は30年位前に小6と付き合っていると噂されたが事実はそのようなことはなく
当時powershellがあれば付き合えたのは確実だったと思う
2022/04/21(木) 15:56:01.36ID:6s2N7jdI
ワイも小学生低学年のころ、かけっこで1位だった
PowerShellのおかげだろうなあ
246デフォルトの名無しさん
垢版 |
2022/04/29(金) 11:16:42.60ID:8kZAWy9o
htmlの特定のID(例:<div id="XXX">)の中身を取得するにはどうすればいいでしょうか?
htmlのソース自体は$sourceに格納しています。
2022/04/29(金) 11:18:43.54ID:RNDpr+pH
文字コードを文字に変換するコマンドはありますでしょうか。

PS > change-moji -code SJIS 0x41
A
PS >

こういうコマンドです。
2022/04/29(金) 11:25:23.63ID:X7f5QGPR
[char]0x41
2022/04/29(金) 18:39:45.29ID:RNDpr+pH
>>248
ありがとうございます。
2022/04/29(金) 23:23:53.91ID:X7f5QGPR
>>246
$html = New-Object -ComObject "HTMLFile"
$html.IHTMLDocument2_write($source)
$html.getElementsByTagName("div") | ?{ $_.ID -like "特定のID" }
みたいにCOM使ってDOMで操作するか、正規表現で自力で解析するかしか思いつかない
powershellの定番の処理方法があるなら俺が聞きたい
2022/04/30(土) 02:08:01.29ID:TTQ8Rhtz
Ruby なら、Nokogiri, CSS Selector で、

require 'nokogiri'

doc = Nokogiri::HTML(<<EOT)
<div>あ</div>
<div id="xyz">い</div>
EOT

element = doc.at_css( '#xyz' )
puts element.content #=> い
2022/04/30(土) 02:45:41.62ID:PTNoCeDZ
getElementsByTagName 使うなら getElementById でいいんじゃない
253デフォルトの名無しさん
垢版 |
2022/04/30(土) 13:04:46.37ID:9f5J4pIa
Windows11は、結構Powershellが主役の位置に躍り出てきて、コマンドプロンプトの影が薄くなってる。
2022/04/30(土) 15:40:15.85ID:6Xk9b1VA
>>252
DOM操作にお詳しいなら補足してやって
俺は普段webページ解析なんてしないから適当に書いただけなので
2022/04/30(土) 23:17:02.29ID:/67qPyiA
xml形式ならselect-xmlというコマンドレットがあるんだけどね
2022/05/01(日) 07:07:03.47ID:Rd1MW222
Invoke-WebRequest でパースできるんだから Web からだけじゃなく html を格納した変数とかもソースにできればいいのにね
2022/05/01(日) 22:31:03.32ID:bsI6eYYg
COMのやつってIEのパーサなんだよね
くやしいけどこの辺を高度にやりたいならスクレイピングに定評のあるスクリプトでやった方がいいと思う
258デフォルトの名無しさん
垢版 |
2022/05/02(月) 03:17:08.47ID:GCJ++Ydj
>>250
ありがとうございます!
できました。
259デフォルトの名無しさん
垢版 |
2022/05/07(土) 22:39:06.01ID:A4G1I3Hd
$idContents = $html.getElementById($idName).innerHTML
でinnerHTMLを取得して、$idContentsに格納してある「src」の値(src="https://〜〜.jpg)はどうやって取得するのでしょうか?
2022/05/07(土) 23:18:18.03ID:aihC1Ap7
innerHTMLは使わない
getAttribute("src")を使う
261デフォルトの名無しさん
垢版 |
2022/05/08(日) 11:03:41.82ID:KUDJnBX7
$idContents = $html.getElementById($idName).getAttribute("src")
で試したのですが、$idContentsの中身は何もない状態です。
試しに、$idContents = $html.getElementById($idName)だけで実行すると、
$idContentsの中身に
innerHTML : <IMG id=img src="https://〜〜jpg/keystamp=〜〜;></A>
はあります。
2022/05/08(日) 12:11:23.98ID:q3KU1av3
$idNameは'img'なのか?
263デフォルトの名無しさん
垢版 |
2022/05/08(日) 12:17:10.62ID:KUDJnBX7
$idNameは'img'ではなく、'kr3'になります。
2022/05/08(日) 12:25:56.66ID:q3KU1av3
だから取得したいのは、id=imgのIMGタグにあるsrc属性値じゃないのか?
$idNameを'img'にしろよ
265デフォルトの名無しさん
垢版 |
2022/05/08(日) 12:30:38.21ID:vSiZdN2k
ID:KUDJnBX7はバカなんだろうね
266デフォルトの名無しさん
垢版 |
2022/05/08(日) 12:47:35.64ID:KUDJnBX7
>>264
なるほどです。ありがとうございました。
267デフォルトの名無しさん
垢版 |
2022/05/09(月) 13:37:41.35ID:Plp0Diry
特定のフォルダの中にファイルが10個以上あったらタイムスタンプが一番古いファイルを削除する処理をPowerShellでどう書くかどなたか教えろください。。
スクリプトはタスクスケジューラで日次で走らせるイメージです。
2022/05/09(月) 13:54:29.50ID:7AqNU3U0
一番古い一個だけを削除?それとも9個残して削除?
269デフォルトの名無しさん
垢版 |
2022/05/09(月) 14:11:58.68ID:I+mG682T
https://teratail.com/questions/23031
270デフォルトの名無しさん
垢版 |
2022/05/09(月) 16:57:08.12ID:Plp0Diry
>>268
一番古い一個だけを削除か、最新の9個を残してそれ以外を削除、の簡単な方でお願いしたいです。
2022/05/09(月) 17:37:09.13ID:7AqNU3U0
>>270
269の30を9に変更するのが簡単だと思います
一番古い一個だけを消すのは Select-Object -Skip 9 | Select-Object -Last と二回もSelect-Object するのでとても難易度が高いです
2022/05/09(月) 22:37:25.90ID:lywqA2G/
その質問バッチファイルスレで見たぞ
powershellの回答も貼ってある
2022/05/10(火) 00:05:58.23ID:aI8FHZ+3
【.cmd】 バッチファイルスクリプト %14 【.bat】
https://mevius.5ch.net/test/read.cgi/tech/1597442426/757-764

漏れが763 に、Ruby で書いた。
これをPower Shell(PS)用に書き直せばよい

764には誰かが、PSで書いている
2022/05/10(火) 01:07:57.29ID:0qiVBd6f
Multicsだったのか
2022/05/10(火) 23:04:11.60ID:gcxSlYEt
フリーランスエンジニアになってからの年収推移を公開【現在年収1000万】

【実体験】仕事ができない新卒エンジニアでも月収70万フリーランスになれる理由

フリーランスエンジニアは年収900万円までは余裕!現役フリーランスエンジニアが徹底解説

フリーエンジニアの平均年収!未経験が年収1000万円を超える方法とは?

月額150万円以上も可能?ITフリーランスで高単価を獲得できる理由

在宅で年収1000万稼ぐフリーランスエンジニアの稼ぎ方【再現できる】

フリーランスのエンジニアやるなら45歳までに貯金5000万円作れないと死ぬ説
276デフォルトの名無しさん
垢版 |
2022/05/12(木) 17:12:26.22ID:QXSbgRzq
フォルダA内にファイルを1つずつ個別に圧縮した上でフォルダBにそれぞれ出力するPowerShellってどう書けば良きでしょうか。
以下スクリプトを書いてみましたが、これだと1つずつの圧縮はできないようで。。。

//フォルダA内のファイル名(拡張子なし)を取得
$src = Get-ChildItem -Name C:\folderA
$file = [System.IO.Path]::GetFileNameWithoutExtension("$src")
//ファイル圧縮とフォルダ移動
Compress-Archive -Path C:\folderA\*.* -DestinationPath C:\folderB\$file
2022/05/12(木) 18:00:29.84ID:J4rOXsT5
if やらforやらはBASICからやり直せ
2022/05/12(木) 18:08:53.97ID:3e5cbbRq
>>276
以下のサンプルみたいにForeach-objectとか使ってCompress-Archiveをファイル毎に実行すればいい

$SrcPath = "C:\folderA\*.*"
$DstPath = "C:\folderB\"

Get-ChildItem $SrcPath|
ForEach-Object {$DstFile = Join-Path $DstPath ($_.Name -replace '^(.+)\..+$','$1');$_}|
ForEach-Object {Compress-Archive -LiteralPath $_.FullName -DestinationPath $DstFile}
2022/05/12(木) 18:27:26.96ID:ZUpAZ75N
PowerShellで複数アイテムに同じ処理をする場合は、アイテムをリストアップした出力をパイプでForEach-Objectに渡して
ForEach-Object の中で、一個ずつ($_ という変数で参照できる)処理するのが定番と思うの。

get-childitem | foreach-object { write-output $_.fullname $_.name }

とりあえず、これをやってみると感じが分かると思うの。
280デフォルトの名無しさん
垢版 |
2022/05/12(木) 20:27:03.08ID:QXSbgRzq
>>278
ありがとうございます。
ただ、フォルダAにファイル2つ置いて試してみたのですが、いずれも圧縮・移動されませんでした。。。
再度ご確認いただけますでしょか??
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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