PowerShell -Part 6

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

次スレは>>980が立ててね!!
584デフォルトの名無しさん
垢版 |
2022/11/06(日) 23:51:09.18ID:vSW2pkDA
>>583
ありがとうございます!
今回はreplaceを使っていこうと思います
2022/11/10(木) 20:57:05.64ID:bawORDDu
PowerShell 7.3 General Availability
https://devblogs.microsoft.com/powershell/powershell-7-3-general-availability/
What's New in PowerShell 7.3
https://learn.microsoft.com/en-us/powershell/scripting/whats-new/what-s-new-in-powershell-73
2022/11/12(土) 14:51:35.07ID:p3H1JcgM
>>585 日本語訳

PowerShell 7.3 の新機能
https://learn.microsoft.com/ja-jp/powershell/scripting/whats-new/what-s-new-in-powershell-73
2022/11/12(土) 15:22:51.03ID:c/ILT9OL
11でもPowershell起動すると新しいのお試ししろとか表示されるけど5.1で十分だよなぁ
他の鯖系のベンダーのモジュールが5.1に対応しなくなったら考えるわ程度
2022/11/12(土) 19:04:11.88ID:lKqjLh4g
>>586
前からexperimentalで有ったのは知ってたし、オプションだから嫌なら切ればいいんだけども…

cmdから呼ばれる想定のコマンドは引数処理に癖があるからといって、特定のプログラムのみ特別扱いするワークアラウンド的挙動にはちょっと賛同できない
ワークアラウンドというのはユーザーがやるものだ

pwsh側で個別対応をするとしても、ユーザーが期待する形式の引数を取って、コマンドの期待する形式に変換するラッパースクリプトを用意すれば済むだけの話

普段linux/macでpwsh使ってるから、どれ程の癖なのかは図りかねるが、
2022/11/14(月) 01:13:06.37ID:zoPzNIvr
$obj.('行');

1. 上記を7.3で実行するとハングする。
2. 5.1や7.2ではハングしない。
3. $prop = '行'; $obj.$prop; でもハングする。
4. '行'が違う言葉だとハングしない。
5. $obj.行; だとハングしない。
バグ?バグなの?ゲイツに電凸していいの?
590589
垢版 |
2022/11/14(月) 01:23:18.32ID:zoPzNIvr
あ環境はWindows11とmacOS13で再現してます。連投スマソ
591589
垢版 |
2022/11/14(月) 21:56:16.00ID:zoPzNIvr
589の条件4についてだけど、
$obj.([System.Text.Encoding]::UTF8.GetString((0xE8, 0xA1, 0x8C)));
でもハングして、UTF-8での先頭バイトが0xE8だった場合にハングするっぽい。
毎回ハングするのであんまり回数試してないけど。
2022/11/15(火) 01:46:29.41ID:E2xRIJUz
まともにテストしてないか
変なメンテナが紛れてるか
2022/11/15(火) 11:09:43.75ID:ADWqgLY3
7.30-preview.2 Core win10(en-US)だけど大丈夫な感じ

$gyo =[System.Text.Encoding]::UTF8.GetString((0xE8, 0xA1, 0x8C)))
$gyo

$trans=@{$gyo="go"}
$trans.$gyo, $trans[$gyo]
go

(まだ日本語IME入れてない新品なので行が入力できないのはご愛嬌)
属性/キーはハッシュ可能な任意のビット列で構わないはずなので、単にエンコルーチンの問題のはず、7.30-preview-2以降のgitレポの差分みては
2022/11/15(火) 11:40:25.67ID:Xte85wf7
cx-fxは開始バイトだから安定リリースで出してたらマルチバイト圏壊滅してそうだが
595589
垢版 |
2022/11/16(水) 02:47:51.66ID:VVslFgtK
>>592-594 ども!
>>593 ありがとうございます。
preview.3 から preview.4の間でなんかあったとこまで突き止めましたが、
preview.3から5までのStart-PSBootstrapがバグっててビルドに予想以上に時間かかったからもう寝るお
596589
垢版 |
2022/11/18(金) 02:58:42.77ID:5YGh8aoa
お巡りさんこの人でつ38909f7ee
でそのコミットの中身がこちら
Update .NET SDK version from `7.0.100-preview.2.22153.17` to `7.0.100-preview.4.22252.9` (#17061)
おふぅ。PowerShellのバグを追っていて大変なものを見つけてしまったーどうしよう?
2022/11/29(火) 18:07:22.13ID:bVQqRFK0
以前は PowerShell の日本語ドキュメントのリポジトリが Github に置いてあったはずですが今は消えていますよね?
事情がよくわからないんですが、マイクロソフトとしてはコミュニティで日本語翻訳を運用しない (機械翻訳でやっていく?) ということなんでしょうか。

それはそれとして、諸事情でネットワーク接続できない場所で日本語ドキュメントを読みたいんですが
どこかでまとめてダウンロードする方法とかありませんかね?
598デフォルトの名無しさん
垢版 |
2022/11/29(火) 21:34:29.76ID:S4GKm+YH
>>597
マイクロソフトにかきらず、英語以外の言語に翻訳することをみんなやめてしまっただけ。

ソフトウェアの更新スピードが速すぎて、ドキュメントを人間が翻訳する時間がない。
2022/11/29(火) 21:48:53.54ID:noJ3pHan
日本マイクソロフトは何してんの
2022/11/29(火) 23:10:55.01ID:F0R68kvV
日本語にすると曖昧になっちゃうからな
英語で厳密に説明されたほうがいいだろうし、ソフトウェア技術者だったら英語は素養の一つだね
2022/11/30(水) 01:07:23.00ID:oNUduEv2
>>599
ちょまどはイベントに参加したり楽しくやってる
2022/11/30(水) 01:12:58.71ID:TaPBZKHt
文字列検索する時は、ラテン文字のキーワードが検索結果に埋もれない日本語ドキュメントのほうが便利
2022/11/30(水) 02:05:17.65ID:k8p89eha
>>597
Get-Helpで取れる情報ならUiCulture指定してSave-Help
https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_updatable_help
それ以外ならGitHubから英語ドキュメント落としてきて機械翻訳かな
オフライン環境でスクリプト書く気はしないから必要なドキュメントは限られるのでは
2022/11/30(水) 08:53:37.63ID:QfqHtuzd
どうしてもドキュメントを日本語化してほしいなら16ビット時代みたいに
日本語版がリリースされる頃には英語版の新バージョンがリリースされている
みたいな事になってもおま国とか文句言わないようにしないとね
英語版が完成してからじゃないと翻訳作業を始められないんだから
2022/11/30(水) 12:40:03.59ID:4G7kek1Y
Google, DeepL, みらい翻訳

「みんなの自動翻訳@TexTra®」は、
国立研究開発法人情報通信研究機構(NICT)が開発した自動翻訳サイトです。無料
mt-auto-minhon-mlt.ucri.jgn-x.jp/

翻訳したいサイトのURLを入力するだけで、自動翻訳結果をエディタ上に再現
2022/11/30(水) 13:17:37.01ID:Occ07s0g
機械が無料で一瞬でそれなりの翻訳をしてくれる時代になったのに
わざわざ多ヵ国の翻訳チームを雇って変わり続ける膨大なドキュメントへの人件費を出す判断なんてできんだろなあ
607597
垢版 |
2022/11/30(水) 17:21:56.68ID:zA9UzzGK
私は現時点では PowerShell について全く知識を持たず、
入門的な資料を移動中の合間にタブレットコンピュータで読みたいと考えています。
(通信は出来ないので事前に入れておく必要があります。)

基本理念をわかれば個々のコマンドの資料はたぶん英語でも理解できると思うんですが
新しい概念そのものを英語で読むのはしんどいです。

オフラインで読みたいと思うと ePub (などの電子書籍形式) になっているとやりやすくて
そうするには元が Markdown なら一発で出来ると思ったんですが、
機械翻訳を通してその形に持っていくとなると面倒ですね。
608605
垢版 |
2022/11/30(水) 17:40:14.72ID:4G7kek1Y
Markdown は、HTML になるから、
「みんなの自動翻訳@TexTra®」で翻訳できるのでは?

翻訳したいサイトのURLを入力するだけで、自動翻訳結果をエディタ上に再現と書いてあるから、
ローカルPC にある、HTMLへのパスを入力すれば?
609597
垢版 |
2022/11/30(水) 18:10:28.67ID:zA9UzzGK
>>608
翻訳できることにはなんの疑いも持ってないですよ。
コマンド一発で出来るツールはないので手間がかかると言ってます。
2022/11/30(水) 21:29:56.51ID:QfqHtuzd
適当な電子書籍の解説本でも買えば?
2022/11/30(水) 23:01:06.28ID:k8p89eha
過去の公式日本語訳が出てきたとして、基本理念を理解したい人の役に立つレベルとは思えない
電子書籍買って読むほうがいい
2022/12/01(木) 08:18:35.61ID:iTNwCGJv
インアクションの邦訳ぐらい?古いのしかないな
2022/12/01(木) 13:08:12.37ID:Qs+E1f1w
もしも古い翻訳テキストが手元にあるなら
それでいいんじゃね
新しい要素だけググって調べてブラウザ上でctrl+Sするなりして保存しておけば?
614デフォルトの名無しさん
垢版 |
2022/12/03(土) 12:28:32.79ID:Jt/U29yp
配列の要素を逆順にしたものを得たいのですが, …たとえば,
$a = @(10, 0, 5)
これに対して
$a[-1..-$a.Length] …とすれば,@(5, 0, 10) が得られて,
それで不満は無いのですが,何かもっとシンプルに書ける気がして.
(→ でもこれって $a[-1..0] とは書けないんですね.)

あるいは
[array]::Reverse($a)
とすることで,$a 自体が逆順の中身に変えられるのですが
でも $a自体は 変えたく無いのです

感覚的には
$a.Reverse() とか
$a | Reverse-Object みたいに書けたらいいのに
とは思うのですが(…そんなものは無い)

文字列だったら
[linq.enumerable]::Reverse("abcdef") で逆順を得られるのに
同じ場所に 数値の配列を書いて
[linq.enumerable]::Reverse(@(0,5,1,2))
…としても,何故かできない (なぜなのかはc#に勉強不足な私には分からず)

ってなわけで,別に困ってるわけでは無いのですが
もっと シンプルな書き方ってありますか
615デフォルトの名無しさん
垢版 |
2022/12/03(土) 14:39:08.81ID:H3EtATlx
$a[length - 1 - n]
2022/12/03(土) 15:49:40.73ID:h4dim/Vw
>>614
とりあえず、$a[-1..-$a.Length]だと-1,0,1で並ぶから@(5,10,0)になっちゃうはず。
$a[$a.length..0] が正。
個人的にはlengthじゃなくてcount使ってほしい。

後はsort-object使うか。
$a|sort -des でいける。
ただし遅いので巨大配列には向かない。
617デフォルトの名無しさん
垢版 |
2022/12/03(土) 18:40:22.74ID:Jt/U29yp
>>616
$a[$a.Count..0] 言われてみれば! …これ使わせていただきます
なお,sort を使うと,どうしても数値でsortされてしまうので うまくいかない感じです
何の意味も無い基準でsortして(何の順番も変えないで) -desだけしてくれたらいいのですが
2022/12/03(土) 19:09:31.97ID:K8Dj9wl7
>>614
[linq.enumerable]::Reverse([int[]]@(0,5,1,2))
LinqのReverseはこれで動く
619デフォルトの名無しさん
垢版 |
2022/12/03(土) 19:46:36.52ID:Jt/U29yp
>>618 intの配列にcastってことなのか…半分くらいしか理解してませんが
ありがとうございます.
LINQは powershellだと 無理やり感があって,かえって使いにくい感じは ありますね
2022/12/03(土) 22:02:33.57ID:vihcAie/
Ruby なら、

reverse -> Array
reverse! -> self 破壊的変更

a = ["a", 2, true]
p a.reverse #=> [true, 2, "a"]
p a #=> ["a", 2, true] (変化なし)

a = ["a", 2, true]
p a.reverse! #=> [true, 2, "a"]
p a #=> [true, 2, "a"] 破壊的変更
621デフォルトの名無しさん
垢版 |
2022/12/05(月) 15:26:18.97ID:9N6A06cG
きっと とても初歩的なことだとは思うのですが

$a = "abc"
$job = start-job { write-host $a }
receive-job -Job $job # → 何も出力されない

これって スコープの問題なんでしょうか
{ブロック}の中の $aの中身を "abc"にしたいのですが
2022/12/05(月) 17:43:14.26ID:sXIIIS0k
$using:a
About_Remote_Variables
623デフォルトの名無しさん
垢版 |
2022/12/05(月) 18:59:35.95ID:9N6A06cG
>>622 ありがとうございます
ブロックの中の $a を $Using:$a と書けば望む動作になりました
まぁ、何でusingって名前なんだろ?とか
Remote Variablesとは言うけれど別にリモートじゃないし(?)など
まだ不思議な感じは残りますが…もうちょっと調べたり勉強してみます
624デフォルトの名無しさん
垢版 |
2022/12/05(月) 19:22:50.61ID:9N6A06cG
$a = "abc"
$job = start-job { param($str); write-host $str } -Arg $a
でも 受け渡せるんですね。
2022/12/05(月) 21:14:48.29ID:Xw9Qnajp
Start-Jobでスクリプトブロック実行すると
別プロセスのpowershell.exeが起動してそっちで動く。(少なくともPSv5.1では。)
イメージとしてはコンソールや.ps1から「powershell.exe -f 他スクリプト.ps1」で
他プロセスを動かすくらいに別スコープだと思ってればいいと思う。
626デフォルトの名無しさん
垢版 |
2022/12/06(火) 03:20:51.26ID:PbeCdWM3
>>599
マイクロソフトのサポートにはとんでもない質問が大量に押し寄せる。

Windows Serverが起動しなくなった。電源が入ってないけど、Windowsのバグに違いないやら、しつこい嫌がらせやら、女に変なことを聞く変態やらと3万円も払って電話してくる。
627デフォルトの名無しさん
垢版 |
2022/12/06(火) 03:22:42.62ID:PbeCdWM3
PowerShellのバージョンがわかりませんのでどうすればいいですか?

こんなのを3万円も払って教えてもらうのが日本人
2022/12/06(火) 06:55:15.41ID:yvaEv+2c
一時片手間にカスタマサポートやってたことあるけど結構トンデモ問合せは多い
いろいろ聞いて行ったら他社の製品の問合せだったなんてオチすらあるし
629デフォルトの名無しさん
垢版 |
2022/12/06(火) 07:03:21.20ID:wGOv2qdu
>>625 そういうイメージ…ということでわりと納得.
同じことですが…では、ブロックの中で処理中に 変数に何かを入れても
それは、receiveするまでは 取り出せないってことか…
2022/12/19(月) 19:06:25.36ID:ayS530mj
functionの中でhashtable @{}を作成してその中にウィンドウと紐付いてるハンドルオブジェクトやらを入れて返して
functionの呼び出し側で使おうとしたら無効なオブジェクトやら何やらのエラーが出てまともに使えなかった
PSObjectに変換して返したらエラーは出なくなったがこれ何だろう
怖すぎなんだが
2022/12/21(水) 00:09:46.82ID:5pWmYDMC
参照型/値型とかその辺の理解は問題ない?
とエスパーしてみる
2022/12/23(金) 17:58:06.26ID:F84mgbO0
紐付けてるオブジェクトやらは.NETの参照型ね
値型だったら恐らくこの問題は起きてないだろうし
PSCustomObjectのプロパティとhashtableの値への紐付けでオブジェクトの生存期間に差異があるようにしか見えないから
functionから戻る時に何か想定外な事が起きてるんだろうなあ
2022/12/27(火) 14:24:53.22ID:r8IxISV7
コマンド・プロンプトも一切つかったことない状況から
powershellの勉強最近始めたけど難しいね

先ず参考書籍少なすぎ
何から手を付けたらいいのか全くわからん

先輩諸兄はどんな感じで習得していったの?
2022/12/27(火) 14:35:15.62ID:ZD0ehGa/
必要に迫られて色々とネットで調べて解決策を探し回る
そのコードから理解できない部分や言語の基本を調べる(変数や表示の仕方とか色々と)
という泥縄式だな
2022/12/27(火) 15:00:48.14ID:r8IxISV7
ネットしかないのか、仕方ないな、、、

しばらくは苦しみながら覚えるしかないかぁ
2022/12/27(火) 15:45:26.24ID:/tVTIbQ7
Get-Help about_
で出てくるのを一通り読んどきゃ何も苦しむことなんてないだろ
2022/12/27(火) 17:56:17.16ID:0E4juWNJ
ある程度使えるようになってから書籍買って読んだら
「大体全部知ってるわ」ってなったから
ネットだけでもいけるだろ
2022/12/27(火) 18:20:49.07ID:U6V4cNSL
他の言語と違って思い込みて書かれた間違った記事が多いから警戒すべし
2022/12/27(火) 20:24:26.94ID:jYPDn/gh
ほかの開発言語やシェルプログラミングにまったく疎い状況からPoweshellで入門してゴリゴリ使いこなしてやろうという路線は正直筋が悪いと思う
とはいえ勉強のためにPythonあたりの入門書をやれとも言いづらい
やはり泥縄式かな
2022/12/27(火) 21:27:46.01ID:T5RPj38W
>>639
一応VBAとGASが多少できるなったから他の言語も余裕かな、っておもって
PowerShellに手を出したら苦戦してる感じ

一通り基礎を覚えたら実践的に色々と試してみたいけど
powershellは色々覚えることが多すぎてメンドイ、、、
2022/12/27(火) 21:53:19.53ID:fSsOcWwB
変数?配列?何それ状態から始めてる初心者だけど基本的な用語がわからないから検索にも苦労する
セオリーもわからないから無駄にあれこれやってあとはコメント書きまくってグチャグチャになってる
2022/12/27(火) 22:04:55.23ID:vIW/uBHA
PythonもJavaも全くコード書けないノンプログラマだけどPowerShellは分かり易い気がする
2022/12/27(火) 22:58:59.38ID:B+wJL+Im
素人だけど、「PowerShell実践ガイドブック」っていう本は、素人には理解しにくい仕様とかを理解するのにとても役に立った
ただ、いろいろ冗長でちょっと読みづらい本ではある
2022/12/28(水) 01:26:32.00ID:++xg0WRh
PowerShell上で cmd /C xxxx を使うのが最善という結論に到達する
こういうのでいいんだよ的な
2022/12/28(水) 14:16:21.29ID:dmcJ6Qpo
ヘルプが出来が良いので何も要らない気はするけど
ハック的なモノや中でどう動いてるとかはpowershellexplained、実用的な書法はPowerShellGetで人気のあるやつ読むとか
2022/12/28(水) 21:46:25.70ID:D+6cXnGF
PowerShell は配列周りがトリッキーなのを除けば比較的まともな言語だと思う
2022/12/29(木) 01:00:35.68ID:036NTvOT
覚え始めは Microsoft docs を探し、それでわからなければ個人の解説記事を探した
スクリプトを書くようになってからは about_ から知りたいことを追いかける事が増えた

上でも名前が上がった「PowerShell実践ガイドブック」は、ある程度できるようになってから読んだが
何もわからない状態で読むにも良いと思う
第2章までで基本的なことが身につく
2022/12/29(木) 15:03:24.27ID:867KtYrP
パワーシェルの勉強始めたいんですが、学習に良いサイトありませんか?
2022/12/29(木) 16:02:07.28ID:HWC94+Gl
>>648
実はこのスレだったりする
1つのサイト覗くよりたまにぜんぜん知らん知識が入ってくる
過去ログおすすめ
2022/12/29(木) 16:06:45.35ID:HWC94+Gl
あと間違った情報書く奴には必ず突っ込み入るから間違えたまま覚え事故も起き難くなる仕様だと個人的には思ってる
2022/12/29(木) 16:17:56.35ID:HWC94+Gl
powershell何某でぐぐって出てくる日本語の情報はなぜか間違ってたり思い込みで書かれた記事が放置されてて悲しい
情報源としてはstackoverflow辺りをまず探すのが安定
Microsoftの知りたかったことの全て系は役には立つけど知りたい事全てを補完できるわけではない
652デフォルトの名無しさん
垢版 |
2023/01/01(日) 00:27:17.84ID:CeabMe2h
やり方が多すぎて失敗しているものだからな
2023/01/03(火) 15:47:50.12ID:naMqCIBL
リリース当時は学生だったからPIAをむさぼり読んでたな、楽しい本だった
挙動で間違いやすいのは(スコープを除けば)基本パイプ周りだから、
パイプ使わないスクリプトを書いてけば初手で躓く要素は少ないと思う
654デフォルトの名無しさん
垢版 |
2023/01/03(火) 21:14:49.48ID:AaMOQNR6
>>653
シェルスクリプトを知っているのが前提だと思っていたが?
2023/01/03(火) 21:46:27.47ID:cXTWG1PB
パイプで間違う要素なんてあったっけ?
むしろ配列まわりの方が間違いやすい気がするが...
2023/01/03(火) 22:10:05.90ID:naMqCIBL
前提は知らんけど、配列回りで間違えるのがパイプ使ってる時では?
2023/01/03(火) 23:27:08.09ID:cXTWG1PB
>>656
いやパイプ関係なく PowerShell の配列は色々トリッキー

例えば複数のオブジェクトを配列で返すコマンドレットが要素が1つだけだとオブジェクト自体を返したりするとか
https://qiita.com/hitsumabushi845/items/fe4219ba9daa34f541c2

switch文に配列与えたら各要素を順番に適用する(要は勝手にループする)とか
https://step-learn.com/article/powershell/076-switch-loop.html
2023/01/04(水) 00:46:17.26ID:v02S4T2G
>>657
まさに前者をパイプ周り(のための)の仕様だって認識してる
カンマ演算子の使い方は知らないとできないけど、型指定しない変数に代入して原因がわからないってことはないでしょ
後者はforやforeach省略出来て便利ってだけで、トリッキーだとは思ったことないわ
2023/01/04(水) 03:45:39.75ID:jtN0WhrQ
switchの評価式に配列をぶち込む発想は他の言語経験有りなら起きないから無害だけど
function戻りの配列の扱いは慣れてても混乱するから特殊な事情が無い限りPSObjectや別のコンテナに入れて返す(脳死)
2023/01/06(金) 23:20:27.35ID:kugWcEru
どなたか助けてください。相談です。

一つのファイルに置換したい複数の数列(0.005→0.000、0.006→0.001、0.007→0.002、etc‥)が存在した場合、うまく自動で全て置換する方法はないでしょうか?

下の置換のコマンドを繰り返し使用してるのですが明らかに非効率で何かうまくできないか考えてます。

(Get-Content ファイル名) | foreach { $_ -replace "置換前","置換後" } | Set-Content ファイル名
661デフォルトの名無しさん
垢版 |
2023/01/07(土) 08:57:10.32ID:rjY6PjFx
>>660
$hash = @{ 0.005 = 0.000; 0.006 = 0.001; 0.007 = 0.002 }
$hash[0.006]

とすると 0.001 が返るから、"置換後" にあたる部分を $hash["置換前"] とすればいい。
詳しくはハッシュとかハッシュテーブルでググれ
2023/01/07(土) 14:47:12.03ID:tZDUx9Ho
ver6.0以降だとスクリプトブロック使えるから、一応こんな感じで一度にできることはできる

"対象の数値" -replace "^[-+]?[0-9]+[.]?[0-9]*", { [decimal]$_.value - 差分の数値 }

数字の足し引きならCSVデータとかで読みこんで処理した方がいいとは思うけど
2023/01/07(土) 15:16:28.02ID:fgMMnpAg
>>661,662
すげー。ありがとうございます。
664デフォルトの名無しさん
垢版 |
2023/01/08(日) 03:23:42.25ID:nZw+zsKC
0.005を足した数値にしたいと書いてないのが不思議

質問者は聞き方がわかっていない
2023/01/08(日) 09:53:58.06ID:n7Qx+Bf+
ちなみに、v5でも[regex]::Replace()のMatchEvaluatorにスクリプトブロックを渡せるから
>>662より手軽さが劣るけど同様の事ができる。
666デフォルトの名無しさん
垢版 |
2023/01/09(月) 14:33:22.12ID:2QUdKeZJ
サブディレクトリ以下の全てのファイルに対し、ゾーンIDの削除をしたいのですが、
各ファイルのゾーンIDは
Get-ChildItem -Recurse -File | ?{
$_ | Get-Item -Stream Zone.Identifier -ErrorAction Ignore;
} | Remove-Item -Stream Zone.Identifier;
に書けばできるみたいです。

powershell の勉強のため、下記のような書き方だと、どのように書けばできるのでしょうか?
$itemList = Get-ChildItem $targetFolder -Recurse;
foreach($item in $itemList){
Get-Item -Stream Zone.Identifier -ErrorAction Ignore;
}
2023/01/09(月) 15:34:37.62ID:2yNmR2Eh
>>666
こういうこと?
foreach($item in $itemList){
if (Get-Item -LiteralPath $item.FullName -Stream Zone.Identifier -ErrorAction Ignore) {
Remove-Item -LiteralPath $item.FullName -Stream Zone.Identifier
}
}
もちろん$itemはLiteralPathの代わりにパイプでオブジェクトごと渡してもいいと思う
668デフォルトの名無しさん
垢版 |
2023/01/09(月) 15:52:05.35ID:2QUdKeZJ
>>667
ありがとうございます。
勉強になりました。
2023/01/10(火) 05:44:39.22ID:bjV4/8ri
例えば、Ruby で、再帰的にフォルダのサイズを求めてみると、

require 'win32ole'
fso = WIN32OLE.new( 'Scripting.FileSystemObject' )

# 絶対パスのディレクトリ名の後ろに、* を付けること!
# . で始まる、隠しフォルダ・ファイルを除く。
# /**/* で再帰的に、以下の全てのフォルダ・ファイルを走査する
dir_path = "C:/Users/Owner/Documents/**/*"

target_dirs = Dir.glob( dir_path )
.select { |full_path| File.directory?( full_path ) } # フォルダのみ
.each do |folder|
folder_obj = fso.GetFolder( folder )

puts File.expand_path( folder_obj.path ) # \ を、/ に変換する
puts "#{ folder_obj.name } : #{ folder_obj.size }"
end

出力
C:/Users/Owner/Documents/a
a : 14231
C:/Users/Owner/Documents/a/b
b : 4666

# next で、次の繰り返しに進む事もできるが、
# select みたいなフィルターで絞り込む方が、可読性が高い
Dir.glob( dir_path ).each do |full_path|
next unless File.directory?( full_path ) # フォルダだけを処理する

puts full_path
end
2023/01/23(月) 12:43:06.27ID:y+pH12Ov
Tree /fとget-childitem select-object Full name,を組み合わせたデータがほしいのですが、ご存知の方、ご教示願います。
2023/01/23(月) 18:21:06.24ID:g43oPRJS
>>670
名前の通り再帰処理でフォルダのツリーデータ構造を作ってから出力する事になる。
powershellの関数呼び出しは100ぐらいのネストでスタックオーバーフローするので、
ある程度動作確認が出来たら再帰処理を配列とループに変換するか、
C#なりで書き直す必要があるかも。
2023/01/23(月) 23:52:13.30ID:Aq+myoAC
>>670
https://www.powershellgallery.com/packages/Show-Tree/1.0.0
146行目を書き換え Write-Output ("{0}+---{1}" -f $start, ($PSDriveFullPath))
673670
垢版 |
2023/01/24(火) 00:18:36.99ID:splC6Inp
>>672
ありがとうございますm(_ _)m。できました。スクリプトの実行が無効になっているため、読み込むことができません。と出ましたが、ポリシーを変更してできました。
>>671
ありがとうございます。制限があるのですね。
2023/02/08(水) 20:31:25.08ID:s0xdk+qH
@("2023/01/01,123","2023-01-02,abc","2023 01 03,あいう") | convertfrom-string -delimiter "," | sort-object p1 -descending | convertto-csv -notypeinformation
"yyyy/MM/dd"っぽいと勝手に日付時間の形式に変換されるのですがされないようにできますか?
windows10 PSVersion 5.1.19041.2364
2023/02/08(水) 21:02:50.26ID:s0xdk+qH
@("`"2023/01/01`",`"123`"","`"2023/01/02`",`"abc`"","`"2023/01/03`",`"あいう`"") | `
convertfrom-string -delimiter "," | sort-object p1 -descending | foreach-object {"$($_.p1),$($_.p2)"}
こうすれば出来たっぽいけど何かめんどくさい
2023/02/08(水) 21:55:45.34ID:Igk1TEx9
>>674
日付でソートするならばConvertFrom-Stringによる日付処理のままDateTime型で扱うのが正しいのでは?
2023/02/08(水) 22:42:40.57ID:s0xdk+qH
csv出力する際に "2023/01/01" が "2023/01/01 00:00:00" となるのを避けたいということです
ソート部分は別の処理をするかもしれないです
わかり難くてすいません
あとは tostring() で変換し直すかくらいでしょうか
2023/02/08(水) 23:16:16.35ID:4iQ2gNuN
>>674
676 の方針で書き換え量少なめパターン
@("2023/01/01,123","2023-01-02,abc","2023 01 03,あいう") | convertfrom-string -delimiter "," | % { $_.P1 = $_.P1.ToShortDateString() ; $_ } | sort-object p1 -descending | convertto-csv -notypeinformation

Convertfrom-String を使いつつ変換したくないという裏には深い事情がありそうだが
その深い事情を無視していいなら新しくオブジェクトを作るのが楽かな
@("2023/01/01,123","2023-01-02,abc","2023 01 03,あいう") | %{ [PSCustomObject] @{ 'Date'=$_.split(',')[0]; 'content'=$_.split(',')[1] } }
2023/02/08(水) 23:25:37.64ID:KpfZjU7w
自分もConvertfrom-Stringさえ使わなければ楽だと思うが、
当初の質問通りConvertfrom-StringでDateTime型への自動変換を避ける方法、
という事なら
$a = @("2023/01/01,123", "2023-01-02,abc", "2023 01 03,あいう")
$t = @"
{p1*:2023/01/01},{p2:123}
{p1*:*},{p2:*}
"@
$a | ConvertFrom-String -TemplateContent $t

p1 p2
-- --
2023/01/01 123
2023-01-02 abc
2023 01 03 あいう
2023/02/08(水) 23:59:48.39ID:s0xdk+qH
>>678−679
ありがとうございます、参考にさせて頂きます
convertfrom-string を使っているのは前に使って動いてるからヨシッ!の精神と圧倒的な知識不足の為です
681674
垢版 |
2023/02/09(木) 22:15:00.08ID:Zgr5da8a
PSCustomObject なんて便利なものがあるんですね
おかげで Convertfrom-String も使わないで済むようになり
日付の自動変換もされなくなりました、ありがとうございました
682デフォルトの名無しさん
垢版 |
2023/02/09(木) 23:20:46.77ID:wH9zoD6W
本来、肩こりを和らげるマッサージの福利厚生の充実よりも、肩こりしない環境にすることが重要なわけだが、
PowerShellやってる人は、肩こりを和らげるマッサージを喜ぶ傾向が顕著
2023/02/09(木) 23:53:02.68ID:KDi1Xk2q
秀逸な例えをしたと思ってそう
2023/02/10(金) 10:20:51.76ID:UXgVE9re
肩こりしない環境ってなんだろ
コマンドプロンプト?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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